一、简介
MHA (Master High Availability) 目前是 MySQL 高可用相对成熟的解决方案之一,它由日本DeNA公司 youshimaton(现就职于Facebook公司)开发,是一套优秀的故障切换、主从提升的高可用软件。在 MySQL 故障切换过程中,MHA能做到0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能最大程度上保证数据库的一致性,以达到真正意义上的高可用。基于标准的MySQL复制(异步/半同步)。
MHA有两部分组成: MHA Manager (管理节点) 和 MHA Node (数据节点)。
MHA Manager 可以单独部署在一台独立机器上管理多个 master-slave 集群,也可以部署在一台 MySQL Slave 上,MHA Manager 探测集群的node节点,当发现 master 出现故障的时候,它可以自动将具有最新数据的slave提升为新的master,然后将所有其它的slave导向新的master上,整个故障转移过程对应用程序是透明的。
二、工作原理
架构原理图:
- 从宕机崩溃的Master上保存二进制日志事件(binlog event);
- 识别含有最新更新的Slave;
- 应用差异的中继日志(relay log)到其他Slave;
- 应用从Master保存的二进制日志事件;
- 提升一个Slave为新的Master;
- 使其他的Slave连接新的Master进行复制;
三、MHA软件包
MHA软件由两部分组成,Manager工具包和Node工具包,具体如下。
- Manager工具包:
- masterha_check_ssh:检查MHA的SSH配置情况。
- masterha_check_repl:检查MySQL复制状况。
- masterha_manager:启动MHA。
- masterha_check_status:检测当前MHA运行状态。
- masterha_master_monitor:检测Master是否宕机。
- masterha_master_switch:控制故障转移(自动或手动)。
- masterha_conf_host:添加或删除配置的server信息。
- Node工具包(通常由MHA Manager的脚本触发,无需人工操作):
- save_binary_logs:保存和复制Master的binlog日志。
- apply_diff_relay_logs:识别差异的中级日志时间并将其应用到其他Slave。
- filter_mysqlbinlog:去除不必要的ROOLBACK事件(已经废弃)
- purge_relay_logs:清除中继日志(不阻塞SQL线程)