一、PXC集群简介:
PXC是“Percona XtraDB Cluster”的简称。它是Percona公司基于Galera协议的mysql高可用集群方案。可以保障数据库集群架构的高可用性和多个节点的读写与数据的强一致性。
PXC的主要特点:
● 每个节点均支持读/写
● 每个节点都包含完整数据。
● 事务自动实时同步复制到集群的所有节点,基本上无同步延迟。
● 集群所有节点数据保持强一致性。
● 可在任何时间点释放任何节点,不会出现数据丢失
● 部署简单
● 仅支持innodb引擎
● 所有表都要有主键
● 因为需要保证数据的一致性,当多节点并发写时,锁冲突问题比较严重。
● 任何更新事务都需要全局验证通过,才会在每个节点库上执行。因此集群性能受限于性能最差的节点(短板效应)。
PXC集群推荐至少个3节点。拓扑结构示意如下:
正常部署3节点的PXC集群,需要三台主机。但由于我本机资源有限,而且只是用于测试,因此准备在一台虚机上搭建3节点的PXC集群。
以下搭建过程,参照了官方文档(https://docs.percona.com/percona-xtradb-cluster/8.0/index.html)的指导说明。
二、准备一台虚拟机
1、创建一台VMware虚机
(1)运行VMware Workstation:
(2)选择在虚机中要安装的操作系统:
(3)分配虚机资源:
2、在虚机中安装Rocky Linux
(1)下载最新的Rocky Linux 9.4 ISO文件
下载地址:https://rockylinux.org/download
(2)挂载Rocky-9.4-x86_64-dvd.iso到虚机并安装
(3)启动安装Rocky Linux 后的虚拟机
三、在虚机上安装3节点的PXC集群
1、安装依赖包
yum install -y openssl socat procps-ng chkconfig coreutils shadow-utils perl-DBD-MySQL
2、创建MySQL的组和用户
groupadd -r mysql
useradd -r -g mysql -s /bin/false mysql
3、下载PXC安装包并上传到虚机
下载地址:https://www.percona.com/downloads#percona-xtradb-cluster
下载目前官网最新的版本(8.0.36),如下所示:
4、解压PXC安装包
tar zvxf Percona-XtraDB-Cluster_8.0.36-28.1_Linux.x86_64.glibc2.17-minimal.tar.gz -C /opt/
cd /opt
mv Percona-XtraDB-Cluster_8.0.36-28.1_Linux.x86_64.glibc2.17-minimal pxc
5、创建数据目录
mkdir -p /data/pxc/db{1,2,3}
chown -R mysql:mysql /data/pxc
6、设置环境变量
export PATH=/opt/pxc/bin:$PATH
7、设置PXC三节点服务实例的配置文件
(1)/etc/my.4000.cnf
[mysqld]
port = 4000
socket=/tmp/mysql.4000.sock
datadir=/data/pxc/db1
basedir=/opt/pxc
user=mysql
log_error=error.log
binlog_format=ROW
wsrep_cluster_address='gcomm://192.168.20.94:5030,192.168.20.94:6030'
wsrep_provider=/opt/pxc/lib/libgalera_smm.so
wsrep_sst_receive_address=192.168.20.94:4020
wsrep_node_incoming_address=192.168.20.94
wsrep_cluster_name=pxc-cluster
wsrep_provider_options = "gmcast.listen_addr=tcp://192.168.20.94:4030;"
wsrep_sst_method=xtrabackup-v2
wsrep_node_name=node4000
innodb_autoinc_lock_mode=2
(2)/etc/my.5000.cnf
[mysqld]
port = 5000
socket=/tmp/mysql.5000.sock
datadir=/data/pxc/db2
basedir=/opt/pxc
user=mysql
log_error=error.log
binlog_format=ROW
wsrep_cluster_address='gcomm://192.168.20.94:4030,192.168.20.94:6030'
wsrep_provider=/opt/pxc/lib/libgalera_smm.so
wsrep_sst_receive_address=192.168.20.94:5020
wsrep_node_incoming_address=192.168.20.94
wsrep_cluster_name=pxc-cluster
wsrep_provider_options = "gmcast.listen_addr=tcp://192.168.20.94:5030;"
wsrep_sst_method=xtrabackup-v2
wsrep_node_name=node5000
innodb_autoinc_lock_mode=2
(3)/etc/my.6000.cnf
[mysqld]
port = 6000
socket=/tmp/mysql.6000.sock
datadir=/data/pxc/db3
basedir=/opt/pxc
user=mysql
log_error=error.log
binlog_format=ROW
wsrep_cluster_address='gcomm://192.168.20.94:4030,192.168.20.94:5030'
wsrep_provider=/opt/pxc/lib/libgalera_smm.so
wsrep_sst_receive_address=192.168.20.94:6020
wsrep_node_incoming_address=192.168.20.94
wsrep_cluster_name=pxc-cluster
wsrep_provider_options = "gmcast.listen_addr=tcp://192.168.20.94:6030;"
wsrep_sst_method=xtrabackup-v2
wsrep_node_name=node6000
innodb_autoinc_lock_mode=2
8、启动PXC集群第一个节点的服务实例
mysqld_safe --defaults-file=/etc/my.4000.cnf --wsrep-new-cluster
9、修改mysql的root密码
(1)查看初始密码
grep "A temporary password" /data/pxc/db1/error.log
(2)修改密码
mysql -uroot -p -S/tmp/mysql.4000.sock
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'root_password';
mysql> flush privileges;
10、启动PXC集群第二、第三节点的服务实例
mysqld_safe --defaults-file=/etc/my.5000.cnf
mysqld_safe --defaults-file=/etc/my.6000.cnf
11、查看PXC集群状态
说明:
(1)wsrep_cluster_size:集群中的节点数
(2)wsrep_cluster_status:集群状态:
Primary:正常状态;
Non-Primary:集群发生脑裂;
Disconnected:集群处于无法连接状态
四、PXC集群的数据同步验证
使用以下过程验证:在第二个节点上创建一个新数据库, 在第三个节点上为该数据库创建表, 在第一个节点上向表中插入数据。
由于是在同一台虚机上,PXC的各个节点的服务端口不同,因此通过端口来加以区分:
1、在第二个节点上创建新数据库
2、在第三个节点上为该数据库创建表
3、在第一个节点上向表中插入数据
4、在各个节点上查看新增的数据
通过以上的测试结果可以验证:在一个节点写入数据(建库、建表、插入数据),均同步到集群的所有节点。
至此,完成了在一台虚拟机上,搭建3节点PXC集群,并做了简单的数据同步测试验证。
以上搭建过程,所需的所有软件,均可免费下载,特此分享给感兴趣的小伙伴。