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.