之前的文章中介绍了 MHA 的功能和原理,MHA 主要是通过对 master 自动进行故障转移,来保证集群的高可用,下面就实际搭建一下 MHA 环境
目标
搭建完成 MHA 环境,然后模拟 master 故障,验证是否正确切换成了新的 master
搭建过程
例如有4台服务器
host1 作为 master
host2 和 host3 作为 slave
host4 作为 MHA 的管理节点
搭建好一主二从的复制结构
配置各个服务器间的 SSH 免登陆
在各个服务器中都安装 mha-node,在 host4 上安装 mha-manager,并编写 mha 配置文件
使用 MHA 提供的脚本对 SSH 免登陆的配置、集群的复制状态进行验证,看是否正确
如果验证通过,启动 manager
最后,测试一下,把 master 停掉,看是否自动选出了新的 master
因为资源有限,现在使用3台服务器进行搭建
192.168.31.204 作为 master
192.168.31.168 作为 slave1
192.168.31.101 作为 slave2,同时把 MHA manager 也安装到这台服务器
在每台服务器上都执行以下命令
ssh-keygen
(执行后会有多个输入提示,不用输入任何内容,全部直接回车即可)
ssh-copy-id -i /root/.ssh/id_rsa -p 22 root@192.168.31.204
ssh-copy-id -i /root/.ssh/id_rsa -p 22 root@192.168.31.168
ssh-copy-id -i /root/.ssh/id_rsa -p 22 root@192.168.31.101
在每台服务器上都执行以下命令
yum -y install perl-DBD-MySQL ncftp perl-DBI.x86
rpm -ivh mha4mysql-node-0.57-0.el7.noarch.rpm
在 slave2(192.168.31.101)上执行命令
yum install epel-release-7-5.noarch
yum install perl-DBD-MySQL
yum install perl-Config-Tiny
yum install perl-Log-Dispatch
yum install perl-Parallel-ForkManager
yum install -y rrdtool perl-rrdtool rrdtool-devel perl-Params-Validate
rpm -ivh mha4mysql-manager-0.57-0.el7.noarch.rpm
注意:这两步的安装方式为centos 系统,在其他系统中,需要自己调整安装方法
配置文件需要我们新建,位置可以自定义
vi /etc/mha/mha.cnf
[server default]
# 需要在 master 中创建这个用户
# mysql> grant ALL PRIVILEGES on *.* to mha@"%" Identified by "111111";
user=mha
password=111111
# 在各台服务器上创建目录 /home/mha
manager_workdir=/home/mha
# 日志位置
manager_log=/home/mha/manager.log
remote_workdir=/home/mha
ssh_user=root
# 配置主从复制时创建的复制用户
repl_user=repli
repl_password=111111
ping_interval=1
# 在 master 上查询日志目录
# mysql> show variables like 'log_bin_basename%';
# 取此变量值的目录,例如值为 /data/mysql/mysql-bin,需要的是 /data/mysql
master_binlog_dir=/data/mysql
[server1]
hostname=192.168.31.204
# 说明此服务器作为 master 候选服务器
candidate_master=1
[server2]
hostname=192.168.31.168
candidate_master=1
[server3]
hostname=192.168.31.101
# 此服务器不作为 master 候选服务器,因为 manager 在这台服务器上
no_master=1
masterha_check_ssh --conf=/etc/mha/mha.cnf
masterha_check_repl --conf=/etc/mha/mha.cnf
验证成功的话会自动识别出所有服务器和主从状况
在验证时,我遇到过这个错误:Can't exec "mysqlbinlog" ......
解决方法是在所有服务器上执行:
ln -s /usr/local/mysql/bin/mysqlbinlog /usr/local/bin/mysqlbinlog
ln -s /usr/local/mysql/bin/mysql /usr/local/bin/mysql
注意:蓝色位置,需要根据自己环境修改路径
启动
nohup masterha_manager --conf=/etc/mha/mha.cnf &
状态检查
masterha_check_status --conf=/etc/mha/mha.cnf
故障转移验证
验证的方式是先停掉 master,因为之前的配置文件中,把 slave1 作为了候选人,那么就到 slave2 上查看 master 的 IP 是否变为了 slave1 的 IP
在 master(192.168.31.204) 上把 mysql 停掉
上面的配置文件中指定了日志位置为 /home/mha/manager.log
cat /home/mha/manager.log
从日志信息中可以看到 master failover 已经成功了,并可以看出故障转移的大体流程
登陆 slave2(192.168.31.101) 的Mysql,查看 slave 状态
mysql> show slave status \G;
可以看到 master 的 IP 现在为 .168,初始状态时,master 为 .204,.168 是 slave1 的IP,说明 MHA 已经把 slave1 提升为了新的 master,IO线程和SQL线程也正确运行,MHA 搭建成功
MHA 安装包下载地址
https://72003f4c60f5cc941cd1c7d448fc3c99e0aebaa8.googledrive.com/host/0B1lu97m8-haWeHdGWXp0YVVUSlk/
MHA 资料
https://code.google.com/p/mysql-master-ha/wiki/TableOfContents?tm=6
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有