MGR复制架构+自动化运维平台,汽车之家MySQL高可用建设实践

标签: | 发表时间:2022-12-28 09:10 | 作者:
出处:https://dbaplus.cn

作者介绍

陶会祥,2020年加入汽车之家,任职智能数据中心-云平台部,负责之家数据库的运维及RDS产品研发工作,致力于为公司提供安全,稳定,可靠的数据库服务。

 

前言

 

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

 

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

 

一、高可用定义及度量

 

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

 

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

 

高可用度量指标:

 

  • RPO:RPO(Recovery Point Obejective,恢复点目标)是指业务系统所允许的在灾难过程中的最大数据丢失量,用来衡量容灾系统的数据冗余备份能力。

 

图片

图1 RPO计算

 

  • RTO :RTO(Recovery Time Objective,恢复时间目标)是指信息系统从灾难状态恢复到可运行状态所需的时间,用来衡量容灾系统的业务恢复能力。

 

图片

图2 RTO计算

 

二、MySQL高可用问题

 

  1、问题定义

 

MySQL高可用问题:如果MySQL数据库发生宕机故障,是否可以实现数据库服务不中断或者故障快速恢复。 即实现数据不丟失(RPO)并且故障恢复时间短(RTO)?

 

  2、MySQL主从架构

 

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

 

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

 

MySQL主从架构的高可用:

 

图片

图3 MySQL主从架构

 

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

 

  3、高可用问题挑战

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

  4、高可用相关工作

 

一个真实线上可以使用的MySQL高可用架构需要考虑如下工作。

 

图片

图4 MySQL高可用相关工作

 

三、常见的MySQL高可用架构

 

本节介绍几种常见的MySQL高可用架构。

 

  1、主从复制+VIP

 

图片

图5 主从复制+VIP

 

  2、主从复制+MHA

 

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

 

图片

图6 主从复制+MHA

 

  3、MGR复制 + Proxy

 

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

 

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

 

图片

图7 MGR复制+Proxy

 

四、汽车之家MySQL高可用实践

 

  1、汽车之家MySQL高可用发展历程

 

汽车之家MySQL高可用发展可以分成三个阶段:

 

1)主从复制+VIP 时代:2016年前使用传统主从复制+VIP/DNS,主库故障通过VIP自动漂移,DBA手动调用脚本进行主从架构切换及域名切换。

 

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

 

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

 

图片

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

 

  2、汽车之家MySQL高可用运维平台

 

1)高可用运维平台架构

 

一个高可用系统需要解决两个问题:如何发现故障?故障发生后如何处理故障?具体到MySQL数据库的高可用,因为故障恢复细节和MySQL架构有较强关联,设计者需要重点考虑三个方面:

 

  • 故障发现:如何发生准确,快速的发现DB故障,不误报错报。

 

  • 高可用架构:如何选择合适的MySQL高可用架构来处理故障的数据一致性问题。

 

  • 故障自动化Failover:如何实现"自动故障转移"来保证DB服务的快速恢复?

 

图片

图9 MySQL高可用设计

 

汽车之家MySQL高可用实现架构图:

 

图片

图10 MySQL高可用实现架构图

 

汽车之家MySQL高可用由 MGR复制架构+监控平台+自动化运维平台三者来实现。

 

  • MGR高可用架构:MGR使用基于paxos协议的组复制,主库的事务在从库中会至少存在一份记录,从而保证故障时数据不会丢失。并且 MGR主库故障会自动选择新主库,进一步减化了主库故障切换工作。

 

  • 监控平台:基于Prometheus的监控平台对DB状态实时监控,若是发现主库故障将调用数据库运维平台相关API。

 

  • 自动化运维平台:运维平台中的高可用模块负责故障的自动Failover。高可用模块会确认DB状态,故障恢复时新DB集群搭建,修改原来主库域名后端DB IP等工作,最终实现了主库故障对应用影响的尽量透明。

 

图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。

 

  3、未来规划

 

汽车之家MySQL高可用建设,未来计划做如下工作:

 

1)网络抖动或大事务有时会引起MySQL集群的主从库自动切换,计划进一步调优改进。

 

2)数据库故障智能自愈是一个较热的方向,计划研究并应用实践提升数据库的稳定性。

 

五、结语

 

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

 

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

 

相关 [mgr 复制 架构] 推荐:

MGR复制架构+自动化运维平台,汽车之家MySQL高可用建设实践

- -
陶会祥,2020年加入汽车之家,任职智能数据中心-云平台部,负责之家数据库的运维及RDS产品研发工作,致力于为公司提供安全,稳定,可靠的数据库服务. MySQL具有开源免费,运维简单,性能好等优点,是在汽车之家使用最多的一种数据库. 数据库作为应用的后端存储,承担着数据持久化存储的功能,是应用可以正常对外提供服务的关键组件,数据库的高可用非常重要.

架构

- - IT瘾-dev
网关:Nginx、Kong、Zuul. 缓存:Redis、MemCached、OsCache、EhCache. 搜索:ElasticSearch、Solr. 熔断:Hystrix、resilience4j. 负载均衡:DNS、F5、LVS、Nginx、OpenResty、HAproxy. 注册中心:Eureka、Zookeeper、Redis、Etcd、Consul.

mysql主从复制

- - SQL - 编程语言 - ITeye博客
从库的配置,mysql5.5不支持配置文件的配置了,问了数据库的人,用命令行指定. 修改从库的配置 #default-storage-engine = InnoDB #修改 default-storage-engine = blackhole server-id = 11215004 #新增 replicate-do-db = test log-bin = mysql-bin #新增 binlog_format = row.

nginx 流量复制

- - 开源软件 - ITeye博客
# 后端的Web服务器可以通过X-Forwarded-For获取用户真实IP. #设置 $url ==原url. #新接口地址改变的,需要转换url. #新接口地址改变的,需要转换url. 已有 0 人发表留言,猛击->> 这里<<-参与讨论. —软件人才免语言低担保 赴美带薪读研.

信息架构

- Michael - Tony-懒得设计
写几篇关于信息架构的文章,系统地输出我理解的信息架构. 发了一篇关于招信息架构实习生的博客,收到不少简历. 但谈起信息架构,多数不了解,稍微了解的扯了很多很偏的东西. 随手搜索了一下,我发现了原因:. 1 《web信息架构》这本书太概念,太学术. 2 有人绑架了“信息架构”这个词,拿出去唬人,内容都是皮毛或者是根本和信息架构不沾边的东西.

CSS架构

- - 博客 - 伯乐在线
英文原文: CSS Architecture,编译: CSDN-张红月. Philip Walton 在AppFolio担任前端工程师,他在Santa Barbara on Rails的聚会上提出了CSS架构和一些最佳实践,并且在工作中一直沿用. 擅长CSS的Web开发人员不仅可以从视觉上复制实物原型,还可以用代码进行完美的呈现.

Linux的架构

- - 博客园_首页
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明. 我们以下图为基础,说明Linux的架构(architecture). (该图参考《 Advanced Programming in Unix Environment》). 最内层是我们的硬件,最外层是我们常用的各种应用,比如说使用firefox浏览器,打开evolution查看邮件,运行一个计算流体模型等等.

LMAX架构(转)

- - 企业架构 - ITeye博客
LMAX是一种新型零售金融交易平台,它能够以很低的延迟(latency)产生大量交易(吞吐量). 这个系统是建立在JVM平台上,核心是一个业务逻辑处理器,它能够在一个线程里每秒处理6百万订单. 业务逻辑处理器完全是运行在内存中(in-memory),使用事件源驱动方式(event sourcing).

软件架构

- - 研发管理 - ITeye博客
    对于外包业务类型的项目,软件架构设计的目的与产品类型的项目有所不同,在这里主要讨论外包类型项目的软件架构设计目的.     1、为大规模开发提供基础和规范,并提供可重用的资产,软件系统的大规模开发,必须要有一定的基础和遵循一定的规范,这既是软件工程本身的要求,也是客户的要求. 架构设计的过程中可以将一些公共部分抽象提取出来,形成公共类和工具类,以达到重用的目的.