在四个节点的/etc/hosts中添加主机内容:
10.0.0.200 mycat01
10.0.0.201 master01
10.0.0.204 master02
10.0.0.202 slave01
在管理节点创建配置文件
[root@mycat01 ~]# cat /etc/app1.cnf
[server default]
# mysql user and password
user=root
password=123456
ssh_user=root
# working directory on the manager
manager_workdir=/var/log/masterha/app1
# working directory on MySQL servers
remote_workdir=/var/log/masterha/app1
repl_user=repl
repl_password=123456
user=root
ping_interval=1
remote_workdir=/tmp
[server1]
hostname=master01
port=3306
master_binlog_dir=/usr/local/mysql/data
[server2]
hostname=master02
port=3306
master_binlog_dir=/usr/local/mysql/data
#candidate_master=1
#check_repl_delay=0
[server3]
hostname=slave01
port=3306
master_binlog_dir=/usr/local/mysql/data
在所有节点的my.cnf 文件 添加一下内容
log-bin=mysql-bin
relay_log_purge=0
log-slave-updates=true
添加完记得重启所有mysql环境
所有节点(管理节点和node节点)实现无密码登录
MHA manager通过SSH访问所有的node节点,各个node节点也同样需要通过SSH来相互发送不同的relay log 文件,所以有必要在每一个node和manager上配置SSH无密码登陆。
设置目录和软连接
mkdir /var/log/masterha/app1 –p #管理节点 存放mha日志
ln -s /usr/local/mysql/bin/mysqlbinlog /usr/bin/mysqlbinlog #所有节点
ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql #所有节点
检测所有节点SSH连接是否配置正常
MHAmanager可通过masterha_check_ssh脚本检测SSH连接是否配置正常
masterha_check_ssh --conf=/etc/app1.cnf
在管理节点检查复制配置
为了让MHA正常工作,所有的master和slave必须在配置文件中正确配置,MHA可通过masterha_check_repl 脚本检测复制是否正确配置
masterha_check_repl --conf=/etc/app1.cnf
如果主从复制正常会出现
MySQL Replication Health is OK
开启Manager
当你正确配置了mysql复制,正确安装了manager和node节点,SSH配置也正确,那么下一步就是开启manager,可通过 masterha_manager 命令开启
nohup masterha_manager --conf=/etc/app1.cnf > /var/log/masterha/app1/mha_manager.log < /dev/null &
检查manager状态
当MHA manager启动监控以后,如果没有异常则不会打印任何信息。我们可通过masterha_check_status命令检查manager的状态,以下是范例
测试master的自动故障转移
现在master运行正常,manager监控也正常,下一步就是停止master,测试自动故障
转移,可以简单地停止master上的mysqld服务
[root@master01 bin]# /etc/init.d/mysql.server stop
Shutting down MySQL………… SUCCESS!
这时候检查manager的log日志,看看slave1是否成功成为新的master,并且slave2从slave1中复制。
查看MHA切换日志
vim /var/log/masterha/app1/mha_manager.log
Master failover to master02(10.0.0204:3306) completed successfully.
会出现迁移成功的字样。
注:有一个主库停止了服务,故障切换完毕, mha的服务也会停止
ok MHA搭建完成
MHA 配置文件介绍
cat /etc/masterha/app1.cnf
[server default]
manager_workdir=/var/log/masterha/app1.log //设置manager的工作目录
manager_log=/var/log/masterha/app1/manager.log //设置manager的日志
master_binlog_dir=/data/mysql //设置master 保存binlog的位置,以便MHA可以找到master的日志,我这里的也就是
mysql的数据目录
master_ip_failover_script= /usr/local/bin/master_ip_failover //设置自动failover时候的切换脚本
master_ip_online_change_script= /usr/local/bin/master_ip_online_change //设置手动切换时候的切换脚本
password=123456 //设置mysql中root用户的密码,这个密码是前文中创建监控用户的那个密码
user=root 设置监控用户root
ping_interval=1 //设置监控主库,发送ping包的时间间隔,默认是3秒,尝试三次没有回应的时候自动进行failover
remote_workdir=/tmp //设置远端mysql在发生切换时binlog的保存位置
repl_password=123456 //设置复制用户的密码
repl_user=repl //设置复制环境中的复制用户名
report_script=/usr/local/send_report //设置发生切换后发送的报警的脚本
secondary_check_script= /usr/local/bin/masterha_secondary_check -s server03 -s server02 # //一旦MHA到server02的监控之间出现问题,MHA Manager将会尝试从server03登录到server02
shutdown_script="" //设置故障发生后关闭故障主机脚本(该脚本的主要作用是关闭主机放在发生脑裂,这里没有使用)
ssh_user=root //设置ssh的登录用户名
[server1]
hostname=10.0.0.201
port=3306
[server2]
hostname=10.0.0.204
port=3306
candidate_master=1 //设置为候选master,如果设置该参数以后,发生主从切换以后将会将此从库提升为主库,即使这个
主库不是集群中事件最新的
slave check_repl_delay=0 //默认情况下如果一个slave落后master 100M的relay logs的话,MHA将不会选择该slave作为
一个新的master,因为对于这个slave的恢复需要花费很长时间,通过设置check_repl_delay=0,MHA触发切换在选择一个
新的master的时候将会忽略复制延时,这个参数对于设置了candidate_master=1的主机非常有用,因为这个候选主在切换
的过程中一定是新的master
[server3]
hostname=10.0.0.202
port=3306
设置relay log的清除方式(在每个slave节点上):