【IT老齐016】MySQL高可用MHA架构方案

发布时间 2023-05-04 15:05:24作者: Faetbwac

【IT老齐016】MySQL高可用MHA架构方案

MHA是日本程序员yoshinorim开发的MySQL高可用方案
采用Perl语言开发
MHA是最成熟MySQL高可用方案

1683180426813

场景:主服务器挂了,从服务器不会切换到主服务器,从而引出高可用MHA方案 。

MHA故障发现与转移

故障发现

1683181407165

  • 启动:前置检查
  • 运行过程:认定需要进行故障转移
    1. manger每3秒向主节点发送select 1 的SQL语句,判断主节点是否执行。3次ping无反应,认定master异常
    2. 避免网络导致的无法ping通,manger让从属服务器MHA node尝试SSH登录检查,若所有node连接不上,从而认定,开始故障转移。

故障转移

1683181467449

1683181827242

1683181890897

1683181921493

1683182031388

1683182080006

  1. 切断外界链接(断开虚拟IP跟怀疑挂掉的主机链接),主从同步也断开
  2. manager使用SSH拉取备份服务器的binlog(复制保存到manager)
  3. 由于binlog跟从服务器的relaylog的数据可能存在不一致,从而进入转移,使得数据保持一致。
  4. 从属服务器之间进行比对,node会检查relaylog哪个是最新的,向其他节点发送差异数据并应用。
  5. 这时从属服务器的relaylog一致了,但和主服务器的binlog还可能不一致。这时将旧的master binlog差异的数据发送到从属服务器上并应用。
  6. 确认主服务器
    • manger指定主服务器
    • 比较节点的日志最新
    • 按注册实例列表向后选择(manger中对sql有记录)
  7. 确定谁是主后,从服务器通过changer master命令完成主从链接。
  8. 将原虚拟IP指向新的主服务器
  9. 当旧的主服务器恢复正常,作为从服务器和新的主服务器进行同步(MHA自动完成)

细节问题

1、binlog不完整
2、迁移丢包,数据不完整
3、旧主服务器跟binlog日志不一致

优缺点

优点

  • 由per语言开发的开源工具
  • 可以支持基于GTID的复制模式
  • 当主DB不可用时,从多个从服务器中选举出来新的主DB
  • 提供了主从切换和故障转移功能,在线故障转移时不易丢失数据
  • 同一个监控节点可以监控多个集群

缺点

  • 需要编写脚本或利用第三方工具来实现VIP的配置
  • MHA启动后只只监控主服务器是否可用,没办法监控从服务器
  • 需要基于SSH免认证登陆配置,存在一定的安全隐患
  • 没有提供从服务器的读负载均衡功能

拓展

  • manager挂了怎么办
    • manager是双机热备,不过manager始终只有一个提供服务,另一个备份节点只有当主manager挂了以后才会顶上