(3)两台slave设置read_only( 从库对外只提供读,因为slave可能选为master,因此不把它写入配置文件)
mysql -e 'set global read_only=1'
(4)master和slave都添加管理账号
mysql> grant all privileges on *.* to 'mha'@'10.10.10.%' identified by '123456'; Query OK, 0 rows affected (0.01 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)具体搭建过程在此不详细说了,可以参考前面atlas的相关博文,但是请注意以下要点:
(1)log-bin必须在candicate mater(备选主机)上必须设置,如果备选主机没有设置log-bin,那么在故障转移过程mha manager会检测不到log-bin,则备选主机不会成为新的master,即使你设置过candicate master=1;如果所有slave没有设置log-bin,则mha manager不会启动故障转移。
(2)replication用户必须在所有的slave上存在,否则masterha_check_repl会不成功
(3)replication过滤规则(binlog-do-db和replicate-ignore-db等)必须在所有msyql上一致,否则masterha_check_repl会不成功
5.mha配置
(1)创建mha配置文件目录并编辑配置文件
[root@rd-mysql-test4 mha4mysql-manager-0.53]#mkdir -p /etc/mha/ [root@rd-mysql-test4 mha4mysql-manager-0.53]#cp samples/conf/app1.conf /etc/mha [root@rd-mysql-test4 mha4mysql-manager-0.53]#mkdir -p /var/log/masterha/app1 [root@rd-mysql-test4 mha4mysql-manager-0.53]#vim /etc/mha/app1.conf [server default] #manger mha工作目录,用于产生相关状态文件 manager_workdir=/var/log/masterha/app1 #manger mha日志 manager_log=/var/log/masterha/app1/manager.log #mha产生日志的目录,需要足够的权限 remote_workdir=/tmp #master保存binlog的目录,如果master故障,但是ssh能通则用于拷贝复制二进制日志,保证数据一致性 master_binlog_dir=/data/mysql #mysql管理用户和密码,最好是root,以便执行所有mysqlm命令,如stop slaves,change master等 user=mha password=123456 #复制用户和密码 repl_user=rep repl_password=123456 #ssh的用户名和密码,为了方便拷贝复制,我们用root用户 ssh_user=root ssh_port=1022 #mha manager使用ping sql statement检测master的频率,如果超过3次不通则认定mysql master崩溃 ping_interval=1 #默认使用ping_type=SELECT检测,但是从0.53开始使用更可靠的CONNECT,从0.53开始使用更可靠的INSERT ping_type=CONNECT #故障转移使用的脚本 #master_ip_failover_script=/usr/local/bin/master_ip_failover #在线切换脚本 #master_ip_online_change_script=/usr/local/bin/master_ip_online_change #发送报警信息脚本 #report_script=/usr/local/bin/send_report #通过多种网络路径检测ssh是否能够连接到master脚本,若其中一个路径不通,则会通过另一个路径ssh连接到master #secondary_check_script=/usr/local/bin/masterha_secondary_check -s rd-mysql-test2 -s rd-mysql-test3 --user=mha --master_host=rd-mysql-test1 --master_ip=10.10.10.56 --master_port=3306 #关闭master脚本防止脑裂 #shutdown_script=/usr/local/bin/power_manager [server1] hostname=10.10.10.56 port=3306 [server2] hostname=10.10.10.57 port=3306 #备选master参数 candidate_master=1 #如果slave的relay log落后于master超过100M,将此选为新master时会花费较长时间,因此mha manager不会将此slave选为新的master。通过过设置此参数可以忽略这种情况 check_repl_delay=0 [server3] hostname=10.10.10.58 port=3306
注意:以上相关执行脚本命令的已经全都注释点,后面我们会通过手动执行的方式来充分了解,当我们全都弄明白了在恢复自动执行。
(2)设置relay log的清除方式默认情况下,slave上的relay log在sql thread执行完成后会自动清除,但是这些relay log可能在恢复其他slave时仍然需要。因此我们禁用relay log自动清除功能,使用定期清除relay log的方法。然而在手动清除的时候我们需要考虑到复制延迟的问题,在ext3文件系统中,删除大文件会花费很长的时间,这会导致严重的复制延迟。为了避免这种情况,我们可以通过建立硬链接的方式来避免。
mha node用purge_relay_logs工具来实现,它会创建硬链接,执行set global relay_log_purge