系统 redhat 6.5 selinux=disabled iptables=off
管理节点 server1 : 172.25.60.1/24
数据节点 master :(server2)172.25.60.2/24 slave1:(server3)172.25.60.3/24 slave2:(server4)172.25.60.4/24
这里我配置了 master:server2 slave:server3 & 4
在所有结点(包括数据结点和管理结点)设置ssh密钥
ssh-keygen在管理结点上(分发公钥给所有数据结点):
##server1(172.25.60.1): ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.60.2 ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.60.3 ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.60.4在数据结点上(分发公钥给所有数据结点):
##server2(master): ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.60.3 ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.60.4 ##server3(slave): ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.60.2 ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.60.4 ##server4(slave): ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.60.2 ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.60.3(1)安装需要的包 mha4mysql-node-0.54-0.el6.noarch.rpm
yum install perl-devel perl-CPAN perl-DBD-MySQL -y rpm -ivh mha4mysql-node-0.54-0.el6.noarch.rpm(2)mysql配置
##**授权监控用户** shell> mysql -p Enter password: mysql> grant all privileges on *.* to root@'172.25.60.%' identified by 'Westos+101';(1)需要的包 mha4mysql-manager-0.56-0.el6.noarch.rpm mha4mysql-node-0.56-0.el6.noarch.rpm
(2)安装依赖性包 可以yum下载的:
yum install perl-devel perl-CPAN perl-DBD-MySQL -y其他rpm包:
perl-Log-Dispatch-2.27-1.el6.noarch.rpm perl-Mail-Sender-0.8.16-3.el6.noarch.rpm perl-Mail-Sendmail-0.79-12.el6.noarch.rpm perl-MIME-Lite-3.027-2.el6.noarch.rpm perl-MIME-Types-1.28-2.el6.noarch.rpm perl-Parallel-ForkManager-0.7.9-1.el6.noarch.rpm perl-Config-Tiny-2.12-7.1.el6.noarch.rpm perl-Email-Date-Format-1.002-5.el6.noarch.rpm(3)安装
rpm -ivh mha4mysql-manager-0.56-0.el6.noarch.rpm rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm(4)配置MHA manger mkdir -p /etc/masterha/app1 ##创建MHA目录 vim /etc/masterha/app1/app.cnf ##编辑配置文件
[server default] manager_workdir=/etc/masterha ##工作目录 manager_log=/etc/masterha/mha.log ##日志 password=Westos+101 ##监控密码 user=root ##监控用户 ping_interval=1 ##设置监控主库,发送ping包的时间间隔,默认是3秒,尝试三次没有回应的时候自动进行railover repl_password=Westos+101 ##主从复制用户密码 repl_user=root ##主从复制用户名 ssh_user=root ##ssh用户名 [server2] hostname=172.25.60.2 port=3306 candidate_master=1 check_repl_delay=0 [server3] hostname=172.25.60.3 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 [server4] hostname=172.25.60.4 port=3306 no_master=1(4)检测ssh配置
[root@server1 app1]# masterha_check_ssh --conf=/etc/masterha/app1/app.cnf(5)检查MHA配置
[root@server1 app1]# masterha_check_repl --conf=/etc/masterha/app1/app.cnf
(1)启用服务
[root@server1 MHA]# nohup masterha_manager --conf=/etc/masterha/app1/app.cnf > /etc/masterha/app1/mha_manager.log 2>&1 &当有slave 节点宕掉时,默认是启动不了的,加上 –ignore_fail_on_start 即使有节点宕掉也能启动MHA,如下:
nohup masterha_manager --conf=/etc/masterha/app1/app.cnf --ignore_fail_on_start >/etc/masterha/app1/mha_manager.log 2>&1 &(2)检查状态 可以使用masterha_check_status –conf=/etc/masterha/app1/app.cnf来查看mha状态
注意: 关闭MHA服务的命令:
masterha_stop --conf=/etc/masterha/app1/app.cnf(3)检查日志
tail -f /etc/masterha/app1/manager.log(4)主从切换后续工作 主库切换后,把原主库修复成新从库,然后重新检查状态,检查日志,启用服务。原主库数据文件完整的情况下,可通过以下方式找出最后执行的CHANGE MASTER命令:
grep "CHANGE MASTER TO MASTER" /etc/masterha/app1/manager.log | tail -1(5)检查是否有下列文件,有则删除 发生主从切换后,MHAmanager服务会自动停掉,且在manager_workdir目录下面生成文件app.failover.complete,若要启动MHA,必须先确保无此文件)
自动failover测试 在原master(server2)上:
/etc/init.d/mysqld stop在备用master(server3)上查看master信息:
mysql> show master status\G;在slave(server4)上查看slave信息发现master切换为server3:
mysql> show slave status\G;最后将server2上的mysql重新启用,并设置为slave
mysql> change master to master_host='172.25.60.3',master_user='slave',master_password='Westos+101',MASTER_AUTO_POSITION=1;注意: 自动切换成功后,MHA manager服务就自动停止了,所以需要重启