系统
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服务就自动停止了,所以需要重启