MySQL MHA 高可用
一、MHA架构结构
- Manager
masterha_manger 启动MHA
masterha_check_ssh 检查MHA的SSH配置状况
masterha_check_repl 检查MySQL复制状况
masterha_master_monitor 检测master是否宕机
masterha_check_status 检测当前MHA运行状态
masterha_master_switch 控制故障转移(自动或者手动)
masterha_conf_host 添加或删除配置的server信息
- Node
save_binary_logs 保存和复制master的二进制日志
apply_diff_relay_logs 识别差异的中继日志事件并将其差异的事件应用于其他的
purge_relay_logs 清除中继日志(不会阻塞SQL线程)
二、MHA Failover的过程
通过masterha_manager,启动MHA manager 节点程序
自动检查SSH 和repl: masterha_check_ssh ,masterha_check_repl
通过masterha_master_monitor,监控主库,每(ping_interval=2)时间间隔,探测一次心跳,一共给3次机会
主库宕机,触发选主和数据补偿
选主
- 权重: candidate_master=1,xxxx
- 日质量
- 配置文件顺序
数据补偿
- ssh能连:调用save_binary_logs ,立即保存确实的binlog 到各个从库/var/tmp目录下,补偿数据
- ssh不能连:调用apply_diff_relay_logs,计算从库差异并且补偿
- Manager ,处理完所有操作后,自动退出,自动把故障节点剔除配置文件
应用透明:VIP
- 准备好的脚本拷贝到/usr/local/bin/master_ip_failover
- 修改脚本内容
vim [root@db03 bin]# vim master_ip_failover my $vip = '10.0.0.55/24'; my $key = '1'; my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip"; my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down"; 转换格式 dos2unix master_ip_failover
- 修改配置文件 master_ip_failover_script=/usr/local/bin/master_ip_failover
vim /etc/mha/app1.cnf [server default] master_ip_failover_script=/usr/local/bin/master_ip_failover manager_log=/var/log/mha/app1/manager manager_workdir=/var/log/mha/app1 master_binlog_dir=/data/binlog
- 脚本添加执行权限
chmod + x /usr/local/bin/master_ip_failover
- 在主节点手工添加vip
/sbin/ifconfig eth0:1 10.0.0.55/24
- 重启mha
额外数据补偿:binlogserver[root@db03 bin]# masterha_stop --conf=/etc/mha/app1.cnf Stopped app1 successfully. [1]+ Exit 1 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 (wd: ~) [root@db03 bin]# 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 & [1] 21612
配置文件修改
vim /etc/mha/app1.cnf
[binlog1]
no_master=1
hostname=10.0.0.53
master_binlog_dir=/data/mysql/binlog
- 创建日志目录
mkdir -p /data/mysql/binlog
chown -R mysql.mysql /data/*
- 拉取主库binglog日志
cd /data/mysql/binlog -----》必须进入到自己创建好的目录
mysqlbinlog -R --host=10.0.0.51 --user=mha --password=mha --raw --stop-never mysql-bin.000001 &
注意:
拉取日志的起点,需要按照目前从库已经获取到的二进制日志点为起点
- 重启MHA
masterha_stop --conf=/etc/mha/app1.cnf
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 &
故障通知:send_report
- 解压
unzip email_2019-最新.zip
[root@db03 ~/email]# cp -a * /usr/local/bin/
- 脚本测试
[root@db03 ~/email]# cd /usr/local/bin/
[root@db03 /usr/local/bin]# chmod +x *
- 改配置文件
vi /etc/mha/app1.cnf
report_script=/usr/local/bin/send
- 重启生效
masterha_stop --conf=/etc/mha/app1.cnf
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 &
自愈:待开发
测试MHA(MHA+vip+binlogserver+send_report)高可用能力
1)停主库
看各种状态
修复MHA 架构
1)修复故障节点
2)修复主从
change master to
master_host='10.0.0.52',
master_user='repl',
master_password='123' ,
MASTER_AUTO_POSITION=1;
start slave;
3)修改配置文件
[server1]
hostname=10.0.0.51
port=3306
[server2]
hostname=10.0.0.52
port=3306
[server3]
hostname=10.0.0.53
port=3306
4)修复binlogserver
cd /data/mysql/binlog/
rm -rf *
mysqlbinlog -R --host=10.0.0.52 --user=mha --password=mha --raw --stop-never mysql-bin.000001 &
5)启动mha
[root@db03 /data/mysql/binlog]# masterha_check_repl --conf=/etc/mha/app1.cnf
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 &
[root@db03 /data/mysql/binlog]# masterha_check_status --conf=/etc/mha/app1.cnf
app1 (pid:5325) is running(0:PING_OK), master:10.0.0.52
mysqlbinlog -R --host=10.0.0.51 --user=mha --password=mha --raw --stop-never mysql-bin.000001 &
额外参数:
- ping_interval=1
#设置监控主库,发送ping包的时间间隔,尝试四次没有回应的时候自动进行failover
2. candidate_master=1
#设置为候选master,如果设置该参数以后,发生主从切换以后将会将此从库提升为主库,即使这个主库不是集群中事件最新的slave
KeepAlive
3. check_repl_delay=0
#默认情况下如果一个slave落后master 100M的relay logs的话,
MHA将不会选择该slave作为一个新的master,因为对于这个slave的恢复需要花费很长时间,通过设置check_repl_delay=0,MHA触发切换在选择一个新的master的时候将会忽略复制延时,这个参数对于设置了candidate_master=1的主机非常有用,因为这个候选主在切换的过程中一定是新的master
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 J.のblog!
评论