美团点评MySQL数据库高可用架构的演进

本文转自美团点评技术团队订阅号(id:meituantech),经平台同意授权转载

本文将介绍最近几年美团点评MySQL数据库高可用架构的演进过程,以及在开源技术基础上做的一些创新。同时,也和业界其它方案进行综合对比,了解业界在高可用方面的进展,和未来我们的一些规划和展望。

MMM

在年之前,美团点评(点评侧)长期使用MMM(Master-MasterreplicationmanagerforMySQL)做数据库高可用,积累了比较多的经验,也踩了不少坑,可以说MMM在公司数据库高速发展过程中起到了很大的作用。

MMM的架构如下。

如上所示,整个MySQL集群提供1个写VIP(VirtualIP)和N(N=1)个读VIP提供对外服务。每个MySQL节点均部署有一个Agent(mmm-agent),mmm-agent和mmm-manager保持通信状态,定期向mmm-manager上报当前MySQL节点的存活情况(这里称之为心跳)。当mmm-manager连续多次无法收到mmm-agent的心跳消息时,会进行切换操作。

mmm-manager分两种情况处理出现的异常:

出现异常的是从节点

mmm-manager会尝试摘掉该从节点的读VIP,并将该读VIP漂移到其它存活的节点上,通过这种方式实现从库的高可用。

出现异常的是主节点

如果当时节点还没完全挂,只是响应超时。则尝试将DeadMaster加上全局锁(flushtableswithreadlock)。

在从节点中选择一个候选主节点作为新的主节点,进行数据补齐。

数据补齐之后,摘掉DeadMaster的写VIP,并尝试加到新的主节点上。

将其它存活的节点进行数据补齐,并重新挂载在新的主节点上。

主库发生故障后,整个集群状态变化如下:

mmm-manager检测到master1发生了故障,对数据进行补齐之后,将写VIP漂移到了master上,应用写操作在新的节点上继续进行。

然而,MMM架构存在如下问题:

VIP的数量过多,管理困难(曾经有一个集群是1主6从,共计7个VIP)。某些情况下会导致集群大部分VIP同时丢失,很难分清节点上之前使用的是哪个VIP。

mmm-agent过度敏感,容易导致VIP丢失。同时mmm-agent自身由于没有高可用,一旦挂掉,会造成mmm-manager误判,误认为MySQL节点异常。

mmm-manager存在单点,一旦由于某些原因挂掉,整个集群就失去了高可用。

VIP需要使用ARP协议,跨网段、跨机房的高可用基本无法实现,保障能力有限。

同时,MMM是Google技术团队开发的一款比较老的高可用产品,在业内使用的并不多,社区也不活跃,Google很早就不再维护MMM的代码分支。我们在使用过程中发现大量Bug,部分Bug我们做了修改,并提交到开源社区,有兴趣的同学可以参考这里:







































北京哪些医院白癜风最权威
白癜风有那些特征



转载请注明:http://www.xcqg58.com/zytd/7467.html