配置 MySQL 8.0 集群使用 PXC 实现高可用实验
一、实验概述
本实验旨在基于 RHEL 9 系统,使用 Percona XtraDB Cluster(PXC)来配置 MySQL 8.0 集群以实现高可用。PXC 是一个基于 Galera 复制的 MySQL 集群解决方案,提供了多主多活的架构,确保数据的强一致性和高可用性。实验将使用三台服务器,IP 地址分别为 192.168.65.131、192.168.65.132 和 192.168.65.133。
二、实验环境准备
2.1 服务器信息
服务器编号 | IP 地址 | 主机名 |
---|---|---|
节点 1 | 192.168.65.131 | pxc-node1 |
节点 2 | 192.168.65.132 | pxc-node2 |
节点 3 | 192.168.65.133 | pxc-node3 |
2.2 安装必要软件
在所有节点上执行以下命令更新系统并安装必要的软件:
sudo dnf update -y
sudo dnf install -y wget vim firewalld
2.3 配置主机名和 hosts 文件
在每个节点上设置主机名:
# 节点 1
sudo hostnamectl set-hostname pxc-node1
# 节点 2
sudo hostnamectl set-hostname pxc-node2
# 节点 3
sudo hostnamectl set-hostname pxc-node3
编辑 /etc/hosts
文件,添加以下内容:
192.168.65.131 pxc-node1
192.168.65.132 pxc-node2
192.168.65.133 pxc-node3
2.4 关闭防火墙
sudo systemctl stop firewalld
2.5 关闭 SELinux
编辑 /etc/selinux/config
文件,将 SELINUX
设置为 disabled
:
SELINUX=disabled
重启服务器使设置生效:
sudo reboot
三、安装 Percona XtraDB Cluster
yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm -y
percona-release setup pxc-80
yum install percona-xtradb-cluster -y
四、配置 PXC 集群
4.1 配置节点 1(初始节点)
编辑 /etc/my.cnf.d
文件,在原文件中修改以下内容:
4.2 初始化节点 1
查看临时密码
sudo grep 'temporary password' /var/log/mysqld.log
先输入临时密码再重新设置 MySQL root 用户密码:
mysql -u root -p
alter user 'root'@'localhost' identified by 'mysql@123';
将引导服务mysql目录下的*.pem拷贝给其他服务器 (其他节点删除默认的认证)
[root@pxc2 ~]# cd /var/lib/mysql/
[root@pxc2 mysql]# rm -f *.pem
[root@pxc3 mysql]# rm -f *.pem
[root@pxc1 ~]# scp /var/lib/mysql/*.pem pxc2:/var/lib/mysql/
[root@pxc1 ~]# scp /var/lib/mysql/*.pem pxc3:/var/lib/mysql/
第一个节点需要以引导模式启动
[root@pxc1 ~]# systemctl start mysql@bootstrap.service
4.3 配置节点 2 和节点 3
在节点 2 和节点 3 上编辑 /etc/my.cnf
文件,修改 server-id
、wsrep_node_address
和 wsrep_node_name
:
节点 2
[mysqld]
# 基础设置
server-id = 132
datadir = /var/lib/mysql
socket = /var/lib/mysql/mysql.sock
log-error = /var/log/mysqld.log
pid-file = /var/run/mysqld/mysqld.pid
# PXC 相关设置
wsrep_provider = /usr/lib64/galera-4/libgalera_smm.so
wsrep_cluster_name = "pxc_cluster"
wsrep_cluster_address = "gcomm://192.168.65.131,192.168.65.132,192.168.65.133"
wsrep_node_address = "192.168.65.132"
wsrep_node_name = "pxc-node2"
wsrep_sst_method = xtrabackup-v2
# MySQL 配置
binlog_format = ROW
default_storage_engine = InnoDB
innodb_autoinc_lock_mode = 2
节点 3
[mysqld]
# 基础设置
server-id = 133
datadir = /var/lib/mysql
socket = /var/lib/mysql/mysql.sock
log-error = /var/log/mysqld.log
pid-file = /var/run/mysqld/mysqld.pid
# PXC 相关设置
wsrep_provider = /usr/lib64/galera-4/libgalera_smm.so
wsrep_cluster_name = "pxc_cluster"
wsrep_cluster_address = "gcomm://192.168.65.131,192.168.65.132,192.168.65.133"
wsrep_node_address = "192.168.65.133"
wsrep_node_name = "pxc-node3"
wsrep_sst_method = xtrabackup-v2
# MySQL 配置
binlog_format = ROW
default_storage_engine = InnoDB
innodb_autoinc_lock_mode = 2
查看临时密码,并修改密码
sudo grep 'temporary password' /var/log/mysqld.log
mysql -u root -p
alter user 'root'@'localhost' identified by 'mysql@123';
4.4 启动节点 2 和节点 3
在节点 2 和节点 3 上启动 MySQL 服务:
sudo systemctl start mysql
五、验证 PXC 集群
5.1 检查集群状态
在任意节点上登录 MySQL 并执行以下命令:
show status like 'wsrep_incoming_addresses';
show status like 'wsrep_cluster%';
如果 wsrep_cluster_size
显示为 3,wsrep_cluster_status
显示为 Primary
,wsrep_ready
显示为 ON
,则表示集群配置成功。
5.2 测试数据同步
在节点 1 上创建一个数据库和表,并插入数据:
CREATE DATABASE test_db;
USE test_db;
CREATE TABLE test_table (id INT PRIMARY KEY, name VARCHAR(20));
INSERT INTO test_table VALUES (1, 'test');
在节点 2 和节点 3 上查询数据:
USE test_db;
SELECT * FROM test_table;
如果能够查询到相同的数据,则表示数据同步正常。
六、高可用性测试
6.1 模拟节点故障
在节点 1 上停止 MySQL 服务:
sudo systemctl stop mysql
手动关闭pxc的mysql服务进程
kill -9 <pid>
6.2 检查集群状态
在节点 2 或节点 3 上登录 MySQL 并执行以下命令:
show status like 'wsrep_cluster%';
此时 wsrep_cluster_size
应该显示为 2,wsrep_cluster_status
仍然为 Primary
,表示集群仍然正常运行。
6.3 恢复故障节点
在节点 1 上启动 MySQL 服务:
sudo systemctl start mysql
再次检查集群状态,wsrep_cluster_size
应该恢复为 3。