阿里云数据库开源重磅发布:PolarDB三节点高可用的功能特性和关键技术

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介: 在3月2日的阿里云开源 PolarDB 企业级架构发布会上,阿里云数据库技术专家孟勃荣带来了主题为《PolarDB 三节点高可用》的精彩演讲。三节点高可用功能主要为 PolarDB 提供金融级强一致性、高可靠性的跨机房复制能力,基于分布式共识算法同步数据库物理日志,自动failover,任意节点故障后数据零丢失。本议题主要介绍PolarDB三节点高可用的功能特性和关键技术。

在3月2日的阿里云开源 PolarDB 企业级架构发布会上,阿里云数据库技术专家孟勃荣
带来了主题为《PolarDB 三节点高可用》的精彩演讲。三节点高可用功能主要为 PolarDB 提供金融级强一致性、高可靠性的跨机房复制能力,基于分布式共识算法同步数据库物理日志,自动failover,任意节点故障后数据零丢失。本议题主要介绍PolarDB三节点高可用的功能特性和关键技术。

直播回顾视频:https://developer.aliyun.com/topic/PolarDB_release
PDF下载: https://developer.aliyun.com/topic/download?id=8346

以下根据发布会演讲视频内容整理:

PolarDB for PostgreSQL三节点高可用功能主要是将物理复制与一致性协议相结合,为PolarDB 提供金融级强一致性以及高可靠的跨机房复制能力。

c1.png

PG 原生的流复制支持异步/同步/Quorum三种同步方式。

同步复制的主要目标是保证数据不丢失,但它同时也会带来三个问题:

① 无法满足可用性的要求,备库出现故障或网络链路抖动的时候,会影响主库的可用性,这对生产环境是不可接受的。其次它不能完全保证数据不丢失,同步复制保证数据不丢失的方案是当备机没有完全持久化RW日志前,主库的事务不能提交。在某种极端情况下,比如主库已经写入了WAL日志,等待备库同步WAL日志的过程中主库发生了重启,那么在重启的过程中,日志回放的过程是不等待备库持久化的。所以回放完成后,有可能备库没有持久化,而日志在主库上回放完之后已经对外可见了。

② 不具备故障自动切换的能力。自动切换、可用性探测等能力都依赖于外部的组件。

③ 旧的主库在故障恢复之后,可能无法直接加入到集群。比如当事务在主库上的WAL日志已经持久化,而备库还未收到日志或者还未持久化。此时如果主库出现了故障,备库切换成主库后,旧的主库重新运行后,因为在重启之前有多余的 WAL 日志,所以无法直接从主库上拉取日志,必须依赖于其他工具对其一致性进行处理后才能加入到集群里。

异步复制相比于同步复制,性能比较好,可用性也更高,因为备机的故障或网络链路的抖动不会影响主库,但它最大的问题是丢数据。比如原来在主库上能看到的数据,发生切换之后在备库上不存在。其次,它也不具备自动故障切换和自动探测的能力,切换后的主库无法自动加入到集群里。

Quorum复制使用了多数派的方案之后,可能也能保证不丢数据,但它并没有涉及到当主机发生故障时如何选取新的主机;其次,每个节点的日志不一致时,如何确保日志的一致性;第三,集群发生变更的时候,如何保证集群状态最终的一致性。针对以上问题,Quorum复制没有提供完整的解决方案。所以本质上来说, PG 的 Quorum 复制并不是一个完整的、不丢数据的高可用方案。

c2.png

我们的方案是将阿里内部的一致性协议 X-Paxos 引入进来协调物理复制。X-Paxos 在阿里内部和阿里云的多个产品上已经稳定运行了很长时间,因此它的稳定性得以保障。它的的一致性协议的算法和其他的协议是类似的。

整个高可用方案是一个单点写入、多点可读的集群系统。 Leader 节点作为单点写入节点对外提供读写服务,产生了WAL日志后向其他节点同步。Follower 主要是接受来自于 Leader 节点的 WAL 日志,并进行回放,对外提供只读服务。

那么它的主要能力是包括以下三个方面:

保证集群内数据的强一致性,即 RPO=0。当多数派节点的WAL日志写入成功后,才认为此日志在集群层面已经提交成功。发生故障时,其他Follower 节点会自动与 Leader 节点对齐日志。

自动 failover 。在高可用集群中,只要半数以上的节点存活,就能保证集群正常对外提供服务。因此当少数 failover 故障或少数节点网络不通的时候,并不会影响集群的服务能力。

当 Leader 节点故障或与多数派节点网络不通的时候,会自动触发集群重新选主流程,由新主对外提供读写服务。另外 Follower 节点也会自动从新的 Leader 节点上同步WAL日志,并且自动与新的 Leader 日志对齐。此时如果Follower 上的日志比新 Leader 上多,则会自动从新 Leader 上对齐WAL日志。

在线集群变更可以支持在线增删节点、手动切换、角色变换,比如从 Leader 切到 follower角色。此外还能支持所有节点设置选举权重,选举权重高的节点会优先被选为主。同时,集群变更操作不影响业务的正常运行,此能力的实现由一致性协议来保证。最终集群内配置达成一致,不会因为集群配置过程中的异常情况导致状态不一致的问题。

c4.png

三节点高可用功能中增加了一个新的角色: Learner 节点。它没有多数派的决策权,但能够提供只读服务。
Learner 节点的日志同步状态与 Leader 无关,也不会影响 Leader ,它的主要作用有两点:

① 作为加节点的中间状态。比如新加的 Leader 节点延迟比较大,如果直接将其加入到多数派里,会影响多数派的提交。因此,先以 learner 的角色加入到集群来同步数据,当它的数据基本追上 Leader 之后,再升为 follower节点。

② 作为异地灾备节点。它不会影响主库的可用性,发生 Leader 切换之后,它能自动从新的账号同步日志,不需要外部的介入。

在集群部署方面,能够支持跨机房和跨域的部署,包括同机房三副本、同城三机房三副本,以及两地三机房五副本、三地三机房五副本等。另外跨域也可以利用 Learner 节点进行灾备,不会影响 Leader 节点的可用性。
此外,它兼容了 PG 原生的流复制和逻辑复制,能够保证下游的消费不受影响,保证下游不会出现未提交的数据。

从前文的介绍中可以看到,在 PolarDB 的高可用方案中,至少要存储三份数据,存储成本会有所增加。针对这个问题,我们提供了两个方面的解决方案:

c5.png

首先,提高资源的利用率。 Follower 节点可以作为只读节点来提供读服务,从而增加整个集群的读扩展能力;此外,支持跨节点的并行查询能力,可以充分利用各个基节点的资源。

c6.png

其次,引入了日志节点,减少资源的占用。日志节点本身不存储数据,它只存储实时的WAL 日志,仅作为日志持久化的多数派节点之一。此日志节点本身也具备完整的日志复制能力,可以兼容原生的流复制和逻辑复制,可以将其作为下游日志消费的源,从而减少 Leader 节点的日志传输压力。可以根据下游日志消费的需求,来定制日志节点的网络规格或者其他资源。

c7.png

一致性协议复制的基本原理主要包含三个方面:

① 通过原生的异步流复制来传输或同步WAL日志。
② 由一致性协议来推动集群的提交位点。
③ 针对自动 failover 的问题,根据一致性协议层面自身状态的变化,来驱动数据库层面的状态变化。比如心跳超时之后,可能会自动降级。

具体实现上,以 Consensus Log 为载体来推进提交位点。针对每一段WAL日志生成相应的 Consensus Log Entry ,里面记录了WAL日志的结束 LSN。 而后引入一个持久化依赖,保证每个 Log Entry持久化的时候,本节点上相应位点的WAL日志已经持久化成功。

引入上述两个机制后,如果一致性协议层面认为 Consensus Log 已经提交成功,则意味着 Consensus Log 已经在多数派上持久化成功,相应位点的WAL日志肯定也已经持久化成功。

以上图为例, Leader 上已经持久化了三段 WAL 日志,在 Follower 1 节点上,虽然 log entry 的 WAL 日志已经持久化成功,但它对应的 Consensus Log还未持久化成功,所以一致性协议就认为此 Consensus Log也没有持久化成功。Follower 2 上 Log Entry和Consensus Log 没有持久化,它的WAL日志只持续化了一段,它的 WAL 日志段也没有持久化成功。因此,根据一致性协议,当前 LogIndex 2 的日志在多数派节点上已经写入成功,当前 Consensus Log的 CommitIndex 就是 2 ,对应的那 Commit LSN 就是300。

c8.png

上图为tpmC 测试过程中 RTO 的情况。tpmC 达到 30 万左右的时候,进行kill 主库的操作。可以看到,不到 30 秒,新的主库已经恢复了写的能力,并且恢复到切换之前的水平。

(完)

资料分享:
PolarDB 的源码仓库地址:https://github.com/ApsaraDB/PolarDB-for-PostgreSQL

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
1月前
|
负载均衡 网络协议 数据库
选择适合自己的数据库多实例负载均衡技术
【10月更文挑战第23天】选择适合自己的数据库多实例负载均衡技术需要全面考虑多种因素。通过深入的分析和评估,结合自身的实际情况,能够做出明智的决策,为数据库系统的高效运行提供有力保障。
108 61
|
29天前
|
SQL Java 数据库连接
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率。本文介绍了连接池的工作原理、优势及实现方法,并提供了HikariCP的示例代码。
44 3
|
1月前
|
缓存 负载均衡 监控
数据库多实例的负载均衡技术深入
【10月更文挑战第23天】数据库多实例负载均衡技术是确保数据库系统高效运行的重要手段。通过合理选择负载均衡策略、实时监控实例状态、不断优化调整,能够实现资源的最优分配和系统性能的提升。在实际应用中,需要根据具体情况灵活运用各种负载均衡技术,并结合其他相关技术,以满足不断变化的业务需求。
|
29天前
|
Java 数据库连接 数据库
深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能
在Java应用开发中,数据库操作常成为性能瓶颈。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能。文章介绍了连接池的优势、选择和使用方法,以及优化配置的技巧。
28 1
|
SQL Cloud Native 关系型数据库
ADBPG(AnalyticDB for PostgreSQL)是阿里云提供的一种云原生的大数据分析型数据库
ADBPG(AnalyticDB for PostgreSQL)是阿里云提供的一种云原生的大数据分析型数据库
1284 1
|
数据可视化 关系型数据库 MySQL
将 PostgreSQL 迁移到 MySQL 数据库
将 PostgreSQL 迁移到 MySQL 数据库
1762 2
|
SQL 关系型数据库 Linux
【PostgreSQL】基于CentOS系统安装PostgreSQL数据库
【PostgreSQL】基于CentOS系统安装PostgreSQL数据库
964 0
|
SQL 存储 自然语言处理
玩转阿里云RDS PostgreSQL数据库通过pg_jieba插件进行分词
在当今社交媒体的时代,人们通过各种平台分享自己的生活、观点和情感。然而,对于平台管理员和品牌经营者来说,了解用户的情感和意见变得至关重要。为了帮助他们更好地了解用户的情感倾向,我们可以使用PostgreSQL中的pg_jieba插件对这些发帖进行分词和情感分析,来构建一个社交媒体情感分析系统,系统将根据用户的发帖内容,自动判断其情感倾向是积极、消极还是中性,并将结果存储在数据库中。
玩转阿里云RDS PostgreSQL数据库通过pg_jieba插件进行分词
|
关系型数据库 测试技术 分布式数据库
PolarDB | PostgreSQL 高并发队列处理业务的数据库性能优化实践
在电商业务中可能涉及这样的场景, 由于有上下游关系的存在, 1、用户下单后, 上下游厂商会在自己系统中生成一笔订单记录并反馈给对方, 2、在收到反馈订单后, 本地会先缓存反馈的订单记录队列, 3、然后后台再从缓存取出订单并进行处理. 如果是高并发的处理, 因为大家都按一个顺序获取, 容易产生热点, 可能遇到取出队列遇到锁冲突瓶颈、IO扫描浪费、CPU计算浪费的瓶颈. 以及在清除已处理订单后, 索引版本未及时清理导致的回表版本判断带来的IO浪费和CPU运算浪费瓶颈等. 本文将给出“队列处理业务的数据库性能优化”优化方法和demo演示. 性能提升10到20倍.
839 4

热门文章

最新文章

相关产品

  • 云原生数据库 PolarDB