一、概述
PXC:
PXC 是一套 MySQL 高可用集群解决方案,与传统的基于主从复制模式的集群架构相比 PXC 最突出特点就是解决了诟病已久的数据复制延迟问题,基本上可以达到实时同步。而且节点与节点之间,他们相互的关系是对等的。PXC 最关注的是数据的一致性,对待事物的行为时,要么在所有节点上执行,要么都不执行,它的实现机制决定了它对待一致性的行为非常严格,这也能非常完美的保证 MySQL 集群的数据一致性;
PXC 常用端口:
3306:数据库对外服务的端口号。
4444:请求 SST 的端口。
4567:组成员之间进行沟通的一个端口号。
4568:用于传输 IST。
二、搭建PXC 集群
1、环境部署
准备好下面三台服务器(基于CentOS7.x):
IP | 端口 | 角色 |
---|---|---|
192.168.8.143 | 3306 | pxc1 |
192.168.8.146 | 3306 | pxc2 |
192.168.8.147 | 3306 | pxc3 |
所有服务器 都配置hosts解析
[root@all ~]# vim /etc/hosts
192.168.8.143 pxc1
192.168.8.146 pxc2
192.168.8.147 pxc3
删除 MariaDB 程序包
[root@all ~]# yum -y remove mari*
2、 下载PXC安装包
[root@all ~]# yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm -y
[root@all ~]# percona-release setup pxc-80
[root@all ~]# yum install percona-xtradb-cluster -y
3、修改临时密码
三台服务器:
[root@all ~]# systemctl start mysqld
[root@all ~]# grep 'temporary password' /var/log/mysqld.log
2025-02-10T09:25:11.848736Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: &&-=sZnJl4cu
[root@all ~]# mysql -u root -p‘&&-=sZnJl4cu’mysql> alter user 'root'@'localhost' identified by '123456';
mysql> \q
[root@all ~]# systemctl stop mysqld
4、初始化数据库并创建集群
[root@pxc1 ~]# vim /etc/my.cnf
[mysqld]
server-id=143 #每台mysql的id不能相同wsrep_cluster_address=gcomm://192.168.8.143,192.168.8.146,192.168.8.147 # PXC集群的所有ip
wsrep_node_address=192.168.8.143 # 当前节点的IP
wsrep_node_name=pxc1 #当前节点的名称
[root@pxc2 ~]# vim /etc/my.cnf
server-id=146
wsrep_cluster_address=gcomm://192.168.8.143,192.168.8.146,192.168.8.147
wsrep_node_address=192.168.8.146
wsrep_node_name=pxc2
[root@pxc3 ~]# vim /etc/my.cnf
server-id=147
wsrep_cluster_address=gcomm://192.168.8.143,192.168.8.146,192.168.8.147
wsrep_node_address=192.168.8.147
wsrep_node_name=pxc3
5、 将引导服务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/
6、第一个节点需要以引导模式启动,二三节点上正常启动数据库服务
[root@pxc1 ~]# systemctl start mysql@bootstrap.service
[root@pxc2 ~]# chown -R mysql.mysql /var/lib/mysql/
[root@pxc2 ~]# systemctl start mysqld
[root@pxc3 ~]# chown -R mysql.mysql /var/lib/mysql/
[root@pxc3 ~]# systemctl start mysqld如果PXC某个节点出现异常,可能是因为集群节点间秘钥和证书文件不一致加入集群失败。默认情况下,系统变量pxc encrypt_clusler_traffic设置为ON,意味着所有集群流量都使用证书进行保护,所以要求所有节点使用相同的密钥和证书文件,systemcl start mysql启动初始话过程中生成默认密钥和证书文件,并将其放在datadir数据目录下,这就造成故障节点和其他节点密钥和证书文件不一致,因此需要将故障节点的".pem全部制除,并将某一个
正常节点数据目录下的*.pem文件全部复制到故障节点。
7、查看集群信息
[root@pxc1 ~]# mysql -uroot -p123456 -e "show status like 'wsrep_cluster%';"
[root@pxc1 ~]# mysql -uroot -p123456 -e "show status like 'wsrep_incoming_addresses';"