安装 mha 实现 MySQL 主库高可用

MHA是一位日本MySQL大牛用Perl写的一套MySQL故障切换方案,来保证数据库系统的高可用.在宕机的时间内(通常10—30秒内),完成故障切换,部署MHA,可避免主从一致性问题,节约购买新服务器的费用,不影响服务器性能,易安装,不改变现有部署。还支持在线切换,从当前运行master切换到一个新的master上面,只需要很短的时间(0.5-2秒内),此时仅仅阻塞写操作,并不影响读操作,便于主机硬件维护。在有高可用,数据一致性要求的系统上,MHA 提供了有用的功能,几乎无间断的满足维护需要。

测试环境

操作系统: CentOS 6.x 64位

主机名 IP
master 192.168.1.100
slave1 192.168.1.101
slave2 192.168.1.102
MHA manager 192.168.1.103

准备

作为前提条件,应先配置MySQL复制,并设置SSH公钥免密码登录。下面以CentOS为例来说明,最好先安装EPEL,不然YUM可能找不到某些软件包。

1
2
3
4
5
# ssh-keygen -t rsa  
# ssh-copy-id -i /root/.ssh/id_rsa.pub root@ 192.168.1.100
# ssh-copy-id -i /root/.ssh/id_rsa.pub root@ 192.168.1.101
# ssh-copy-id -i /root/.ssh/id_rsa.pub root@ 192.168.1.102
# ssh-copy-id -i /root/.ssh/id_rsa.pub root@ 192.168.1.103

添加管理账号

1
2
grant all privileges on *.* TO mha@'192.168.1.%' IDENTIFIED BY 'test';  
flush privileges;

下载 MHA 套件:

1
2
mha4mysql-node-0.56-0.el6.noarch.rpm
mha4mysql-manager-0.56-0.el6.noarch.rpm

https://code.google.com/p/mysql-master-ha/wiki/Downloads?tm=2

安装

安装Manager:

1
2
yum localinstall -y mha4mysql-node-0.56-0.el6.noarch.rpm
yum localinstall -y mha4mysql-manager-0.56-0.el6.noarch.rpm

安装Node:

1
2
yum localinstall -y mha4mysql-node-0.56-0.el6.noarch.rpm
yum localinstall -y mha4mysql-manager-0.56-0.el6.noarch.rpm

配置

全局配置文件 (/etc/masterha_default.cnf)

1
2
3
4
5
6
7
8
9
10
11
[server default]
user=root
password=rootpass
ssh_user=root
master_binlog_dir= /var/lib/mysql
remote_workdir=/data/log/masterha
secondary_check_script= masterha_secondary_check -s remote_host1 -s remote_host2
ping_interval=3
master_ip_failover_script=/script/masterha/master_ip_failover
shutdown_script= /script/masterha/power_manager
report_script= /script/masterha/send_master_failover_mail

Application configuration file should be written separately. The below example is configuraing app1 (host1-4) and app2 (host11-14).

应用配置文件 (/etc/app1.cnf)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[server default]
manager_workdir=/var/log/masterha/app1
manager_log=/var/log/masterha/app1/app1.log

[server1]
hostname=master

[server2]
hostname=slave1
candidate_master=1

[server3]
hostname=slave2
no_master=1

更多配置参考官方文档:

MHA配置文件
MHA支持的参数

检查

检查SSH公钥免密码登录:

masterha_check_ssh --conf=/etc/app1.cnf

检查MySQL复制:

masterha_check_repl --conf=/etc/app1.cnf

实战

首先启动 MHA 进程:

nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/mha/app1/manager.log 2>&1 &

注:视配置情况而定,可能会提示 read_onlyrelay_log_purge 等警告信息。

然后检查 MHA 状态:

masterha_check_status --conf=/etc/mha/app1.cnf

注:如果正常,会显示『PING_OK』,否则会显示『NOT_RUNNING』。

关闭监控:

masterha_stop --conf=/etc/mha/app1.cnf

管理端常用命令:

1
2
3
4
5
6
7
masterha_check_ssh       检查MHA的SSH配置状况  
masterha_check_repl 检查MySQL复制状况
masterha_manger 启动MHA
masterha_check_status 检测当前MHA运行状态
masterha_master_monitor 检测master是否宕机
masterha_master_switch 控制故障转移(自动或者手动)
masterha_conf_host 添加或删除配置的server信息

在线切换主从:

1
masterha_master_switch --conf=/etc/mha/app1.cnf --master_state=alive --new_master_host=192.168.10.101 --new_master_port=3306 --orig_master_is_new_slave --running_updates_limit=10000

内容基于:
火丁笔记
海底苍鹰(tank)博客