MHA故障转移流程:1、从出现故障的主节点A拉取binlog日志到B、C节点。2、识别有最近Relay_Master_Log_File,Exec_Master_Log_Pos 更新的slave节点。假设是B3、应用差异的中继日志(relay log)到其他slave节点。如C4、提升slave (B)为新的主节点。5、其他的节点(C)连接到新的主节点。
MHA 切换完了之后并没有其他的操作了。如服务发现,重新注册。但是MHA提供了脚本接口。可以手动指定切换完了MHA执行指定的脚本。如注册虚拟ip到新的主节点。或者调用接口注册新的服务域名。发告警邮件 等。
mha的架构如下:
MHA插件 Manager和Node的说明:
Manager 插件是管理节点,主要用于监控Mysql主从架构的正常状态。
有以下命令集:
masterha_check_status 检查 masterha_manager状态
masterha_check_ssh 检查ssh是否正常
masterha_check_repl 检查复制链是否正常
masterha_master_monitor
masterha_manager 启动mha管理进程(发现故障时切换)
masterha_conf_host
masterha_master_switch
masterha_stop
master_ip_failover
masterha_switch_domain
master_ip_online_change
masterha_secondary_check
Node 节点在每个mysql实例上存在,供Manager 健康检测,故障转移时调用。
有如下命令集:
apply_diff_relay_logs
filter_mysqlbinlog
purge_relay_logs
save_binary_logs
注意:Node节点如果是编译安装。会在/usr/local/bin 目录下存在以上命令。如果是直接用编译完的二进制包解压安装。必须把Node的4个命令 拷贝到 usr/local/bin目录下。否则找不到命令。
安装MHA:
【环境准备】
mha的安装可以到官网下载进行编译安装
(urlhttps://code.google.com/p/mysql-master-ha/ )
或者到已经云盘下载
(链接:https://pan.baidu.com/s/11fh_wolEYHg-VhaJDwYglA 密码:3zie)
以下按照云盘下载的包为准,介绍安装流程:
tar -xcf mha56.tar.gz -C usr/local
解压后目录:auth bin conf MHA rpm workdir
加压后rpm目录存在了mha所依赖的所有rpm包。也可以eperl 源yum安装。yum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes perl-IO-Socket-SSL perl-DBD-MySQL perl-Time-HiRes perl-File-Which perl-Digest-SHA1 perl-Crypt-SSLeay perl-libwww-perl perl-TermReadKey -y
MHA 目录存在了mha整套perl脚本,拷贝到对应目录即可:cp -rp MHA usr/local/share/perl5/chmod rp 444 usr/local/share/perl5/MHA
【开始安装】
1、配置文件
conf 目录存放配置文件的模板(这里只指定两个节点A>B。可以指定3个节点,或更多。)##定义每套cluster端口为[portnum]
## mkdir -p usr/local/mha56/workdir ; chown mha:mysql usr/local/mha56/workdir
[server default]
client_bindir=/usr/local/mysql/bin/
manager_workdir=/usr/local/mha56/workdir
remote_workdir=/usr/local/mha56/workdir
manager_log=/usr/local/mha56/workdir/portnum.log
master_binlog_dir=binary_log_dir
#手动切换脚本
master_ip_online_change_script= usr/local/mha56/bin/master_ip_online_change
report_script=/usr/local/mha56/bin/send_report
#自动切换时vip管理
#master_ip_failover_script=/usr/local/mha56/bin/master_ip_failover
init_conf_load_script=/usr/local/mha56/auth/mha_auth
user=mymha
#password=
repl_user=myrepl
#repl_password=
ssh_port=10000
ssh_user=mha
ssh_options="-i home/mha/.ssh/id_rsa_mha.key"
ping_interval=3
max_ping_errors=10
check_repl_filter=0
[server1]
hostname=master_server_ip
port=portnum
[server2]
candidate_master=1
check_repl_delay=0
hostname=slave_server_ip
port=portnum
mha 需要开通ssh。这里用指定公钥的形式拷贝公钥到每台mha manager 和node机器下。ssh_options="-i /home/mha/.ssh/id_rsa_mha.key" (5.3开始支持)。
2、添加账号
系统账号
为了安全,不用root账号做ssh。
假设这里mysqld进程运行用户是 mysql 所在group mysql
useradd -G mysql mha
添加完账号,把mha目录赋权给mha账号。
chown -R mha:mysql /usr/local/mha56
mysql账号
mha的监控与故障切换(最小可用权限)
GRANT RELOAD, SUPER, LOCK TABLES, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'mha'@'xxxx';
主从复制账号
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'mha'@'xxxx';
把这2个mysql账号存放在单独文件
init_conf_load_script=/usr/local/mha56/auth/mha_auth
chmod +x /usr/local/mha56/auth/mha_auth
3、环境监测
/usr/local/mha56/bin/masterha_check_repl conf=/usr/local/mha56/conf/mha.conf
最终输出:MySQL Replication Health is OK. 为正常。
4、测试手动切换(可不做)
masterha_master_switch --master_state=alive --conf=/usr/local/mha56/conf/mha.conf --orig_master_is_new_slave
5、启动mha管理进程
/usr/local/mha56/bin/masterha_manager --conf=/usr/local/mha56/conf/mha.conf --ignore_last_failover &
6、检查mha运行状况
/usr/local/mha56/bin/masterha_check_status --conf=/usr/local/mha56/conf/mha.conf
【故障转移】
事实上mha只负责监控master节点,在master节点出现故障时,把主节点转移到其中一个从节点,从成为新的的主节点。其余从节点接入到新的主节点。mha切换完毕后。应用连接到原来的master会出现错误的。这时需要把指向mysql主节点的连接转移到新的主节点。
可用以下几种方式:
1、用vip的方式。停止旧节点的vip,在新的主节点注册vip。(keepalived)。
2、使用域名,用consul 服务发现。把域名指向新的ip。