超干货连载(一)RDS for MySQL 三节点企业版 Learner 只读实例解析

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介: 本文介绍三节点企业版只读实例的相关功能和技术实现。

背景介绍

读写分离是数据库常见的使用模式。类似MySQL proxy这样的中间件把写入和更新流量发送到主节点,把查询流量转发到只读节点,可以释放主节点的CPU和IO资源,提升数据库整体的可用性。
在《RDS三节点企业版 · 一致性协议》文章中,我们介绍了三节点企业版借助X-Paxos的Learner角色,实现了只读实例的功能。

Learner特性

三节点企业版通过新加Learner的方式实现只读实例的功能。Learner从Leader接收已经提交的日志存储到consensus log中,由Slave线程读取并分发给worker线程,最终并行回放到状态机。对于外部客户端来说,Learner节点是只读状态的。

实际上用过MySQL云产品的人,对只读节点的概念并不陌生。在双节点高可用版本中,初始状态会生产两个实例。一个作为Master,是提供读写的主节点。
另一个作为Slave,是处于read only状态的备节点,不过该节点不暴露给客户,也不对外提供读服务。如果需要增加只读实例支持读写分离,控制台后台会通过备份新建一个Slave节点,挂载在Master上。当该节点追平Master最新的数据后,即Second_Behind_Master追到0,对外开启读服务。部署模式如下:

RDS 01.png

三节点企业版的只读节点十分类似,首先通过备份创建一个新的Learner节点,并挂载在Leader上,挂载后Learner开始接收增量的consensus log并开始回放。当Learner节点的日志回放追平后,对外开启读服务。部署模式如下:

02.png

相比高可用版本的只读节点,Learner的优势在于接入到X-Paxos的体系中,保证了主节点(Leader/Master)和灾备节点(Follower/Slave)无论如何容灾切换,Learner都会保持和三节点集群一致的数据。

考虑这样一个场景:双节点高可用场景下,主库把x=1更新成x=2,同步给了只读节点但还未同步给备库,之后主库故障。备库会切换成新的主库,只读节点也会指向这个备实例。这个时刻新主库和只读节点的数据就出现了不一致,新主库x=1,只读节点x=2。如果此时业务或DBA检测到数据库的不一致问题,执行数据回补,在新的备库重新执行把x=1更新成x=2。当这个事务binary log同步到只读节点,就会造成只读节点的SQL线程报错退出,需要人工介入处理。假设这个回补的数据量很大,在人工运维上就完全没有可操作性了,只能基于新主库的备份重搭只读节点,导致只读节点一段时间的不可用。在三节点企业版中,就完全不会发生这样的问题。

Learner的孵化

三节点企业版使用特殊版本的Xtrabackup进行实例备份和恢复。我们基于X-Paxos的snapshot接口改进了Xtrabackup,支持创建带有一致性位点的物理备份快照,可以十分快捷的孵化一个全新的Learner节点,并加入到集群中提供读能力的扩展。在即将推出的RDS 8.0三节点版本中,我们还会整合官方8.0新出的Clone Plugin功能,推出基于Clone Plugin的一致性位点快照,Learner节点孵化功能运维会更简单,速度也会更快。

Clone Plugin相关资料可以参考:

自定义数据源

三节点企业版的只读节点借助X-Paxos的LearnerSource功能,通过自定义数据源,轻松实现了灵活的复制拓扑。三节点的复制拓扑配置都是通过Leader上的Membership Change相关管控SQL命令完成的。通过中心化配置管理,保证集群维度一致。自定义数据源的好处是当只读节点数量较多时,可以分流Leader日志发送的压力,打散网络传输的数据量,减小日志同步的延迟。

三节点企业版的自定义数据源还支持基于region的load balance和LearnerSource的自动容灾。具体来说,支持通过load balance功能一键将每个region的只读节点自动挂载到同region的Follower/Learner节点上。如果同region数据源出现故障,能够将数据源短暂退化到Leader节点直到恢复。该拓扑保证了各自region的只读节点从同region的节点同步数据,通过这样的级联部署,极大地减少了跨region的网络带宽占用,避免了带宽瓶颈造成的跨region延迟。

以下是阿里巴巴集团内部的一个部署样例:

03.png

当然传统的MySQL也可以构造一系列Master-Slave-Slave这样的拓扑,逐个实例通过change master配置复制关系,不过这种方式容错性差,管理成本和运维成本都很高。同时随着只读节点数量的规模上升,主备容灾后,数据不一致的风险会被放大。

会话读一致性

只读节点接收日志并回放,接受外部查询请求,这里存在一个问题,Learner的日志同步和回放是异步的,虽然大部分场景延迟在5s以内,也不能保证每次查询的数据一定是最新的。特别是主库执行了大表DDL或者大事务,会造成只读节点出现明显的延迟。为了解决这个问题,三节点企业版引入了MaxScale作为读写分离的代理,并在MaxScale中实现了会话读一致性,即在同一个Session内部,保证后续的读取可以读到之前同Session写入的数据,但不保证可以读到其他Session最新版本的数据。

05.png

X-Paxos的每一条日志都有一个LogIndex,对应Multi-Paxos概念中的Instance number。同时,只读节点在多线程乱序回放日志到状态机的过程中,会维护日志并发回放的窗口,通过该窗口可以计算出一个已回放的Logindex的低水位线(Lwm AppliedIndex)。

在Lwm AppliedIndex之前的所有日志,都已经回放到状态机,之后的日志,依然存在空洞。三节点企业版读写分离层的代理,会跟踪缓存各个只读节点的Lwm AppliedIndex,同时每个Leader的更新,都会记录当前事务的Logindex。当有新请求到来时代理层会比较Session最新的Logindex和当前各个只读节点的Lwm AppliedIndex,仅将请求发往Lwm AppliedIndex >= Session Logindex的节点,从而保证了会话一致性。在读多写少的场景下,该机制可以起到非常好的读写分离效果。

总结

通过X-Paxos的Learner角色,支持创建只读实例,实现读取能力的弹性扩展,分担主数据库压力。利用只读实例满足大量的数据库读取需求,增加应用的吞吐量。目前阿里云官网已经开放了RDS 5.7三节点企业版只读实例的创建和使用,欢迎试用。

相关阅读

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
6月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
2月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
|
2月前
|
关系型数据库 分布式数据库 数据库
阿里云数据库收费价格:MySQL、PostgreSQL、SQL Server和MariaDB引擎费用整理
阿里云数据库提供多种类型,包括关系型与NoSQL,主流如PolarDB、RDS MySQL/PostgreSQL、Redis等。价格低至21元/月起,支持按需付费与优惠套餐,适用于各类应用场景。
|
2月前
|
SQL 关系型数据库 MySQL
Mysql数据恢复—Mysql数据库delete删除后数据恢复案例
本地服务器,操作系统为windows server。服务器上部署mysql单实例,innodb引擎,独立表空间。未进行数据库备份,未开启binlog。 人为误操作使用Delete命令删除数据时未添加where子句,导致全表数据被删除。删除后未对该表进行任何操作。需要恢复误删除的数据。 在本案例中的mysql数据库未进行备份,也未开启binlog日志,无法直接还原数据库。
|
2月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎,提供高性价比、稳定安全的云数据库服务,适用于多种行业与业务场景。
|
7月前
|
负载均衡 算法 关系型数据库
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL集群架构负载均衡故障排除与解决方案
本文深入探讨 MySQL 集群架构负载均衡的常见故障及排除方法。涵盖请求分配不均、节点无法响应、负载均衡器故障等现象,介绍多种负载均衡算法及故障排除步骤,包括检查负载均衡器状态、调整算法、诊断修复节点故障等。还阐述了预防措施与确保系统稳定性的方法,如定期监控维护、备份恢复策略、团队协作与知识管理等。为确保 MySQL 数据库系统高可用性提供全面指导。
|
7月前
|
SQL 关系型数据库 MySQL
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL 数据库 SQL 语句调优方法详解(2-1)
本文深入介绍 MySQL 数据库 SQL 语句调优方法。涵盖分析查询执行计划,如使用 EXPLAIN 命令及理解关键指标;优化查询语句结构,包括避免子查询、减少函数使用、合理用索引列及避免 “OR”。还介绍了索引类型知识,如 B 树索引、哈希索引等。结合与 MySQL 数据库课程设计相关文章,强调 SQL 语句调优重要性。为提升数据库性能提供实用方法,适合数据库管理员和开发人员。
|
7月前
|
关系型数据库 MySQL 大数据
大数据新视界--大数据大厂之MySQL 数据库课程设计:MySQL 数据库 SQL 语句调优的进阶策略与实际案例(2-2)
本文延续前篇,深入探讨 MySQL 数据库 SQL 语句调优进阶策略。包括优化索引使用,介绍多种索引类型及避免索引失效等;调整数据库参数,如缓冲池、连接数和日志参数;还有分区表、垂直拆分等其他优化方法。通过实际案例分析展示调优效果。回顾与数据库课程设计相关文章,强调全面认识 MySQL 数据库重要性。为读者提供综合调优指导,确保数据库高效运行。
|
存储 SQL 关系型数据库
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
MySQL如何进行分库分表、数据迁移?从相关概念、使用场景、拆分方式、分表字段选择、数据一致性校验等角度阐述MySQL数据库的分库分表方案。
1702 15
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
954 2

相关产品

  • 云数据库 RDS MySQL 版
  • 推荐镜像

    更多