MHA
manager 10.10.58.17
master主 10.10.39.172
slave01(备主) 10.10.39.19
slave02 10.10.42.148
master VIP 10.10.3.117
LVS+keepalived
lvs主 10.10.58.17
lvs从 10.10.17.182
keepalived VIP 10.10.26.29
搭建前最好先看下架构图,了解每个节点的功能,心中有数
MHA 介绍
MHA 是自动化完成 MySQL Replcation结构的故障转移。 可以快速完成将从服务器晋级为主服务器(通常 10-30s) ,不会造成同步中数据不一致,而且不需要购买更多的服务器,也不会有性能损耗,没有复杂的布署(非常容易安装), 最为利害的也不用更改现有的布署环境。MHA当然也提供在线的有计划的维护主从切换: 可以更改一个正在运行的 Master 到一个新的 Master 也是很安全的,整个过程只需要 0.5-2 秒对于写的阻塞。
准备环境:centos 6.5 64
MHA 一主两从
Manager |
10.10.58.17 |
Master |
10.10.39.172 |
Slave01 |
10.10.39.19 |
Slave02 |
10.10.42.148 |
VIP 写 |
10.10.3.117 |
master VIP 10.10.3.117
Manager管理节点需要安装:
mha4mysql-node-0.56-0.el6.noarch.rpm
mha4mysql-manager-0.56-0.el6.noarch.rpm
其他节点需要安装:
mha4mysql-node-0.56-0.el6.noarch.rpm
一、首先实现4台机器直接的ssh互相
Manager:
#ssh-kengen -t rsa
#ssh-copy-id 10.10.39.172
#ssh-copy-id 10.10.39.19
#ssh-copy-id 10.10.42.148
Master 主:
#ssh-kengen -t rsa
#ssh-copy-id 10.10.58.17
#ssh-copy-id 10.10.39.19
#ssh-copy-id 10.10.42.148
Slave01(备主):
#ssh-kengen -t rsa
#ssh-copy-id 10.10.58.17
#ssh-copy-id 10.10.39.172
#ssh-copy-id 10.10.42.148
Slave02:
#ssh-kengen -t rsa
#ssh-copy-id 10.10.58.17
#ssh-copy-id 10.10.39.172
#ssh-copy-id 10.10.39.19
二、安装MHA管理软件
现在所有机器上安装依赖软件
# yum install perl-DBD-MySQL
# yum install perl-Config-Tiny
# yum install perl-Log-Dispatch
# yum install perl-Parallel-ForkManager
Manager:
#rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
#yum localinstall mha4mysql-manager-0.56-0.el6.noarch.rpm
注意:其他节点只安装mha4mysql-node-0.56-0.el6.noarch.rpm就可以
三、配置manager管理节点
将脚本:
app1.conf
masterha_default.conf
master_ip_failover
master_ip_online_change
上传至服务器:
#chmod +x master_ip_failover
#chmod +x master_ip_online_change
(脚本配置见文件)
注:no-master=1表示没权限成为主
candidate_master=1表示有权限成为主
master_ip_failover VIP自行替换
master_ip_online_change
四、验证SSH互信是否成功
#masterha_check_ssh --global_conf=/etc/masterha/masterha_default.conf --conf=/etc/masterha/app1.conf
五、在要配置主从的数据库上安装mysql(安装过程不做描述),环境安装的是5.6.35,
配置成一主两从的架构
这边主从复制账户是repl mysql连接账户是wangxin
六、检查主从复制
#masterha_check_repl --global_conf=/etc/masterha/masterha_default.conf --conf=/etc/masterha/app1.conf
报错1:
Can't exec "mysqlbinlog": No such file or directory at /usr/lib64/perl5/vendor_perl/MHA/BinlogManager.pm line 99.
mysqlbinlog version not found!
提示找不到mysqlbinlog,奇怪了,mysql是二进制安装的,环境变量全部配置完成,并且确认在master和slave上mysqlbinlog都是可以执行的,问题原因是没有读取到/etc/profile,
所以将软连接直接做到系统目录(在3台mysql上都要执行)
#ln -s /usr/local/mysql/bin/mysqlbinlog /usr/bin/mysqlbinlog
继续执行主从复制检查
报错2:
main::check() called at /usr/bin/apply_diff_relay_logs line 429
eval {...} called at /usr/bin/apply_diff_relay_logs line 409
main::main() called at /usr/bin/apply_diff_relay_logs line 97
Fri Aug 26 18:28:16 2016 - [error][/usr/lib64/perl5/vendor_perl/MHA/MasterMonitor.pm, ln129] Slaves settings check failed!
Fri Aug 26 18:28:16 2016 - [error][/usr/lib64/perl5/vendor_perl/MHA/MasterMonitor.pm, ln304] Slave configuration failed.
Fri Aug 26 18:28:16 2016 - [error][/usr/lib64/perl5/vendor_perl/MHA/MasterMonitor.pm, ln315] Error happend on checking configurations. at /usr/bin/masterha_check_repl line 48
Fri Aug 26 18:28:16 2016 - [error][/usr/lib64/perl5/vendor_perl/MHA/MasterMonitor.pm, ln396] Error happened on monitoring servers.
Fri Aug 26 18:28:16 2016 - [info] Got exit code 1 (Not master dead).
MySQL Replication Health is NOT OK!
同样的原因,解决:
#ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql
继续执行复制检查:
报错3:
提示在slave01上找不到repl复制账户
这个很明显,由于做主从的时候复制账户repl只在master上添加了,所以slave01和slave02上都没有repl账户,但是MHA要求复制账户要保持一致,所以要将3台数据库user表的数据进行统一,分别在slave01和slave02上添加repl账户
再次执行:
MySQL Replication Health is OK. 成功
七、绑定VIP
第一次启动manager,主库上的VIP 不会自动绑定,需要手功调用init_vip.sh 去绑定,主库发生故障切换会进行vip的漂移。
#bash init_vip.sh 进行vip的绑定
#ip a 查看
九、启动mha
masterha_manager --global_conf=/etc/masterha/masterha_default.conf --conf=/etc/masterha/app1.conf > /tmp/mha_manager.log < /dev/null 2>&1 &
检查启动是否成功:
ps aux|grep master
masterha_check_status --global_conf=/etc/masterha/masterha_default.conf --conf=/etc/masterha/app1.conf
看到主库是10.10.39.172 状态显示running
九、模拟故障切换,验证可用性
情况1:master挂掉,观察会不会将slave01备主切换成主库,slave02自动指向slave01备主进行同步复制,VIP10.10.3.117是否自动漂移到slave01备主上
情况2:如果将挂掉的master重新加入到slave01备主为主的集群进行复制
#cd /var/log/masterha/app1
#grep -i change app1.log
Wed Jan 18 11:50:43 2017 - [info] All other slaves should start replication from here. Statement should be:CHANGE MASTER TO MASTER_HOST='10.10.39.172', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000006', MASTER_LOG_POS=120, MASTER_USER='repl', MASTER_PASSWORD='xxx';
Wed Jan 18 11:50:44 2017 - [info] Executed CHANGE MASTER.
重新change即可加入集群
关闭MHA
masterha_stop --global_conf=/etc/masterha/masterha_default.conf --conf=/etc/masterha/app1.conf
命令放到脚本里面直接执行