1 MHA (Master High Availability) Mysql 5.5

适用小规模集群


MHA Manager:
定时探测集群中的master结点,当master出现故障时,它可以⾃动将最新数据的slave提升为新的master,然后将
所有其他的slave重新指向新的master,将VIP漂移到新master结点,整个故障转移过程对应⽤程序完全透明

MHA Node:
运⾏在每台MySQL服务器上,主要作⽤是切换时处理⼆进制⽇志,确保切换尽量少丢数据
优点:
对现有架构侵⼊较⼩,只需要在机器上安装对应管理节点。
机器⽆硬件故障切主时会⾃动补齐binlog ,保证数据完整性。
缺点:
管理节点在每个节点都需要安装,同时会引⼊vip,管理维护会相对⿇烦。
依赖ssh ,不符合公司安全要求。
满⾜不了多机房的需求

2 MGR (MySQL Group Replication) Mysql 5.7


MGR 是 MySQL 官⽅推出的⾼可⽤与⾼扩展的解决⽅案。以插件的形式提供服务。
MGR 是 share-nothing 的复制⽅案,基于分布式paxos协议实现,每个实例都有独⽴的完整数据副本,集群⾃动 检查节点信息,做数据的同步。同时提供单主模式和多主模式,单主模式在主库宕机后能够⾃动选主,所 有写⼊都在主节点进⾏,多主模式⽀持多节点写⼊。同时集群提供冗余的容错功能,保证集群⼤多数节点正 常集群就可以正常提供服务。

优点:
⽀持多主写⼊,⽆延迟复制,能保证数据强⼀致性
⾃动检测故障和集群容错
缺点:
对现有架构侵⼊较⼤
只⽀持innodb储存引擎,同时每张表都必须有主键
⾄少三结点,⾄多九结点
多主模式下,不⽀持在不同实例对同⼀⾏数据进⾏操作
对⽹络要求⽐较⾼,官⽅建议同机房部署

3 NDB Cluster 8.0(面试被问过)

NDB cluster: 官⽅集群的部署⽅案,通过使⽤NDB存储引擎实时备份冗余数据,实现数据库的⾼可⽤性和数据⼀致性。
Manage 节点:负责整个Cluster 集群中各个节点的管理⼯作,包括集群的配置,启动,关闭各节点等。管理节点会获取
整个Cluster 环境中各节点的状态和错误信息,并且将各Cluster 集群中各个节点的信息反馈给整个集群中其他的所有节 点。
SQL 结点:主要负责实现⼀个数据库在存储层之上的所有事情,⽐如连接管理,query 优化和响应,cache 管理等等,只
有存储层的⼯作交给了NDB 数据节点去处理了。
Data 结点:⽤于保存数据、索引,控制事务。插⼊的数据按照主键的哈希值分散到不同的节点组⾥⾯保存(每个节点组
保存部分数据),另外每个节点组内,数据会复制到不同的数据节点上以实现冗余。

优点:
可以实现数据的强⼀致性
扩展性很好,增加节点即可实现数据库集群的扩展
缺点:
配置较复杂,需要使⽤NDB储存引擎,与MySQL常规引擎存在⼀定差异
多个节点通过⽹络实现通讯和数据同步、查询等操作,因此整体性受⽹络速度影响⽐较⼤

4 orchestrator + HaControl


Orchestrator:
Orchestrator 是⼀个开源的HA组件,负责 mysql 实例信息的实时进⾏采集。每3个 Orchestrator 结点组成⼀个
Orchestrator 集群,每个集群的每个 Orchestrator 结点通过 raft 协议进⾏数据通信和同步,Orchestrator 集群的⾼可⽤也是
通过raft实现。
HaControl :
HaControl 负责整个 HA 的切换逻辑,它周期性的检查 Orchestrator 的实例采集结果,如果发现实例超时没有采集则
进⾏相应的报警,DBA 接到报警后判断是否需要切换,然后发送对应的切换命令给 HAControl 进⾏切换处理。