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(masterha_master_switch) 将故障节点剔除集群 将备选主进行身份切换,对外提供服务 其余从库和新主库确认新的主从关系 5. 应用透明(VIP) 6. 故障切换通知(send_reprt) 7. 二次数据补偿(binlog_server) 8. 自愈自治(待开发...)
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信息 masterha_stop 关闭MHA [root@db03 ~]# masterha_ masterha_check_repl masterha_conf_host masterha_master_switch masterha_check_ssh masterha_manager masterha_secondary_check masterha_check_status masterha_master_monitor masterha_stop
Node工具包
这些工具通常由MHA Manager的脚本触发,无需人为操作 save_binary_logs 保存和复制master的二进制日志 apply_diff_relay_logs 识别差异的中继日志事件并将其差异的事件应用于其他的 purge_relay_logs 清除中继日志(不会阻塞SQL线程)