MHA架构:
MHA(Master High Availability)是一款开源的mysql高可用程序,MHA 搭建的前提是MySQL集群中已经搭建了MySql Replication环境,有了Master/Slave节点。作用是监测Master节点故障时会提升主从复制环境中拥有最新数据的Slave节点成为新的master节点。同时,在切换master期间,MHA会通过从其他的Slave节点来获取额外的信息来避免一致性的问题,整个的切换过程对于应用程序而言是完全透明的。MHA还提供了master节点在线切换功能,即按需切换master/slave节点。
MHA 服务的角色:
MHA Manager: 通常单独部署在一台独立机器上管理 master/slave 集群,每个master/slave 集群可以理解为一个application。
MHA Node: 运行在每台mysql 服务器(master/slave)上。它通过监控具备解析和清理logs功能来加快故障转移。
MHA 在自动切换的过程中会从宕掉的MySql master节点中保存二进制日志,以保证数据的完整性。但是如果master节点直接宕机了呢,或者网络直接不能联通了呢?MHA就没有办法获取master的二进制日志,也就没有办法保证数据的完整性了。这也就是为什么MHA应该与MySql主从复制结合起来。这样的话,只要有一个slave节点从master节点复制到了最新的日志,MHA就可以将最近的二进制日志应用到其他的slave节点上,这样就可以最大限度上保证数据的完整性。
MHA 自动切换的原理:
从宕机崩溃的master保存二进制日志事件(binlog events);
识别含有最新更新的slave;
应用差异的中继日志(relay log)到其他的slave;
应用从master保存的二进制日志事件(binlog events);
提升一个slave为新的master;
使其他的slave连接新的master进行复制;
MHA 工具组件:
Manager节点:
masterha_check_ssh:MHA依赖的环境监测工具;
masterha_check_ssh: MySql复制环境检测工具;
masterha_manager: MHA 服务主程序;
masterha_check_status: MHA运行状态探测工具;
masterha_master_monitor: MySql master节点可用性检测工具;
masterha_switch: master 节点切换工具;
masterha_conf_host: 添加或删除配置的节点;
masterha_stop: 关闭MHA服务的工具;
Node节点:
save_binary_logs:保存和复制master节点的二进制日志;
apply_diff_relay_logs: 识别差异的中继日志事件并应用于其他的slave;
purge_relay_logs:清除中集日志(不会阻塞SQL线程);