《PolarDB for PostgreSQL源码与应用实战》——PolarDB for PostgreSQL高可用原理(上)

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核8GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介: 《PolarDB for PostgreSQL源码与应用实战》——PolarDB for PostgreSQL高可用原理(上)

高可用集群架构


(一)高可用架构


首先我们先了解一下PolarDB for PG的高可用架构。


image.png


总的来说,PolarDB for PG的高可用架构是把物理复制跟一致性协议相结合,来保证各个节点上的默认值的强一致性。我们看一下原生PG的物理复制方案,也就是流复制方案。


PG原生的流复制支持异步、同步、Quorum Base的机制来同步WAL日志,我们简单分析一下这三种复制方式。首先是同步复制,同步复制的首要目标是保证不丢数据,但其实它会有一些问题,第一个问题是它无法满足可用性的要求,当备库出现故障的时候,或者网络链路上有抖动的时候,这个时候可能会影响主库的可用性,或者主库的RT。其次,它本身并不具备故障自动切换的能力,意味着它并不会去探测主库的可用性,更不用说触发自动的故障切换。另外,旧的主库在故障恢复之后,可能无法重新加入到集群里面来。比如当事务在主库上WAL日志已经持久化成功了,但是在备库上还没有收到日志的时候,如果主库出现故障了,这个时候可能需要通过手动或者通过管控系统来把备库promote成新的主库。


过了一段时间之后,如果旧的主库恢复了,正常的逻辑应该是旧的主库以Standby的方式重新从新的主库上同步WAL日志,但这个时候由于旧的主库在挂掉之前,本身自己会有一些多余的WAL日志,所以这个时候是无法直接从主库上拉取日志,因为拉取日志的时候,会发现自己本身已有的日志在主库上不存在,在流复制里面它是会失败的,所以说这个时候我需要先执行一下pg_rewind。另外,对于不丢数据这一点,其实它也不完全是丢数据,比如说到Master上面,其实是在事务提交的时候,它会等待Standby同步日志,从而保证当Master可见的数据在Standby上肯定是已经同步到了。但是当Master写入了本地日志,然后Standby上还没有写入日志的时候,Master重启了,这时候Master重启之后,它会回放自己所有WAL日志,导致没有被同步到Standby的日志也会被回放。回放之后会出现一个现象,就是Master上已经看到的这些数据,但是对应的WAL日志还没有同步到Standby上,所以严格意义上来说,同步复制也并不能保证不丢数据。


其次我们看一下异步复制,异步复制跟同步复制相比,不需要等待StandbyWAL日志持久化成功。它发送过去行了,根本不关心备库到底有没有持久化成功,然后本地的事务就可以提交了。跟同步复制相比,它可用性比较好,或者说性能比较好,但它的问题是可能会丢数据。


最后一个是Quorum复制,Quorum复制看起来是说如果我们使用了一个多数派的方案之后,是否可以保证不丢数据。但其实在一致性协议里,它除了多数派同步的方案之外,它本身还会有一些选主、日志一致性、集群在线变更等方面的逻辑,但是PG本身Quorum复制里面,它并没有涉及到这些逻辑,所以从本质上来说,它其实并不是一个完整的RPO=0的高可用方案。


那么分析完PG的三种复制方式之后,我们再看一下我们PolarDB for PG的一个高可用方案。

image.png


首先我们通过把一致性协议引入到物理复制里,使用的一致性协议是阿里的X-Paxos协议,X-Paxos协议在阿里内部的业务中,包括阿里云的多个产品中,已经稳定使用了很长一段时间,包括企业版的AliSQL、PolarDB for MySQL以及PolarDB-X等产品,都使用了X-Paxos,具体的协议这里就不详细展开阐述,跟其他的一致性协议基本类似。这块主要讲一下,我们在物理复制里面引入了一致性协议之后的主要能力。


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

那么我们高可用系统的特点是什么?


首先,它能保证集群数据的强一致性,也就是RPO=0。当多数派节点的WAL日志写入成功后,我们才认为日志是提交成功了。


另外一点是本身我们支持自动failover的,当发生failover之后,WAL日志会首先跟Leader对齐,然后再次从Leader拉取日志,对齐主要是通过一致性协议来实现,后面会详细讲一下。


第三个特点是刚才提到自动failover,大家知道在我们的高可用集群里面,只要半数以上节点存活的时候,就能保证集群正常对外提供服务。但是当Leader节点出现故障的时候,我们就会自动触发集群的重新选主流程,然后由新主对外提供读写服务,然后Follower节点也会自动从新的Leader节点上同步WAL日志,同时自动跟新的Leader对齐WAL日志。


第四点是在线集群变更,就是可以在线增删节点,包括手动切换,这些操作不影响业务的正常运行,具体也是由一致性协议来保证的,最终集群内的配置肯定会达成一致。即使在集群配置变更过程中发生一些异常,比如主库挂了或其中一个备库挂了这样的情况,最终集群成员状态还是能保证一致性。


除了Leader、Follower节点之外,我们在集群中还有其他两个节点,其中一个是Logger节点。Logger节点不存储数据,它从Leader中拉取到日志之后,它不进行回放,只保留实时日志,日志的目的是三个节点成本与主备基本相当。


另外一个是Learner节点,它本身没有多数派的决策权,但是它能提供只读服务。比如Leader节点在判断多数派节点的时候,其实并不考虑Learner节点,这个节点主要作用是它作为加节点的一个中间状态,比如新加的节点相对于Leader节点延迟比较大的时候,此时如果直接把它当做一个多数派决策的节点加进来,可能会影响Leader的可用性,或者影响Leader的提交延迟,所以我们先把它以Learner的角色加入到集群中,让它先同步数据,当数据基本追上的时候,我们再把它升级成Follower节点。


其次,Learner节点另外一个作用就是我们可以把它作为一个异地的灾备节点,主要特点是当时发生地点切换之后,自动从新的地方同步日志,对于原生的standby,当发生了主库切换之后,它并不会自动地从新主库上同步日志。


在集中部署方面,我们支持跨机房和跨域的部署,包括同机房三副本,同城三机房三副本,以及两地三机房五副本,还有三地三机房五副本的部署。


另外是跨域,刚才提到可以用Learner节点进行灾备,此时并不会影响Leader节点的可用性。另外,我们这个架构里最重要的一点也是比较关键一点,就是我们兼容PG原生的流复制和逻辑复制,能保证下游的消费者不受影响。


《PolarDB for PostgreSQL源码与应用实战》——PolarDB for PostgreSQL高可用原理(中) https://developer.aliyun.com/article/1232683?groupCode=polardbforpg

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍如何基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
3月前
|
关系型数据库 MySQL 分布式数据库
安全可靠的PolarDB V2.0 (兼容MySQL)产品能力及应用场景
PolarDB分布式轻量版采用软件输出方式,能够部署在您的自主环境中。PolarDB分布式轻量版保留并承载了云原生数据库PolarDB分布式版技术团队深厚的内核优化成果,在保持高性能的同时,显著降低成本。
|
6天前
|
Cloud Native 关系型数据库 MySQL
免费体验!高效实现自建 MySQL 数据库平滑迁移至 PolarDB-X
PolarDB-X 是阿里云推出的云原生分布式数据库,支持PB级存储扩展、高并发访问与数据强一致,助力企业实现MySQL平滑迁移。现已开放免费体验,点击即享高效、稳定的数据库升级方案。
免费体验!高效实现自建 MySQL 数据库平滑迁移至 PolarDB-X
|
4天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!
|
9天前
|
关系型数据库 MySQL 分布式数据库
阿里云PolarDB云原生数据库收费价格:MySQL和PostgreSQL详细介绍
阿里云PolarDB兼容MySQL、PostgreSQL及Oracle语法,支持集中式与分布式架构。标准版2核4G年费1116元起,企业版最高性能达4核16G,支持HTAP与多级高可用,广泛应用于金融、政务、互联网等领域,TCO成本降低50%。
|
4月前
|
关系型数据库 MySQL 分布式数据库
Super MySQL|揭秘PolarDB全异步执行架构,高并发场景性能利器
阿里云瑶池旗下的云原生数据库PolarDB MySQL版设计了基于协程的全异步执行架构,实现鉴权、事务提交、锁等待等核心逻辑的异步化执行,这是业界首个真正意义上实现全异步执行架构的MySQL数据库产品,显著提升了PolarDB MySQL的高并发处理能力,其中通用写入性能提升超过70%,长尾延迟降低60%以上。
|
5月前
|
存储 Cloud Native 关系型数据库
PolarDB开源:云原生数据库的架构革命
本文围绕开源核心价值、社区运营实践和技术演进路线展开。首先解读存算分离架构的三大突破,包括基于RDMA的分布式存储、计算节点扩展及存储池扩容机制,并强调与MySQL的高兼容性。其次分享阿里巴巴开源治理模式,涵盖技术决策、版本发布和贡献者成长体系,同时展示企业应用案例。最后展望技术路线图,如3.0版本的多写多读架构、智能调优引擎等特性,以及开发者生态建设举措,推荐使用PolarDB-Operator实现高效部署。
279 3
|
5月前
|
Cloud Native 关系型数据库 分布式数据库
PolarDB开源:云原生数据库的新篇章
阿里云自研的云原生数据库PolarDB于2023年5月正式开源,采用“存储计算分离”架构,具备高性能、高可用及全面兼容性。其开源版本提供企业级数据库解决方案,支持MySQL、PostgreSQL和Oracle语法,适用于高并发OLTP、核心业务系统等场景。PolarDB通过开放治理与开发者工具构建完整生态,并展望更丰富的插件功能与AI集成,为中国云原生数据库技术发展贡献重要力量。
463 17
|
8月前
|
关系型数据库 分布式数据库 PolarDB
通过 PolarDB for PostgreSQL 实现一体化的 HTAP 能力
阿里云 PolarDB for PostgreSQL作为一款领先的云原生关系型数据库,利用向量化引擎+列存索引等技术实现了 OLTP 和 OLAP 的一体化。本方案为您展示如何通过 PolarDB for PostgreSQL 来实现一体化的 HTAP 能力。
通过 PolarDB for PostgreSQL 实现一体化的 HTAP 能力
|
9月前
|
JSON 关系型数据库 PostgreSQL
PostgreSQL 9种索引的原理和应用场景
PostgreSQL 支持九种主要索引类型,包括 B-Tree、Hash、GiST、SP-GiST、GIN、BRIN、Bitmap、Partial 和 Unique 索引。每种索引适用于不同场景,如 B-Tree 适合范围查询和排序,Hash 仅用于等值查询,GiST 支持全文搜索和几何数据查询,GIN 适用于多值列和 JSON 数据,BRIN 适合非常大的表,Bitmap 适用于低基数列,Partial 只对部分数据创建索引,Unique 确保列值唯一。
|
8月前
|
人工智能 关系型数据库 分布式数据库
100%兼容MySQL!手把手教你基于PolarDB搭建RAG系统
100%兼容MySQL!手把手教你基于PolarDB搭建RAG系统
444 0

相关产品

  • 云原生数据库 PolarDB
  • 推荐镜像

    更多