目录
搭建 PXC 集群
配置hosts解析
用 MySQL 软件模块的命令(三台都需要)
下载 PXC 安装包
启用PXC80版本
安装PXC集群
初始化数据库
第一个节点需要以引导模式启动:
查看临时密码
修改密码
免密登录
查询集群信息
查看证书
修改证书
查询集群信息
同步状态监控
节点2,3无需修改密码
节点下线
Percona XtraDB Cluster (简称 PXC)集群是基于 Galera 2.x library,事务型应用下的通用的多主同步复制插件,主要用于解决强一致性问题,使得各个节点之间的数据保持实时同步以及实现多节点同时读写。提高了数据库的可靠性,也可以实现读写分离,是 MySQL 关系型数据库中大家公认的集群优选方案之一。
准备好下面三台服务器,本文搭建PXC集群基于Rocky8.0环境:
IP | 端口 | 角色 |
---|---|---|
192.168.1.51 | 3306 | pxc |
192.168.1.52 | 3306 | pxc2 |
192.168.1.53 | 3306 | pxc3 |
[root@localhost ~]# vim /etc/hosts +
192.168.1.51 pxc1
192.168.1.52 pxc2
192.168.1.53 pxc3
或:
# cat >> /etc/hosts << EOF
192.168.1.51 pxc1
192.168.1.52 pxc2
192.168.1.53 pxc3
EOF
[root@localhost ~]# yum module disable mysql
[root@localhost ~]# yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
[root@localhost ~]# percona-release setup pxc-80
[root@localhost ~]# yum install percona-xtradb-cluster
之后还是对 Percona Server 数据库的初始化:
应为使用的是8.0版本,部分配置需要在初始化数据库前进行配置,如忽略表名大小写等
[root@pxc1 ~]# vim /etc/my.cnf
...
[mysqld]
server-id=51 #每台mysql的id不能相同
# Binary log expiration period is 604800 seconds, which equals 7 days
binlog_expire_logs_seconds=604800 #二进制日志过期时间为604800秒,等于7天
wsrep_cluster_address=gcomm://192.168.1.51,192.168.1.52,192.168.1.53 #都需要
wsrep_node_address=192.168.1.51 #将#去掉,改成对应IP
wsrep_node_name=pxc1 #集群名字
注意:pxc2和pxc3只需要server-id设置为52和53,集群名字改为PXC2和3即可。
[root@pxc1 ~]# systemctl start [email protected]
[root@localhost ~]# grep -i password /var/log/mysqld.log
2025-02-13T13:20:31.423023Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: KsN&IYcog4dq
[root@localhost ~]# mysql -uroot -p'KsN&IYcog4dq'
mysql> alter user root@localhost identified by 'mysql@123';
[root@localhost ~]# vim /etc/my.cnf
user=root
password=mysql@123
mysql> show status like 'wsrep%';
#(第一个节点)
mysql> show variables like 'pxc_encrypt_cluster_traffic';
+-----------------------------+-------+
| Variable_name | Value |
+-----------------------------+-------+
| pxc_encrypt_cluster_traffic | ON |
+-----------------------------+-------+
1 row in set (0.05 sec)
[root@localhost ~]# cd /var/lib/mysql
[root@localhost mysql]# ll *.pem
-rw------- 1 mysql mysql 1680 Feb 13 21:54 ca-key.pem
-rw-r--r-- 1 mysql mysql 1120 Feb 13 21:54 ca.pem
-rw-r--r-- 1 mysql mysql 1120 Feb 13 21:54 client-cert.pem
-rw------- 1 mysql mysql 1680 Feb 13 21:54 client-key.pem
-rw------- 1 mysql mysql 1676 Feb 13 21:54 private_key.pem
-rw-r--r-- 1 mysql mysql 452 Feb 13 21:54 public_key.pem
-rw-r--r-- 1 mysql mysql 1120 Feb 13 21:54 server-cert.pem
-rw------- 1 mysql mysql 1680 Feb 13 21:54 server-key.pem
将第一个节点的证书复制到第2个和第3个节点上面
#第2,3节点先删除证书
[root@localhost ~]# cd /var/lib/mysql
[root@localhost mysql]# rm -f *.pem
#在第1节点进行拷贝
[root@localhost ~]# scp /var/lib/mysql/*.pem pxc2:/var/lib/mysql
The authenticity of host 'pxc2 (192.168.1.52)' can't be established.
ECDSA key fingerprint is SHA256:5HjL01EqJ2nry7DtJVTglQ+GhVzIz54AfeI4AWcUC3E.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes #需要输入
Warning: Permanently added 'pxc2,192.168.1.52' (ECDSA) to the list of known hos
root@pxc2's password: #需要输入pxc2,192.168.1.52的开机密码(root)
ca-key.pem 100% 1680 942.8KB/s 00:00
ca.pem 100% 1120 807.8KB/s 00:00
client-cert.pem 100% 1120 1.5MB/s 00:00
client-key.pem 100% 1676 1.1MB/s 00:00
private_key.pem 100% 1680 1.8MB/s 00:00
public_key.pem 100% 452 908.5KB/s 00:00
server-cert.pem 100% 1120 2.1MB/s 00:00
server-key.pem 100% 1680 1.7MB/s 00:00
[root@localhost ~]# scp /var/lib/mysql/*.pem pxc3:/var/lib/mysql
#再在第2,3节点上修改证书权限
[root@localhost mysql]# chown mysql.mysql *.pem
接着在第二和第三个节点上正常启动数据库服务,命令如下:
[root@pxc2 ~]# systemctl start mysql
[root@pxc3 ~]# systemctl start mysql
mysql> show status like 'wsrep%';
或:
mysql> show status where Variable_name in ('wsrep_cluster_size','wsrep_cluster_status','wsrep_connected','wsrep_ready');
+----------------------+---------+
| Variable_name | Value |
+----------------------+---------+
| wsrep_cluster_size | 3 |
| wsrep_cluster_status | Primary |
| wsrep_connected | ON |
| wsrep_ready | ON |
+----------------------+---------+
4 rows in set (0.03 sec)
mysql> select * from performance_schema.pxc_cluster_view;
+-----------+--------------------------------------+--------+-------------+---------+
| HOST_NAME | UUID | STATUS | LOCAL_INDEX | SEGMENT |
+-----------+--------------------------------------+--------+-------------+---------+
| pxc1 | 4fdd3348-ea0d-11ef-8eec-ce7af56f28c3 | SYNCED | 0 | 0 |
| pxc2 | cf90d45e-ea15-11ef-9521-72c20777f912 | SYNCED | 1 | 0 |
| pxc3 | d608c0e9-ea15-11ef-a5fa-42a90e6cebce | SYNCED | 2 | 0 |
+-----------+--------------------------------------+--------+-------------+---------+
3 rows in set (0.00 sec)
加入集群用的就是节点1的密码
查看 PXC 集群状态信息,在任意一个节点执行以下命令:
[root@pxc1 ~]# mysql -uroot -p'mysql@123' -e "show status like 'wsrep_cluster%';"
mysql: [Warning] Using a password on the command line interface can be insecure.
+----------------------------+--------------------------------------+
| Variable_name | Value |
+----------------------------+--------------------------------------+
| wsrep_cluster_weight | 3 |
| wsrep_cluster_capabilities | |
| wsrep_cluster_conf_id | 3 |
| wsrep_cluster_size | 3 |
| wsrep_cluster_state_uuid | 47f68dce-940c-11ee-85d5-c29e7cbcc6e4 |
| wsrep_cluster_status | Primary |
+----------------------------+--------------------------------------+
PXC 集群允许动态下线节点,但需要注意的是节点的启动命令和关闭命令必须一致,如以引导模式启动的第一个节点必须
以引导模式来进行关闭:
[root@localhost ~]# systemctl stop [email protected]
其他节点则可以按照正常方式关闭:
[root@localhost ~]# systemctl stop mysql