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

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

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

直播回顾视频:开源PolarDB企业级架构重磅发布-阿里云
PDF下载: 文件下载-阿里云开发者社区

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

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

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

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

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

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

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

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

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

我们的方案是将阿里内部的一致性协议 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角色。此外还能支持所有节点设置选举权重,选举权重高的节点会优先被选为主。同时,集群变更操作不影响业务的正常运行,此能力的实现由一致性协议来保证。最终集群内配置达成一致,不会因为集群配置过程中的异常情况导致状态不一致的问题。

三节点高可用功能中增加了一个新的角色: Learner 节点。它没有多数派的决策权,但能够提供只读服务。

Learner 节点的日志同步状态与 Leader 无关,也不会影响 Leader ,它的主要作用有两点:

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

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

在集群部署方面,能够支持跨机房和跨域的部署,包括同机房三副本、同城三机房三副本,以及两地三机房五副本、三地三机房五副本等。另外跨域也可以利用 Learner 节点进行灾备,不会影响 Leader 节点的可用性。

此外,它兼容了 PG 原生的流复制和逻辑复制,能够保证下游的消费不受影响,保证下游不会出现未提交的数据。

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

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

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

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

① 通过原生的异步流复制来传输或同步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。

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

原文链接

本文为阿里云原创内容,未经允许不得转载。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/511206.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全员学习低代码,一汽大众领跑数智化转型背后的秘密

简介:500位低代码开发者,90%来自一线,低代码开发在一汽-大众百花齐放。 一汽-大众有500位低代码开发者,90%是来自一线的业务人员,他们如何用低代码解决身边的数字化需求?钉钉宜搭《102个开发者故事》走进一…

智领云CEO彭锋:DataOps,大数据的新战线

作者 | 彭锋 供稿 | 智领云 2008年我在我的第一份工作(Ask.com)中开始使用Hadoop。当时是因为昂贵的Oracle集群无法处理不断增加的分析工作量,公司不得不切换到Hadoop。随后在Twitter担任数据工程师的第二份工作中,我在第一线参…

宜搭小技巧|维护Excel太麻烦?Excel一键转应用,为你的工作减负

简介:只需6步,轻松学会「Excel一键创建应用」! 在钉钉的聊天窗口中,每天都会流转数量巨大的Excel表格,用于信息收集和数据统计,但有时这些表格并不能很好地帮助到我们的工作,相反还会带来许多不…

阿里云发布第四代神龙架构,提供业界首个大规模弹性RDMA加速能力

简介:10月20日,2021年杭州云栖大会上,阿里云发布第四代神龙架构,升级至全新的eRMDA网络架构,是业界首个大规模弹性RDMA加速能力。 10月20日,2021年杭州云栖大会上,阿里云发布第四代神龙架构。相…

性能提升40%,阿里云神龙大数据加速引擎获TPCx-BB世界排名第一

简介:神龙大数据加速引擎,针对大数据常用组件,如Spark、Hadoop、Alluxio等,结合阿里云神龙架构的特性,进行软硬一体化优化,形成独一无二的性能优势,最终,使复杂SQL查询场景性能相比社区版spark提…

构造函数的原型和原型链

转载 https://blog.csdn.net/weixin_44976833/article/details/101322081 构造函数和原型和原型链 1.静态成员和实例成员 1.1静态成员 静态成员在构造函数本身上添加的成员,静态成员只能通过构造函数来访问 function Person(name,age){this.name name;this.age age; } /…

redis + lua实现分布式接口限流实现方案

作者 | 步尔斯特来源 | 步尔斯特前言redis lua脚本已然成为了单体项目主流的限流方案。redis凭借其特性成为了中间件的佼佼者,最新官方测试数据:读的速度是110000次/s写的速度是81000次/s。lua:减少网络开销:使用Lua脚本&#xf…

微服务用户为什么要用云原生网关

简介:下文将为你解说云原生网关如何助你解决一系列痛点,优雅玩转云上微服务架构升级。 作者:百丈 随着云原生技术的发展,微服务的架构选型也是日新月异。在 Kubernetes 重塑运维体系的云时代,我们在安全、降本提效、…

15 分钟实现企业级应用无损上下线

简介:很多用户量大并发度高的应用系统为了避免发布过程中的流量有损,一般选择在流量较小的半夜发布,虽然这样做有效果,但不可控导致背后的研发运维成本对企业来说是一笔不小的负担。基于此,阿里云微服务引擎 MSE 在应用…

基于 Observable 构建前端防腐策略

简介:To B 业务的生命周期与迭代通常会持续多年,随着产品的迭代与演进,以接口调用为核心的前后端关系会变得非常复杂。在多年迭代后,接口的任何一处修改都可能给产品带来难以预计的问题。在这种情况下,构建更稳健的前端…

动态卡片:富媒体内容井喷式增长下,新一代移动端动态研发的模式

简介:「蚂蚁动态卡片」新品发布会全程回顾 在 iOS 和 Android 系统近期推送的更迭版本中,系统环境已经逐渐发展出了将部分内容和服务前置化展示的趋势。 同时,伴随着富媒体内容井喷式增长以及内容的多样化、年轻化,一款移动应用…

Windows 上创建的文件,上传到 Linux 服务器,文件名乱码?

作者 | 刘光录来源 | TIAP先来说一下问题,在 Windows 下创建的一系列文件,上传到 Linux 服务器后,出现文件名乱码,导致文件无法读取的情况。事情的起因是这样的...最近有这样一个需求:在Java Web工程中读取本地某一个文…

阿里云成为首个通过“虚拟化云平台性能测试(大规模)”的云厂商

简介:2021年7月27日,在可信云大会上,中国信息通信研究院发布了《虚拟化云平台性能评估方法》,同时,宣布了阿里云成为首个通过“虚拟化云平台性能测试(大规模)”的云厂商,并获得“202…

阿里云神龙团队拿下TPCx-BB排名第一的背后技术

简介:阿里云自主研发的神龙大数据加速引擎获得了TPCx-BB SF3000世界排名第一的成绩。 一 背景介绍 近日,TPC Benchmark Express-BigBench(简称TPCx-BB)公布了最新的世界排名,阿里云自主研发的神龙大数据加速引擎获得了TPCx-BB SF3000排名第…

从中国移动财报透视:什么在支撑移动云发展韧性?

8 月 11 日,中国移动公布 2022 年中期业绩报告。报告显示,上半年中国移动营运收入达人民币 4969 亿元,同比增长 12.0%。净利润 703 亿元,同比增长 18.9%,盈利能力全球领先。其中,移动云收入达人民币 234 亿…

vue 前期准备,项目结构

环境 1、node -v 检测 没有就下载node,装到C盘 http://nodejs.cn/download/ 2、vue -v 检测 没有就 npm install -g vue/cli 或者 yarn global add vue/cli 安装脚手架 网址 https://cli.vuejs.org/zh/ 也可以从网址里找到…

如何设计一个复杂的业务系统?从对领域设计、云原生、微服务、中台的理解开始

简介:业级应用架构是在不断的演进和迭代,但是我始终感觉企业应用架构的形成过程是在一种看起来科学的方法论下,但是又不完全科学的过程中实现的。 作者:焦方飞 大年初一,看完中国队 1:3 越南队的比赛,在思…

如何从容应对复杂性

简介:软件的复杂性,是一个很泛的概念。但是一直都是开发过程中的一个难题,本文旨在探讨如何去从容应对复杂性。 作者 | 無涯 来源 | 阿里技术公众号 软件的复杂性,是一个很泛的概念。 但是一直都是开发过程中的一个难题&#xf…

阿里巴巴开源大规模稀疏模型训练/预测引擎DeepRec

简介:经历6年时间,在各团队的努力下,阿里巴巴集团大规模稀疏模型训练/预测引擎DeepRec正式对外开源,助力开发者提升稀疏模型训练性能和效果。 作者 | 烟秋 来源 | 阿里技术公众号 经历6年时间,在各团队的努力下&#…

产学融合如何促进技术创新,英特尔打了个样

作者 | 宋慧 出品 | CSDN 经过多年的积累与扎实科研,中国的科学与技术水平正在达到和超越世界一线水平。这离不开中国有基数庞大的用户和应用场景,为科学界和工业界提供了将理论付诸实践的机会,反复打磨迭代,以提升技术指标。 作…