1. MHA能做什么?
主库宕机处理过程 1. 监控节点 (通过配置文件获取所有节点信息) 系统,网络,SSH连接性 主从状态,重点是主库 2. 选主 (1) 如果判断从库(position或者GTID),数据有差异,最接近于Master的slave,成为备选主 (2) 如果判断从库(position或者GTID),数据一致,按照配置文件顺序,选主. (3) 如果设定有权重(candidate_master=1),按照权重强制指定备选主. 1. 默认情况下如果一个slave落后master 100M的relay logs的话,即使有权重,也会失效. 2. 如果check_repl_delay=0的化,即使落后很多日志,也强制选择其为备选主 3. 数据补偿 (1) 当SSH能连接,从库对比主库GTID 或者position号,立即将二进制日志保存至各个从节点并且应用(save_binary_logs ) (2) 当SSH不能连接, 对比从库之间的relaylog的差异(apply_diff_relay_logs) 4. Failover 将备选主进行身份切换,对外提供服务 其余从库和新主库确认新的主从关系 5. 应用透明(VIP) 6. 故障切换通知(send_reprt) 7. 二次数据补偿(binlog_server) 8. 自愈自治(待开发...)
9. 故障提醒
1.1 MHA高可用本次配置的节点说明
1. mha要求数据库节点至少是1主2从的独立实例, 不支持单机多实例的场景
2. mha的管理节点, 最好是使用一台独立的机器, 本次把管理节点和其中一台从库放到的同一台机器上.
3. 本次配置使用的节点说明:
192.168.0.106的3320端口mysql作为主库;
192.168.0.105的3321端口mysql作为从库之一;
192.168.0.103的3322端口mysql作为从库之一,管理节点也在这台机器上;
4. mha提供有两个端, 一个是管理端(103机器上), 一个是node端(node端必须在所有节点上安装).
2. MHA软件的构成
mha由管理软件和node软件两部分组成, 说明如下:
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工具包主要包括以下几个工具:
这些工具通常由MHA Manager的脚本触发,无需人为操作
save_binary_logs 保存和复制master的二进制日志
apply_diff_relay_logs 识别差异的中继日志事件并将其差异的事件应用于其他的
purge_relay_logs 清除中继日志(不会阻塞SQL线程)
2.1 MHA的failover如何实现?
流程: 启动 - 故障 - 转移 - 业务恢复
1. mha通过masterha_manager脚本启动mha的功能.
2. 在manager启动之前, 会自从检查ssh互信(masterha_check_ssh)和主从状态(masterha_check_repl)
3. mha_manager通过masterha_master_monitor脚本来探测主库是否存活,探测频率受配置文件中的ping_interval的值来控制, 以秒为单位.
4. masterha_master_monitor探测主库3次无心跳则判定为主库宕机.
5. 进行选主的过程:
算法一:
读取配置文件中是否有强制选主的参数,参数如下
candidate_master=1 # 写在[servern]块中, 按照权重指定备选主. manager有默认检测数据差异的机制,如差异过大,即使配置次参数也不生效,而会通过其它算法选主
check_repl_delay=0 # 写在[servern]块中, 强制选为主, 即不论数据差异有多大.
算法二:
自动判断所有从库的日志量, 将最接近主库数据的从库作为主库.如果所有从库的日志量都一样则按照算法三选主.
算法三:
按照配置文件先后顺序进行选主
6. 数据补偿:
判断主库ssh的连通性.
情况一: ssh能连时,调用save_binary_logs脚本,立即保存缺失部分的binlog到各个从节点来恢复.
情况二: ssh不能连,调用apply_diff_relay_logs脚本,计算各从库relaylog的差异,只能把所有从库中数据最多的从库数据同步给所有从库.
6.1提供额外的数据补偿的能力
该功能需要单独配置,默认是没有的,
7. 解除从库身份
8. 剩余从库和新主库构建主从
9. 应用透明配置(vip,装有manager软件的节点)
该功能需要单独配置, 默认是没有的, 详见2.2中的配置说明
10.故障提醒(邮件提醒)
该功能需要单独配置, 默认是没有的, 详见2.3中的配置说明
66.
2.2 应用透明配置(vip, 装有manager软件的节点)
2.2.1修改master_ip_failover脚本, 该脚本度娘上多的是
vim /usr/local/bin/master_ip_failover # 脚本位置自定义即可;修改以下4行即可,虚拟机中是eth0,服务器不一定是 my $vip = '192.168.0.100/24'; # 要把哪个地址设为vip地址,是对外提供服务的网段地址.24位子网掩码 my $key = "1"; my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip"; my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down";
注意脚本内有中文需转换下,并给该脚本执行权限:
[root@db03 ~]# dos2unix /usr/local/bin/master_ip_failover
dos2unix: converting file /usr/local/bin/master_ip_failover to Unix format ...
[root@db03 ~]# chmod +x /usr/local/bin/master_ip_failover
2.2.2更改manager配置文件:
vi /etc/mha/app1.cnf 在server default块下添加: master_ip_failover_script=/usr/local/bin/master_ip_failover
2.2.3主库上手工生成第一个vip地址(106那台机器上)
手工在主库上绑定vip,注意一定要和配置文件中的ethN一致,我的是eth0:1(1是key指定的值) ifconfig eth0:1 192.168.0.100/24
如果报错eth0:1: ERROR while getting interface flags: No such device
则查看下机器的网卡信息,改成对应的就可以. 修改后master_ip_failover脚本中也需要修改.
2.2.4重启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 &
masterha_check_status --conf=/etc/mha/app1.cnf
命令的作用参考后面的安装mha部分.
2.3 配置邮件提醒:
2.3.1 需要send_report脚本, 上官网找或度娘, 一大片.
vim /usr/local/bin/send_report
my $smtp='smtp.126.com'; my $mail_from='[email protected]'; my $mail_user='[email protected]'; my $mail_pass='xxxx'; #my $mail_to=['[email protected]','[email protected]']; my $mail_to='[email protected]';
添加执行权限, chmod +x send_report
2.3.2 修改配置文件
vi /etc/mha/app1.cnf
在server default块下添加:
report_script=/usr/local/bin/send_report
2.3.3 重启并查看状态
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 & masterha_check_status --conf=/etc/mha/app1.cnf 命令的作用参考后面的安装mha部分.
未完待续..........