Percona XtraDB Cluster(PXC)
组通信:定义了数据库节点间的通信模式,保证复制数据的一致性
Write-Set Replication AJPI:为上层提供丰富的状态信息及回调函数,实现多点写入及同步复制
写集:一个将要被复制的事务
- 写集中不仅包含对事物影响的所有行的主键(组成写集的key),还包括事务产生的binlog(组成写集的data),key-data就是写集
- key用来验证和其他事务没有冲突
- data用来验证通过后应用与提交
数据传输方式 - SST全量传输,支持Mysqldump,rsyhnc,XtraBackup3种方式
- IST增量传输,支持XtraBackup
使用端口 - 3306,MySQL对外服务的端口号
- 4444,SST使用的端口
- 4567,组成员之间通信的端口
- 4568,IST使用的端口
搭建PXC集群
集群节点数最少3个,最多不要超过8个
方法一:通过Percona Release安装
安装Percona Release
sudo yum install -y https://repo.percona.com/yum/percona-release-latest.noarch.rpm
用以下命令查看当前系统已启用的仓库
sudo percona-release show
用一下命令启用 pxc80 release仓库
sudo percona-release setup pxc80
安装percona-xtradb-cluster
sudo yum install percona-xtradb-cluster
启动mysql服务
sudo service mysql start
查看临时密码
sudo grep ‘temporary password’ /var/log/mysqld.log
登录mysql客户端
mysql -u root -p
修改root密码
ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘rootPass’;
暂停mysql服务
sudo service mysql stop
搭建集群需要这几台服务器的密钥是相同的,这里建议将其中一台的密钥复制给其他几台服务器
/var/lib/mysql/*.pem文件
在mysql配置文件my.conf
添加加密信息
[mysqld]
wsrep_provider_options=”socket.ssl_key=server-key.pem;socket.ssl_cert=server-cert.pem;socket.ssl_ca=ca.pem”
配置节点1
配置文件中设置
wsrep_provider=/usr/lib64/galera4/libgalera_smm.so
wsrep_cluster_name=pxc-cluster
组成集群的机器节点ip
wsrep_cluster_address=gcomm://192.168.70.61,192.168.70.62,192.168.70.63
wsrep_node_name=pxc1
wsrep_node_address=192.168.70.61
pxc_strict_mode=ENFORCING
https://docs.percona.com/percona-xtradb-cluster/8.0/configure.html#configure
使用以下命令启动第一个节点
systemctl start mysql@bootstrap.service
登录进mysql客户端,查看集群状态
show status like ‘wsrep%’;
https://www.cnblogs.com/zhongguiyao/p/14143088.html
https://galeracluster.com/documentation-webpages/galerastatusvariables.html?highlight=wsrep_local_index#wsrep-local-index
配置节点2
修改配置文件的server_id以及wsrep_node_name,wsrep_node_address
然后使用systemctl start mysql进行节点启动
配置节点3
与2类似
搭建好后可以使用Haproxy进行四层的负载均衡
优点
-
数据同步复制,实现了强一致性,任何实例挂掉,数据都不会丢失
-
数据并发复制,客户端延迟很小
-
部署简单,扩容方便
-
多节点写入,故障切换容易
局限
-
只支持InnoDB引擎,而且所有都要有主键
-
由于要保证数据一致性,所以多节点并发写入时,锁冲突,死锁概率比其他模式高
-
由于实现了强一致性,而且是同步写入,所以写操作要在所有节点都执行成功才算成功,所以写入效率往往取决与集群中性能最差的节点,存在短板效应
每个节点都会发生写操作,存在写扩大问题
适用场景
- 追求强一致性
- 希望多点写入
- 市场正在被MySQL Group Replication抢占
Q.E.D.