我们使用了mmm和mha来管理我们的mysql集群.但是数据库的读取延迟一直是一个毛病.这里我们用percona公司的pxc解决方案来解决我们的数据库一致性.
pxc
pxc全名为Percona XtraDB Cluster,是percona公司开源的一个较为完美的mysql集群解决方案.该方案解决了一直以来诟病的主从延迟问题.属于多主架构.其优点如下
- 实现mysql数据库集群架构的高可用性和数据的 强一致性
- 完成了真正的多节点读写的集群方案
- 改善了传统意义上的主从复制延迟问题,基本上达到了实时同步
- 新加入的节点可以自动部署,无须提供手动备份,维护起来很方便
- 由于是多节点写入,所以数据库故障切换很容易
这么多优点,当然也有不少的缺点
- 新加入的节点开销大,需要复制完整的数据.采用SST传输开销太大.
- 任何更新事务都需要全局验证通过,才会在每个节点库上执行.集群性能受限于性能最差的节点,也就是经常说的短板效应
- 因为需要保证数据的一致性,所以在多节点并发写时,锁冲突问题比较严重
- 存在写扩大问题,所有的节点上都会发生些操作
- 只支持innodb存储引擎的表
- 没有表级别的锁定,执行DDL语句操作会把整个集群锁住,而且也 kill 不了(建议使用Osc操作,即在线DDL)
- 所有的表必须含有主键,不然操作数据时会报错
说了这么多,就让我们来搭建一下这个集群吧.
安装
percona公司提供两种安装方式,一个是源码安装,一个是使用在线的yum或者apt来安装.由于我的集群都是centos.所以我就采用了yum来安装的方式.
1 | sudo yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm |
如果是debian或者ubuntu
1 | wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb |
即可将源信息安装完成.剩下的就可以使用一句话就可以了.
1 | sudo yum install Percona-XtraDB-Cluster-57 |
当然,现在的版本是8.0,所以要执行如下语句
1 | sudo percona-release enable-only pxc-80 release |
即可完成安装.
用户设置
既然是mysql,那么,就用mysql的形式来修改用户名吧.
1 | systemctl start mysql |
得到临时密码,直接使用mysql_secure_installation,根据提示来修改密码即可.然后授权我就不说了.请参考mysql5.7授权,记得建立一个replication用户哦.
配置
我们建立了用户过后需要在/etc/percona-xtradb-cluster.conf.d目录下的mysqld.cnf修改成如下配置.
1 | [client] |
以上我们就配置一个基本的mysql配置.将binlog日志这些开启.剩下我们要修改的是wsrep.cnf
1 | [mysqld] |
以上就是我的配置.配置完成后,需要在首节点上使用
1 | systemctl start mysql@bootstrap.service |
来启用集群.其余节点直接使用
1 | systemctl start mysql |
即可.以上就配置好了,如何来查询我们的节点状态,可以使用如下sql语句
1 | show status like 'wsrep_cluster%' |
最后
由于percona的mysql需要使用3306,4444,4567,4568等端口,如果端口没有开启,请使用如下语句开启
1 | firewall-cmd --zone=public --add-port=3306/tcp --permanent |
这样就搭建好了我们的pxc集群.