之前的文章中介绍了 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 也安装到这台服务器
Mysql 主从复制的配置方式可以参考以前的一篇文章
在每台服务器上都执行以下命令
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