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

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核8GB 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数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
2月前
|
SQL 数据可视化 关系型数据库
MCP与PolarDB集成技术分析:降低SQL门槛与简化数据可视化流程的机制解析
阿里云PolarDB与MCP协议融合,打造“自然语言即分析”的新范式。通过云原生数据库与标准化AI接口协同,实现零代码、分钟级从数据到可视化洞察,打破技术壁垒,提升分析效率99%,推动企业数据能力普惠化。
253 3
|
6月前
|
关系型数据库 MySQL 数据库
MyEMS开源系统安装之数据库
本文详细讲解MyEMS的安装步骤,重点介绍数据库架构与脚本部署。MyEMS支持MySQL 8.0、MariaDB 10.5及SingleStore 7.0等数据库服务器。通过命令行或客户端工具执行SQL脚本完成安装,包括多个数据库(如myems_billing_db、myems_energy_db等)。此外,提供解决常见问题的方法,如“用户拒绝访问”、“COLLATE设置”和“MAX_ALLOWED_PACKET错误”。注意,不建议在生产环境中将数据库安装于Docker容器内。
192 1
|
7月前
|
Cloud Native 关系型数据库 分布式数据库
|
7月前
|
人工智能 运维 关系型数据库
|
7月前
|
存储 关系型数据库 分布式数据库
|
7月前
|
SQL 人工智能 数据可视化
16.1k star! 只需要DDL就能一键生成数据库关系图!开源神器ChartDB让你的数据结构"看得见"
ChartDB是一款开源的数据库可视化神器,通过一句智能查询就能自动生成专业的数据库关系图。无需安装客户端、不用暴露数据库密码,打开网页就能完成从数据建模到迁移的全流程操作,堪称开发者的"数据库透视镜"。
1596 67
|
6月前
|
存储 Cloud Native 关系型数据库
PolarDB开源:云原生数据库的架构革命
本文围绕开源核心价值、社区运营实践和技术演进路线展开。首先解读存算分离架构的三大突破,包括基于RDMA的分布式存储、计算节点扩展及存储池扩容机制,并强调与MySQL的高兼容性。其次分享阿里巴巴开源治理模式,涵盖技术决策、版本发布和贡献者成长体系,同时展示企业应用案例。最后展望技术路线图,如3.0版本的多写多读架构、智能调优引擎等特性,以及开发者生态建设举措,推荐使用PolarDB-Operator实现高效部署。
369 3
|
6月前
|
SQL 关系型数据库 分布式数据库
PolarDB开源数据库入门教程
PolarDB是阿里云推出的云原生数据库,基于PostgreSQL、MySQL和Oracle引擎构建,具备高性能、高扩展性和高可用性。其开源版采用计算与存储分离架构,支持快速弹性扩展和100%兼容PostgreSQL/MySQL。本文介绍了PolarDB的安装方法(Docker部署或源码编译)、基本使用(连接数据库、创建表等)及高级特性(计算节点扩展、存储自动扩容、并行查询等)。同时提供了性能优化建议和监控维护方法,帮助用户在生产环境中高效使用PolarDB。
2168 21
|
6月前
|
Cloud Native 关系型数据库 分布式数据库
PolarDB开源:云原生数据库的新篇章
阿里云自研的云原生数据库PolarDB于2023年5月正式开源,采用“存储计算分离”架构,具备高性能、高可用及全面兼容性。其开源版本提供企业级数据库解决方案,支持MySQL、PostgreSQL和Oracle语法,适用于高并发OLTP、核心业务系统等场景。PolarDB通过开放治理与开发者工具构建完整生态,并展望更丰富的插件功能与AI集成,为中国云原生数据库技术发展贡献重要力量。
581 17

相关产品

  • 云原生数据库 PolarDB
  • 下一篇
    oss云网关配置