搭建MHA的必备需求

一. SSH public key authentication

MHA manager连接mysql集群各实例是通过SSH来连接的,另外,当mysql-master有问题或者所在机器直接宕机情况下,MHA manager会检测出含有最新信息的slave,将该slave上的relay log发送到其他slave上,使slave彼此数据一致,所有,各slave之间也应该可以互相ssh连接,这个是通过公钥来实现的

实现方法

  1. 如果是单独的管理机器,先在manager机器上用ssh-keygen生成公钥,将id_rsa.pub中的内容拷贝到各节点上的~/.ssh/authorized_keys文件中
  • 在某一节点上用ssh-keygen生成公钥,并把id_rsa.pub中的内容拷贝到~/.ssh/authorized_keys文件中,然后将这三个文件一起拷贝到其他各节点相同位置
  • 注意修改这三个文件的权限为600!!!

测试ssh可用性的方法

masterha_check_ssh --conf=/etc/app1.cnf

二. 操作系统

只支持linux

三. 支持一主多从或双主多从结构

一主多从/一从结构是最普遍的,当主宕机后,如果有预设的备选master,该实例被推选为新的master,否则,含有最新relay log的slave被推选为master并将发送其余slave上缺失的relaylog,最后实现数据一致性,另外,如果旧的master所在服务器还可以通过ssh连接,manager会将宕掉的master还未来的及发送的binlog推送给其他的slave,使数据的损失最小

如果是双主多从结构,需要注意:

  1. 只有主master可以被设为可写,另一个master必须被设为"read-only=1"
  2. 只接受二级复制,如Master1 -> Slave2 -> Slave3,Slave3服务不可被管理

四. 三级或三级以上的级联复制结构处理

即上述的Master1 -> Slave2 -> Slave3结构,Slave3服务是不可被管理,如果master1宕掉,能提升为新的master的只有slave2

对于这种结构,需要注意

  1. 配置文件中只写一级和二级服务器的信息
  2. 在各服务器配置中添加参数"multi_tier_slave=1"

五. MySQL版本要求

必须是5.0以上版本,因为从5.0版本以后binlog格式都是采用了v4 format,MHA需要通过v4 format的binlog来识别relay log的位置,所以即使是5.0版本以上,也必须要保证binlog是v4 format,所以强烈建议使用MySQL 5.0.60以上的版本

六. mysqlbinlog版本要求

MHA利用mysqlbinlog来应用binlog到目标slaves,而mysql5.0中的mysqlbinlog不能识别row格式的日志,所以如果使用mysql5.1以上的版本,mysqlbinlog必须是3.3或更高版本才可以,否则会直接报错退出

七. 备选master的log-bin必须开启

备选master的log-bin没有开启时其不能被推选为master,所以如果备选master或现存的所有slaves都没有开启log-bin,MHA-manager启动报错,直接退出

八. Binary log 和 relay log的过滤规则必须完全相同

集群中所有实例的过滤规则(binlog-do-db, replicate-ignore-db, etc)都必须相同

九. 备选Master上必须有用于复制的用户

必须有用于备份的用户且用户名、密码必须与配置文件masterha_default.conf中的配置信息相同

十. 保存relay log并定期清理

一般情况下slave的sql线程执行完后吗,relay log会自动清除,但是在MHA集群中,relay log有可能会需要用于宕机后的数据一致性补齐,所以需要设置relay_log_purge=0
但是relay log并没有binlog的自动定期清理功能,所以需要手动清理,在MHA中有一个用于清理relay log的工具--purge_relay_logs
该工具会自动连接到mysql上执行relay_log_purge=1,等清理完后再执行relay_log_purge=0,所以需要为工具提供登录到mysql所需的信息

参数有:

--user
--password
--host
--port
--workdir
如果文件系统是ext3,一次性删除大量文件会引起严重的性能问题甚至严重的复制延迟,所以可以建立硬链接来缓解这种问题,该参数用来设置用来建立硬链接的指定位置,执行完成后会被自动删除,默认位置是 /var/tmp
--disable_relay_log_purge

默认的,如果relay_log_purge是开启的话,脚本会什么都不做自动退出,设置该参数后,脚本检测到relay_log_purge=1后会自动设置relay_log_purge=0

purge_relay_logs的使用

[app@slave_host1]$ cat /etc/cron.d/purge_relay_logs
# purge relay logs at 5am
0 5 * * * app /usr/bin/purge_relay_logs --user=root --password=PASSWORD --disable_relay_log_purge >> /var/log/masterha/purge_relay_logs.log 2>&1

建议:不同slave之间调用该服务的时间尽量错开,避免master突然宕机导致无relay log可用

十一. LOAD DATA INFILE

不要在binlog的statement模式下使用 LOAD DATA INFILE,能不用就不要用这个,如果必须用,先设sql_log_bin=0;待数据导完后再sql_log_bin=1;

你可能感兴趣的:(搭建MHA的必备需求)