超干货连载(二) RDS 5.7 三节点企业版如何在AliSQL的基础上集成X-Paxos一致性协议?

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 Tair(兼容Redis),内存型 2GB
简介: 本文介绍三节点企业版如何在AliSQL的基础上集成X-Paxos一致性协议,来实现高可用强一致的特性。

背景介绍

RDS 5.7三节点企业版是孵化于阿里巴巴集团内部的高可用、强一致,支持全球部署的数据库产品。该产品从2017年在阿里巴巴集团自有业务推广,平稳支持多年双十一。经过2年的内部打磨,该版本在2019年7月正式上线公有云售卖。相比RDS 5.6三节点版本,我们对内核进行的全新的设计,特别是一致性协议方面

三节点企业版的核心是一致性协议。在5.7的版本,我们把阿里巴巴自研的一致性协议库X-Paxos集成到AliSQL中,在100%兼容MySQL的基础上,实现了数据库的自动选主,日志同步,数据强一致,在线配置变更等功能。X-Paxos采用了unique proposer的Multi-Paxos实现方案,同时又做了很多创新性的功能和性能优化,是一个更具生产环境实用意义的一致性协议。

节点角色

熟悉Paxos论文的人都知道,整个Paxos算法中包含三种角色:Proposer、Accepter和Learner。在X-Paxos中,节点的角色分为四类:

节点角色.jpg

整个一致性协议的持久存储分两块:日志和状态机。日志代表了对状态机的更新操作,状态机存放了外部业务读写的实际数据。

Leader是集群中唯一可读写的节点。它给集群所有节点发送新写入的日志,达成多数派后允许提交,并回放到本地的状态机。众所周知,标准的Paxos存在活锁的问题(livelock),即两个Proposer交替发起Prepare请求,导致每一轮Prepare的Accept请求都失败,提案编号不断递增,陷入死循环永远达不成一致。因此业界的最佳实践是选取一个主Proposer,来保证算法的活性。另一方面,针对数据库场景,只允许主Proposer发起提案,简化了事务的冲突处理,保证了高性能。这个主Proposer被称之为Leader。

Follower是灾备节点,用于收集Leader发送的日志,并负责把达成多数派的日志回放到状态机。当Leader发生故障时,集群中的剩余节点会选一个新的Follower升级成Leader接受读写请求。

Logger是一种特殊类型的Follower,不对外提供服务。Logger做两件事:存储最新的日志用于Leader的多数派判定;选主阶段行使投票权。Logger不回放状态机,会定期清理老旧的日志,占用极少的计算和存储资源。因此,基于Leader/Follower/Logger的部署方式,三节点相比双节点高可用版,只额外增加很少的成本。

Learner没有投票权,不参加多数派的计算,仅从Leader同步已提交的日志,并回放到状态机。在实际使用中,我们把Learner作为只读副本,用于应用层的读写分离。此外,X-Paxos支持Learner和Follower之间的节点变更,基于这个功能可以实现故障节点的迁移和替换。

001.png

集群管理

三节点企业版支持丰富的集群变更和配置管理功能,列举如下:

  • Leader节点主动切换
  • 加减Learner节点
  • Follower降级成Learner、Learner升级为Follower
  • 修改节点的选举权重
  • 修改Learner节点的复制拓扑
  • 修改日志发包的配置模式(Pipelining、Batching、压缩、加密)
  • 高性能异步模式

日志

首先回顾MySQL双节点高可用版本的复制模式。其中Master节点负责写入binary log,并提交事务。Slave节点通过IO线程从Master节点发起dump协议拉取binary log,并存储到本地的relay log中。最后由Slave节点的SQL线程负责回放relay log。

双节点复制模式可以用下图表示:

002.png

一般情况下,Slave节点还需要开启log-slave-updates来保证从库也可以为下游提供日志同步,因此Slave线程除了relay log,还会有一份冗余的binary log。

三节点企业版创新性的整合了binary log和relay log,实现了统一的consensus log,节省了日志存储的成本。当某个节点是Leader的时候,consensus log扮演了binary log的角色;同理当某个节点被切换成Follower/Learner时,consensus log扮演了relay log的角色。X-Paxos一致性协议层接管consensus log的同步逻辑,同时提供对外的接口来实现日志写入和状态机回放。新的consensus log基于一致性协议和State Machine Replication理论,保证了多个节点之间的数据一致性。此外,三节点企业版日志的实现遵循了MySQL binary log的标准,可以无缝兼容aliyun DTS、Canal等业内常用的binlog增量订阅工具。

三节点复制模式如下图所示:

003.png

状态机

三节点企业版的状态机实现改造了MySQL原有事务提交的流程。

MySQL组提交(Group Commit)相关的技术文章网上有很多,原有Group Commit分为三个阶段:flush stage、sync stage、commit stage。对于Leader节点,三节点企业版修改了其中commit stage的实现方式。所有进入commit stage的事务会被统一推送到一个异步队列中,进入quorum决议的判定阶段,等待事务日志同步到多数节点上,满足quorum条件的事务才允许commit。另外,Leader上consensus log的本地写入和日志同步可以并行执行,保证了高性能。

对于Follower节点,SQL线程读取consensus log,开始等待Leader的通知。Leader会定期同步给Follower每一条日志的提交状态,达成多数派的日志会被分发给worker线程并行执行。

Learner节点相对Follower的逻辑更加简单,一致性协议保证了它不会接收到未提交的日志,SQL线程不用等待任何条件,只需分发最新的日志给worker线程即可。此外,三节点企业版使用特殊版本的Xtrabackup进行实例备份和恢复。我们基于X-Paxos的snapshot接口改进了Xtrabackup,支持创建带有一致性位点的物理备份快照,可以十分快捷的孵化一个全新的Learner节点,并加入到集群中提供读能力的扩展。

004.png

部署模式

同城三副本

同城三副本是公有云上默认的部署模式。比较传统的双机房主备高可用版,三节点在满足高可用强一致特性的基础上,基本不增加存储成本:

  • 三节点单机房不可用场景下数据0丢失,秒级切换,主备有丢数据的风险;
  • 三节点和主备都只存储两份状态机数据;三节点存储三份consensus log日志,而主备版本常态化有两份binary log和一份relay log,总量基本持平。

005.png

跨域五副本

对于跨域容灾场景,我们推荐跨域五副本的架构。相比简单的搭建跨域三副本,五副本有以下优势:

  • 和跨域三副本一样有Region级别的容灾能力,链路上仅有少量性能损耗;
  • 通过增加一个Follower和Logger节点,实现单机房故障下的同城容灾,对用户端友好;
  • 通过X-Paxos的选举权重功能,可实现定制化的region切换顺序。

006.png

总结

随着当前互联网的发展,云上客户对数据安全越来越重视,大量行业对数据存储有跨机房跨地域的需求。RDS 5.7三节点企业版是基于阿里巴巴内部自研技术的沉淀,针对数据质量要求较高的用户,在云上推出的数据库解决方案。此外,对于RDS 5.7高可用版的老用户,也支持一键升级三节点。

购买方式:
007.png

相关阅读:

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
22天前
|
人工智能 数据可视化 JavaScript
NodeTool:AI 工作流可视化构建器,通过拖放节点设计复杂的工作流,集成 OpenAI 等多个平台
NodeTool 是一个开源的 AI 工作流可视化构建器,通过拖放节点的方式设计复杂的工作流,无需编码即可快速原型设计和测试。它支持本地 GPU 运行 AI 模型,并与 Hugging Face、OpenAI 等平台集成,提供模型访问能力。
97 14
NodeTool:AI 工作流可视化构建器,通过拖放节点设计复杂的工作流,集成 OpenAI 等多个平台
|
2月前
|
SQL 开发框架 .NET
突破T-SQL限制:利用CLR集成扩展RDS SQL Server的功能边界
CLR集成为SQL Server提供了强大的扩展能力,突破了T-SQL的限制,极大地拓展了SQL 的应用场景,如:复杂字符串处理、高性能计算、图像处理、机器学习集成、自定义加密解密等,使开发人员能够利用 .NET Framework的丰富功能来处理复杂的数据库任务。
|
7月前
|
DataWorks Oracle 关系型数据库
DataWorks产品使用合集之手动添加上了,但是同步过来的数据这个字段依然显示为空,是什么原因
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
5月前
|
DataWorks 关系型数据库 MySQL
DataWorks产品使用合集之mysql节点如何插入数据
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
5月前
|
存储 C# 关系型数据库
“云端融合:WPF应用无缝对接Azure与AWS——从Blob存储到RDS数据库,全面解析跨平台云服务集成的最佳实践”
【8月更文挑战第31天】本文探讨了如何将Windows Presentation Foundation(WPF)应用与Microsoft Azure和Amazon Web Services(AWS)两大主流云平台无缝集成。通过具体示例代码展示了如何利用Azure Blob Storage存储非结构化数据、Azure Cosmos DB进行分布式数据库操作;同时介绍了如何借助Amazon S3实现大规模数据存储及通过Amazon RDS简化数据库管理。这不仅提升了WPF应用的可扩展性和可用性,还降低了基础设施成本。
103 0
|
6月前
|
JSON NoSQL MongoDB
面试题MySQL问题之想使用Neo4j查询可变数量的关系节点如何解决
面试题MySQL问题之想使用Neo4j查询可变数量的关系节点如何解决
63 1
|
6月前
|
存储 SQL 关系型数据库
实时计算 Flink版产品使用问题之要配置MySQL集群存储节点,该如何配置
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
6月前
|
负载均衡 关系型数据库 MySQL
MySQL PXC集群多个节点同时大量并发update同一行
如本文标题,MySQL PXC集群多个节点同时大量并发update同一行数据,会怎样? 为此,本人做了一个测试,来验证到底会怎样!
62 0
|
7月前
|
弹性计算 分布式计算 DataWorks
DataWorks产品使用合集之在脚本离线同步节点如何修改集成资源组
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
8月前
|
SQL NoSQL 关系型数据库
实时计算 Flink版产品使用合集之mysql服务器只有1个节点,怎么改mysqlserver-id
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。

相关产品

  • 云数据库 RDS MySQL 版
  • 下一篇
    开通oss服务