MHA+lvs+keepalived线上生产环境

时间:2022-05-18 03:18:19
环境:
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

MHA+lvs+keepalived线上生产环境

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

上传至服务器:

MHA+lvs+keepalived线上生产环境

#chmod +x master_ip_failover

#chmod +x master_ip_online_change

(脚本配置见文件)

 注:no-master=1表示没权限成为主

candidate_master=1表示有权限成为主

master_ip_failover VIP自行替换

MHA+lvs+keepalived线上生产环境


master_ip_online_change

MHA+lvs+keepalived线上生产环境


四、验证SSH互信是否成功

#masterha_check_ssh --global_conf=/etc/masterha/masterha_default.conf --conf=/etc/masterha/app1.conf 

MHA+lvs+keepalived线上生产环境


五、在要配置主从的数据库上安装mysql(安装过程不做描述),环境安装的是5.6.35

配置成一主两从的架构

这边主从复制账户是repl    mysql连接账户是wangxin

MHA+lvs+keepalived线上生产环境

六、检查主从复制

#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是二进制安装的,环境变量全部配置完成,并且确认在masterslavemysqlbinlog都是可以执行的,问题原因是没有读取到/etc/profile

所以将软连接直接做到系统目录(3mysql上都要执行)

#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

MHA+lvs+keepalived线上生产环境

提示在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的漂移。

MHA+lvs+keepalived线上生产环境

#bash init_vip.sh 进行vip的绑定

#ip a 查看

MHA+lvs+keepalived线上生产环境

九、启动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

MHA+lvs+keepalived线上生产环境

masterha_check_status --global_conf=/etc/masterha/masterha_default.conf --conf=/etc/masterha/app1.conf 

MHA+lvs+keepalived线上生产环境

看到主库是10.10.39.172 状态显示running


九、模拟故障切换,验证可用性

情况1master挂掉,观察会不会将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

 

命令放到脚本里面直接执行