阿里云RDS for MySQL 5.7企业三节点上线技术解读

本文涉及的产品
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用版 2核4GB 50GB
简介: 阿里云RDS for MySQL 5.7 企业三节点版本是基于AliSQL Cluster的技术打造的全新产品,在继承了AliSQL所有的特性之外提供了RPO为0的多副本强一致方案,本文剖析了企业三节点版本的基础架构以及背后的技术,让客户能够了解产品新特性背后的设计原理

阿里云RDS for MySQL 的企业三节点版本是阿里云推出的全新的MySQL系列云产品,是AliSQL的集群解决方案。 AliSQL是阿里巴巴集团的MySQL 分支, 除了继承了官方MySQL的所有特性之外,沉淀了大量在阿里巴巴内部业务以及云上几十万客户的需求,并经历了严酷的线上考验,在稳定性和易用性上都具有良好的保障。

MySQL 5.7 依然是目前MySQL 最为成熟和稳定的大版本,有着最为庞大的用户群体。 5.7 在性能、灵活性、功能上相比之前的版本都有较大程度的提升。 其中包括更高效的并行复制(基于组提交的logic clock 算法以及基于主键的write-set算法),大幅改进的优化器和成本模型、更好的SSL的支持、虚拟列、虚拟列索引、全新的JSON以及GIS等等

RDS企业三节点版是基于AliSQL的集群版本的全新云数据库产品,集群版本和普通版本最大的区别是采用了Paxos进行Binlog日志和数据状态机的协调,确保数据的一致性。是一个真正的跨可用区数据强一致的解决方案,RPO(最多可能丢失的数据的时长)为零。

架构

集群内所有节点的日志复制采用paxos库进行多数派决议,而非传统的MySQL I/O线程复制。完整的架构如下图所示:

image.png

一个默认规格的三节点集群会分别部署于三个不同的可用区(AZ)内,根据paxos算法集群会自动选举出一个leader提供对外的服务,一致性算法采用leader based的multi-paxos,
事务的提交、回滚以及节点的恢复全部交由Paxos来控制。任何一个时刻,某个节点想要成为主节点对外提供服务就必须要有多数派的节点同意,任何一个节点上想要提交一个事务也必须有多数派的节点认可并持久化事务的日志。因此三节点的技术可以从根本上杜绝因为网络分区导致的脑裂问题。

RDS 企业三节点目前只有在至少拥有三个可用区的地区售卖(包括杭州、上海、北京、深圳、新加坡),三个节点分别部署于三个AZ之内,因此任何一个节点、甚至是一整个AZ的故障(机房断电,机房网络故障)都不会影响到整个对外的可用性和数据的一致性。 因为剩余的两个节点至少有一个节点保有最新的事务日志,并且它们仍然可以达成集群的多数派决议,保证对用户的服务正常。

网络传输优化

利用Paxos来进行日志传递有一个更大的优点是能够充分利用主机网络的带宽, 相比传统的MySQL I/O复制线程发送binlog的机制,Master 是一个一个Event进行发送, 而传统的半同步插件的ack线程爷只有一个Paxos传输模块中我们使用了多线程发送、异步乱序、批量化、流水线化、传输压缩、多线程ack等优化机制, 在跨AZ的网络中能够达到更大的网络吞吐。

image.png

除此之外,Paxos的传输模块还做到了自动探测网络环境,根据负载和带宽大小,自动在大batch、流水线乱序、以及压缩非压缩之间进行动态的选择, 确保能够自适应不同的网络环境和负载。

集群自运维能力

三节点企业版是一个高效的自运维系统,不再需要任何外部来建立复制关系,复制位点。Fail over 集群内部自动完成,因此相比主备来说更加的高效。 每个集群目前都会有主节点会定期向集群中的其他两个节点发送心跳来续租, 目前这个租约期为10s, 如果10s的时间里有非Leader节点一直没有收到当前Leader的心跳,那么就会开始发起投票, 如果有多数派的节点同意(三节点中除自己之外其他任何一个节点同意),则新的Leader上任,完成切换。 这种做法能够覆盖节点宕机以及网络异常的情况。 然而还有一种情况是主机存储设备故障、可能是IO无法进行或者特别缓慢,对业务是存在影响的,但是会给传统的HA带来困扰。 三节点企业版增加了存储自检的机制,增加了一个对于存储异常的Monitor检测,检测线程会定期探测日志和数据所在的位置的IO能力以及IO队列的长度,综合判断后决定是否立即将leader的角色转让给其他的节点, 确保单盘的IO异常或者故障不会影响集群整体的可用性。

Paxos 日志的优化实现

RDS企业三节点利用了5.7 multi-channel replication的机制,利用了一个特殊的channel来作为paxos复制使用,这样使得企业三节点同时可以支持paxos集群复制也同时支持常规的主备复制。 我们对paxos channel的日志进行了定制改造, 使得Paxos协议能够在binlog的框架下运转起来。
三节点的事务提交流程如下图所示:
image.png

其中第二阶段Leader 节点在本地写binlog 的同时就会向集群中的另外两个节点发送日志,其他的两个节点收到日志后直接作为binlog落盘,传统的复制下, Slave收到Master的日志后先写一份relay log, 然后SQL线程读取分发后执行更改并在提交时再生成一份BINLOG。Paxos channel 没有意义上的relay log 直接就使用了binlog本身, 这样以来最大的好处就是所有的事务日志只需要落盘一次,并且从节点回放事务日志时不需要做一个内部二阶段提交,可以提高回放的效率。第三阶段Leader在本地Binlog落盘以后,只要收到任何一个集群中的节点的回包ACK就能够成功提交事务。

异步化事务提交

RDS企业三节点在引入线程池后,可以利用有限的线程来处理大量的用户请求, 然后为了达成数据的强一致,执行线程必须等待事务日志的多数派达成,因此如果在节点间网络rtt比较明显时如果大量线程都在等待其他节点回包会导致CPU的大量浪费从而影响吞吐,三节点企业版改变了单一线程处理用户事务的模式,为每个事务增加了多个异步等待队列,单个事务不再由单个线程来完成所有的工作, 而是分别交由不同的线程来完成, 用少量的线程处理网络回包,从而把大量的CPU用于处理用户请求,在用户的大压力下可以获得非常显著的吞吐能力提升。

只读节点的数据一致性

传统的主备下只读节点是一个不开启semi sync的从节点,在主节点failover的情况下只读节点是有一定的概率会多出一部分旧主上未同步到从库的binlog日志,因此容易导致只读节点和新的主节点的数据不一致, 才遇到这种情况后或者是通过flashback(如果不一致的是DDL事务则非常难处理)或者是重建节点。 在企业三节点中我们对日志发送端做了优化, 主节点会在确认多数派节点持久化后的事务日志才会传输到只读节点。 只读节点会增加一个网络RTT的延时(跨AZ部署的集群一般在1ms左右)但是只读节点只会接收到不会回滚的事务的日志,这样无论如何HA,只读节点都不会遇到数据不一致的情况。

企业级特性

除此之外RDS for mysql 5.7 三节点企业版相比社区版本增加了企业应用特性,比如相比Percona更好用的连接池,SQL限流、动态执行计划绑定、主键查询优化、更丰富的慢查询信息、功能更强大的KV访问方式、性能更强大的GIS查询,更有针对性的秒杀场景优化。 特别要提的是秒杀场景的优化, 三节点企业版提供了热点更新合并的能力, 可以在数据库内部将会批量搜集对于同一行的热点更新事务, 并且对更新操作在存储引擎层进行动态合并,从而实现上吞吐量级的提升,可达数万次每秒的热点行更新处理能力, 这是在阿里集团内部使用非常广泛的技术,也是近几年双十一、新春红包等场景背后最重要的技术支撑能力。

总结

RDS三节点企业版是在阿里巴巴场景下经过充分的验证之后推出的升级版RDS for mysql服务, 也是阿里云第一次把AliSQL Cluster集群版方案推出服务云上客户。适合对数据一致性和服务连续性要求高的客户使用。其额外提供的企业特性能够满足不同场景下的业务需求。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
5天前
|
Cloud Native 关系型数据库 MySQL
《阿里云产品四月刊》—云原生数据仓库 AnalyticDB MySQL 版 新功能
阿里云瑶池数据库云原生化和一体化产品能力升级,多款产品更新迭代
|
6天前
|
运维 Kubernetes Devops
阿里云云效操作报错合集之Message: code: 403, 当前代码组下无法创建可见性为企业可见的代码库,该如何处理
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
5天前
|
关系型数据库 MySQL 测试技术
《阿里云产品四月刊》—瑶池数据库微课堂|RDS MySQL 经济版 vs 自建 MySQL 性能压测与性价比分析
阿里云瑶池数据库云原生化和一体化产品能力升级,多款产品更新迭代
|
6天前
|
敏捷开发 Kubernetes 网络安全
阿里云云效产品使用问题之代码从一个账号迁移到另一个账号(从一个企业迁移到另一个企业),该如何迁移
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
8天前
|
安全 关系型数据库 MySQL
本地项目无法连接阿里云服务器MYSQL---轻量应用服务器篇
本地项目无法连接阿里云服务器MYSQL---轻量应用服务器篇
15 0
|
6天前
|
存储 关系型数据库 MySQL
|
6天前
|
存储 SQL 关系型数据库
|
1天前
|
XML Java 关系型数据库
Action:Consider the following: If you want an embedde ,springBoot配置数据库,补全springBoot的xml和mysql配置信息就好了
Action:Consider the following: If you want an embedde ,springBoot配置数据库,补全springBoot的xml和mysql配置信息就好了
|
1天前
|
关系型数据库 MySQL 数据库
关系型数据库mysql数据增量恢复
【7月更文挑战第3天】
10 2
|
1天前
|
关系型数据库 MySQL Shell
关系型数据库mysql数据完全恢复
【7月更文挑战第3天】
9 2