MySQL具有开源免费,运维简单,性能好等优点,是在汽车之家使用最多的一种数据库。数据库作为应用的后端存储,承担着数据持久化存储的功能,是应用可以正常对外提供服务的关键组件,数据库的高可用非常重要。

相对于成熟的商业数据库软件,开源的 MySQL高可用需要使用者自己进行设计和研发,本文介绍汽车之家MySQL高可用架构发展历程,建设实践情况。

在介绍MySQL高可用前,先介绍下高可用定义及关键度量指标RPO,RTO。

高可用定义: 高可用(High Availability,缩写HA)是一个IT术语,指系统无中断执行其功能的能力,代表系统的可用性程度。

高可用度量指标:

故障是难免的,一个可靠的系统需要 数据冗余来避免单点故障带来的数据丢失,提升可靠性。

虽然MySQL有MySQL NDB Cluster, PXC(Percona XtraDB Cluster)等集群架构,但是MySQL主从架构因为结构简单且成本较低,是最使用广泛的MySQL架构。 MySQL主从架构通过主从复制技术来实现主库的数据冗余, 当主库故障可以把服务切换到从库,来避免数据库服务中断。

MySQL主从架构的高可用:

图3 MySQL主从架构

一个典型场景如图3,MySQL使用主从架构对外提供服务。图中主库Master有三个从库分别是slave1,slave2,slave3,若是主库故障,为了恢复DB服务,可以选择一个从库(slave1)成为新主库继续对外提供服务,原slave2,slave3改同步新主库的数据。

MySQL是一个 有数据有状态 的服务,通常主库写入数据,通过 异步复制 二进制日志到从库执行,来实现主从库的数据一致性。当故障发生时, 如何实现数据不丢失,各节点数据一致,业务影响小会有一定难度及挑战。

1)挑战1:如何实现主库突然故障,主库数据不丢失?

假想主库故障突然发生,从库还没有接收到主库的二进制日志,此时就有可能引起 数据丢失

2)挑战2:如何实现故障后新主从库架构的搭建及数据一致性保证?

多个从库对主库进行复制,有可能各从库对主库复制有不同的时延,各从库之间如何实现数据一致,各节点如何搭建成新的主从架构?

3)挑战3:如何实现故障自动Failover及业务影响最小?

若DB故障发生,如何让业务影响最小,甚至无感知,需要"自动故障转移"来支持。

MHA(Master High Availability) 是一种相对成熟的MySQL高可用解决方案。MHA是独立于MySQL的第三方软件,当主库故障发生后,MHA会尽最大努力来保证数据不丢失(若原主库可以登录,MHA会传输二进制日志到从库节点并执行),并且完成新主从架构的搭建。

图6 主从复制+MHA

MySQL Group Replication(简称MGR) 是MySQL5.7版本出现的新特性,提供高可用、高扩展、高可靠,强一致性的MySQL集群服务。MGR架构由若干个节点共同组成一个复制组,一个事务的提交,必须经过组内大多数节点(N / 2 + 1)决议并通过,才能得以提交,解决了传统复制可能的数据不一致的问题。

MGR+Proxy高可用架构:虽然MGR可以在主节点故障选举出新主,但应用层常不能自动修改配置中DB地址为新主IP。可使用MGR+Proxy来实现主节点故障时应用无感应自动切换到新的主节点。

图7 MGR复制+Proxy

2)主从复制+MHA时代: 2016年MHA在汽车之家核心业务开始使用,实现了核心业务的故障自动切换,但是此时并没有自动化高可用平台来管理数据库。

3)MGR+自动化平台时代: 2020年MGR高可用架构在汽车之家推广应用,MGR基于paxos协议的组复制技术保证各节点数据一致性,简化了主库故障切换工作。另外数据库自动化高可用平台上线,让汽车之家的MySQL高可用水平得到很大提升。

图8 汽车之家MySQL高可用发展历程

图10的高可用架构图,描述了经典环境下MySQL高可用实现。监控平台持续探测主库状态,若连续探测3次均发现主库故障,则调用运维平台的高可用模块API,发起主库切换,可以在2-3分钟内完成FailOver。

2)容器布署MySQL高可用

汽车之家有大量MySQL跑在k8S容器上,容器布署MySQL的高可用实现和物理机布署类似,主要区别是容器MySQL的主库故障监控由MySQL-Operator负责,而不是外部监控平台。

图11 容器布署MySQL高可用实现

容器MySQL-Operator每10秒探测一次MGR主库状态,若连续探测3次均为故障,将调用运维平台的高可用模块API,发起主库切换,通常可以在1-2分钟内完成FailOver。

本文介绍了常见的MySQL高可用架构,并重点介绍了汽车之家MySQL高可用体系发展历程,高可用建设实践情况。

汽车之家MySQL高可用使用 MGR复制架构+自动化运维平台 ,实现了物理机及容器MySQL主库故障的自动Failover。若MySQL主库down,可以在2-3分钟内完成主库的故障切换,数据库服务的稳定性得到了很好保障。

作者|​陶会祥

本文来自博客园,作者: 古道轻风 ,转载请注明原文链接: https://www.cnblogs.com/88223100/p/AutoHome-MySQL-High-Availability-Construction-Practice.html