一、部署MHA前提要求(必须满足)
1.1 SSH公钥认证
基本上MHA manager,MNA node,以及二次检测的节点,都需要互相信任。如果slave比较多,实例比较多,最好提高下 /etc/ssh/sshd_config MaxStartups 的值(默认是10)。
1.2 操作系统
仅在Linux上测试过。
1.3 单写master和多slave或者只读master
打从一开始,MHA就是为了解决数据一致性而出生,所以,最好是多个slave。如果你只有一个slave,根本就碰不到数据一致性问题,也就不需要mha了
如果是一个slave,用半同步复制也能解决。从mha 0.52开始,就支持多master的复制架构了,下面列举了多master环境下注意点:
多master,但是只允许单点写入。
默认情况下,只支持2层复制架构。
1.4 三层或者多层复制环境
默认情况下,MHA是不支持3层或多层复制架构的(Master1 -> Master2 -> Slave3)。MHA可以恢复Master2,但是不能恢复Slave3,因为Master2,Slave3有不同的master。为了让MHA支持以上架构,可以参考如下配置:
在配置文件中,只配置两层(master1 and master2)。
使用 “multi_tier_slave=1″ 参数,然后设置所有hosts。
1.5 MySQL版本必须是5.0或者高于5.0
MySQL版本必须大于等于5.0。
尽量使用高版本的MySQL。
1.6 使用mysqlbinlog 5.1+ 支持MySQL5.1+
MHA使用mysqlbinlog来应用日志到目标slave上的。
如果MySQL master设置的是row格式,那么MySQL必须是大于等于5.1版本,因为5.0不支持row。
mysqlbinlog版本可以这样被检测,mysqlbinlog –version。
如果你使用的是MySQL5.1,那么mysqlbinlog必须大于等于3.3。
如果mysqlbinlog的版本是3.2,而mysql的版本是5.1,那么mha manager会报错,且停止monitoring。
1.7 log-bin必须在候选master上开启
如果当前slave没有设置log-bin,那么很显然它不能成为提升为new master。
如果没有任何机器设置了log-bin,那么mha会报错且停止failover。
1.8 binlog,relay-log主从环境必须全部一致
对于主从两边的配置最好一模一样(不需要配置中设置read_only),主要是主库要有从库相关的复制参数配置。
复制过滤规则(binlog-do-db, replicate-ignore-db等等)必须全部一致,不然检查到会退出。
1.9 主库复制用户和业务用户必须在候选master上要存在
切换完成后,所有业务连接到新的主库,所以旧的主库用到的业务账号也必须在新主库有一份,不然就有大问题。
切换完成后,所有slave都必须执行change master命令。在new master上复制用户必须有(REPLICATEION SLAVE权限)。
2.10 使用purge_relay_logs来定期删除relay logs(两个节点则不必关心此条)
默认情况下,如果SQL线程执行完relay-log,relay logs就会被自动删除。但是这些relay-logs也许还会用来恢复其他的slave,所以你需要关闭自动删除relay-logs的purge线程,然后自己阶段性的来删除。如果是你自己来删的话,必须考虑复制延迟问题,最好让slave删除relay log不要在同一时间点,假如需要恢复,那么这个时间点所有relay logs都被删除了就不好了。
2.11 不要在SBR的环境中使用load data infile
不管是SBR,还是RBR,最好不要使用load data。
二、部署MHA
2.1 环境准备
接下来部署MHA,具体的搭建环境如下(所有操作系统均为centos 7.3 64bit,不是必须,mysql02和mysql03是mysql01的从,复制环境搭建后面会简单演示,但是相关的安全复制不会详细说明:
其中master对外提供写服务,备选master(实际的slave,主机名mysql02)提供读服务,slave也提供相关的读服务,一旦master宕机,将会把备选master提升为新的master,slave指向新的master。
关闭各个主机iptables加selinux
$ systemctl stop firewalld
$ setenforce 0
各个主机配置hosts
$ cat /etc/hosts
192.168.10.94 mha
192.168.10.91 mysql01
192.168.10.92 mysql02
192.168.10.93 mysql03
各个主机配置SSH互信,基本上MHA manager,MHA node,以及二次检测的节点,都需要互相信任。如下示例:
$ ssh-keygen
$ ssh-copy-id root@10.99.73.7
$ ssh-copy-id root@10.99.73.9
$ ssh-copy-id root@10.99.73.10
$ ssh-copy-id root@10.99.73.11