MySQL的主从能解决读操作的可用性,如果从节点挂掉,也可以通过其他从节点继续提供读的操作,但是主节点的单点问题没有解决,因此在日常生产中会利用MHA配合主从架构来实现数据库的高可用。
MHA工作逻辑:
MHA会利用Select 1 As Value指令判断master服务器的健康性,一旦master down机之后,MHA从down机崩溃的master中把二进制日志保存下来,然后判断有最新数据更新的slave,
数据最全的slave应用中继日志的数据差,把差异数据同步到其他slave上,使之与其数据保持一致
应用从master上保存的二进制日志同步到所有slave节点上
这样所有节点上的数据都是一致的,
提升一个slave为新的master
使其他的slave连接新的master进行复制
故障master将被踢出集群,清除配置信息
MHA是一次性高可用性解决方案,只防止一次性的损坏,提升主节点之后即退出
选举新的master
如果设定权重candidate_master=1,按照权重强制指定新主,但是默认情况下如果一个slave落后master二进制日志超过100M的relay logs,即使有权重也会失效,如果设置check_repl_delay=0,即使落后很多日志,也会强制选择其为新主
如果slave节点数据之间有差异,最接近master的slave会成为新主
如果所有slave节点的数据都一致,按照配置文件顺序最前面的当新主
注意:为了尽可能的减少master服务器硬件损坏down机造成的数据丢失,因此在配置MHA的同时建议配置成MySQL的半同步复制
实现MHA集群架构:
10.0.0.7 manager(安装mha4mysql-manager包和mha4mysql-node包)
mha4mysql-manager包只兼容mysql5.7和mysql8.0,但和centos8上的mariaDB10.3不兼容
10.0.0.8 MySQL8.0 master(安装mha4mysql-node包)
10.0.0.18 MySQL8.0 slave1(安装mha4mysql-node包)
10.0.0.28 MySQL8.0 slave2(安装mha4mysql-node包)
10.0.0.7 manager安装mha4mysql-manager包和mha4mysql-node包
[root@mha ~]# yum -y install mha4mysql-manager-0.58-0.el7.centos.noarch.rpm
[root@mha ~]# yum -y install mha4mysql-node-0.58-0.el7.centos.noarch.rpm
10.0.0.8 MySQL8.0 master安装mha4mysql-node包
[16:43:25 root@master ~]$yum -y install mha4mysql-node-0.58-0.el7.centos.noarch.rpm
10.0.0.18 MySQL8.0 master安装mha4mysql-node包
[16:44:32 root@slave1 ~]$yum -y install mha4mysql-node-0.58-0.el7.centos.noarch.rpm
10.0.0.28 MySQL8.0 master安装mha4mysql-node包
[16:45:24 root@slave2 ~]$yum -y install mha4mysql-node-0.58-0.el7.centos.noarch.rpm
在所有的节点实现相互之间的ssh key验证
生成密钥
[root@mha ~]# ssh-keygen
Copy到自己的系统
[root@mha ~]# ssh-copy-id 127.0