• 进入"运维那点事"后,希望您第一件事就是阅读“关于”栏目,仔细阅读“关于Ctrl+c问题”,不希望误会!

MySQL基于MHA高可用源码篇

MySQL 彭东稳 7年前 (2017-02-09) 22399次浏览 已收录 0个评论

一、MHA在Binlog模式下切换过程解析

MySQL基于MHA高可用源码篇

Phase 1: Configuration Check Phase

  • init_config():初始化配置
  • MHA::ServerManager::init_binlog_server:初始化binlog server
  • check_settings():检查相关配置

  • is_gtid_auto_pos_enabled():判断是否是GTID模式

Phase 2: Dead Master Shutdown Phase..

  • force_shutdown($dead_master)

Phase 3: Master Recovery Phase..

  • Phase 3.1: Getting Latest Slaves Phase..

  • Phase 3.2: Saving Dead Master’s Binlog Phase..

  • Phase 3.3: Determining New Master Phase..

  • Phase 3.3: New Master Diff Log Generation Phase..

  • Phase 3.4: Master Log Apply Phase..

Phase 4: Slaves Recovery Phase..

  • Phase 4.1: Starting Parallel Slave Diff Log Generation Phase..

  • Phase 4.2: Starting Parallel Slave Log Apply Phase..

Phase 5: New master cleanup phase..

整个过程核心切换逻辑简化后如下描述:

Phase 1:配置文件检查

Phase 2:非存活Master关闭服务

Phase 3:Master恢复

Phase 3.1:获取与Master延迟最小的Slave节点和延迟最大的Slave节点

Phase 3.2:生成Master与延迟最小的Slave节点的差异binlog并保存到manager节点

Phase 3.3:找出新的New Master,并且在延迟最小的Slave的Relay log中寻找延迟最小Slave与延迟最大Slave之间差异的binlog日志是否存在

Phase 3.3:如果New Master不是最新的Slave节点,那么需要从最新Slave的Relay log中生成它们之间的差异Relay log

Phase 3.4:New Master恢复差异Relay log和差异binlog日志,随后获取Master binlog位点信息

Phase 4:Slaves恢复

Phase 4.1:多线程生成延迟最小的Slave节点与其他一个或多个Slave差异Relay log

Phase 4.2:多线程恢复Slave节点与延迟最小的Slave之间的差异Relay log,并且恢复manager节点保存的差异binlog,然后change master到NEW MASTER节点

Phase 5:New Master清理Slave信息,并删除掉MHA配置文件中的选主信息防止误操作等

二、MHA在GTID模式下切换过程解析

MySQL基于MHA高可用源码篇

Phase 1: Configuration Check Phase

  • init_config(): 初始化配置。
  • MHA::ServerManager::init_binlog_server: 初始化binlog server。
  • check_settings()

  • is_gtid_auto_pos_enabled():判断是否是GTID模式。

Phase 2: Dead Master Shutdown Phase completed.

  • force_shutdown($dead_master):

Phase 3: Master Recovery Phase..

  • Phase 3.1: Getting Latest Slaves Phase..

  • Phase 3.2: Saving Dead Master’s Binlog Phase.. (GTID 模式下没有这一步)
  • Phase 3.3: Determining New Master Phase..

  • Phase 3.3: New Master Recovery Phase..

Phase 4: Slaves Recovery Phase..

  • Phase 4.1: Starting Slaves in parallel..

Phase 5: New master cleanup phase..

转载(有修改)

http://keithlan.github.io/2016/08/18/mha_source

https://github.com/yoshinorim/mha4mysql-manager/blob/master/lib/MHA/MasterFailover.pm


如果您觉得本站对你有帮助,那么可以支付宝扫码捐助以帮助本站更好地发展,在此谢过。
喜欢 (3)
[资助本站您就扫码 谢谢]
分享 (0)

您必须 登录 才能发表评论!