前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >PostgreSQL多主复制方案

PostgreSQL多主复制方案

原创
作者头像
DB之路
修改于 2021-03-17 02:14:14
修改于 2021-03-17 02:14:14
4.5K0
举报
文章被收录于专栏:数据库PG数据库PG

随着数据量的快速增长,可伸缩性已经成为数据库领域最热门的话题之一,可伸缩性分为垂直扩展和水平扩展。垂直扩展意味着给已经存在的节点增加更多的硬件资源,以提升单个节点存储和处理更多数据的能力,比如增加更多的CPU,磁盘空间和内存。几乎所有的DBMS引擎通过改进锁/互斥机制和并发性来提高其垂直扩展能力,以便更有效的利用新添加的资源,数据库引擎通常提供相关的配置参数,来更有效的利用硬件资源。

由于硬件成本以及在现有节点中添加新硬件的限制,不可能总是靠添加新硬件资源来解决数据库性能瓶颈,因此,水平扩展成为解决性能瓶颈的另一种可选方案。相对于垂直扩展,水平扩展更难实现,它需要更多的开发工作以及相关的配套工具。PostgreSQL为垂直扩展和水平扩展提供了相当丰富的功能特性,它支持在多个处理器和大量内存的机器上执行,并提供配置参数来管理和充分利用这些资源。PostgreSQL并发执行的特性使其在垂直扩展上更加突出,同时也不缺乏水平扩展性。复制功能是PostgreSQL水平扩展的核心,目前支持的单向主从复制已经能够解决大多数应用场景。

一、关键概念
1.1 数据复制

数据复制是指在其他服务器上复制数据,并将其存储在多个节点上。在这个过程中,数据库实例从一个节点传输到另一个节点,并生成一个精确的副本。数据复制用于提高数据可用性,这是HA的一个关键特性。可以对完整的数据库实例进行复制,也可以将一些常用的或必需的对象复制到另一个服务器。由于复制提供了数据库的多个一致性副本,它不仅提供了高可用性,而且还提高了应用性能,比如读写分离。

2.2 同步复制

在磁盘上写入数据时有两种策略:同步和异步。同步复制意味着数据同时写入主设备和从设备,换句话说,“同步复制”意味着一个事务提交,需要等待远端从节点写入,并刷到磁盘。同步复制通常用于对瞬时故障转移要求高的事务场景。

2.3 异步复制

异步意味着数据首先写入主库,然后复制到备库。在主库崩溃的情况下,可能会发生数据丢失,但是因为异步复制的开销很少,不会阻塞主库事务提交,因此在大多数业务场景下是可以接受的。然而与同步复制相比,failover故障转移所需的时间更长。

2.4 单主复制

单主复制意味着只允许在单个节点上写入数据,这些修改将复制到一个或多个节点。数据更新和插入只能在主节点上进行,应用程序需要将流量路由到主节点,因为只有一个主节点,所以不可能发生数据冲突。大多数情况下,单主复制对应用程序来说已经足够了,因为它的配置和管理不太复杂,但在某些情况下,单主复制是不够的,不能满足某些场景的需求,因此需要多主机复制。

二、多主复制

多主复制意味着有多个节点充当主节点。数据在节点之间复制,插入和更新可以在一组主节点上执行。数据有多个副本,系统负责解决并发更改之间发生的任何冲突。

使用多主复制主要有两个原因:一是高可用性,二是性能。在大多数情况下,有些节点专用于密集的写操作,而有些节点专用于读操作或故障转移。

关于多主复制的优缺点,如下:

优点:

  1. 如果一个主节点出现故障,另外一个主节点将会接替它的工作,避免业务中断。
  2. 主节点位于多个不同的位置,降低所有主节点都发生故障的概率。
  3. 可以在多个主节点上写入数据。
  4. 应用服务不需要将写流量只路由到一个节点。

缺点:

  1. 复杂性增加。
  2. 冲突解决非常困难,因为可以在多个节点上同时写入。
  3. 有时发生冲突时需要人工干预。
  4. 可能导致数据不一致。

正如上述讨论过的,在大多数情况下,单主复制已经足够满足业务需求,大多数场景下都建议使用单主复制,但是仍然有一些情况需要多主复制。PostgreSQL内置了单主复制,但遗憾的是,在PostgreSQL主分支中并没有多主复制功能。

有一些多主复制解决方案可用,其中一些是在应用程序端实现,有一些是PostgreSQL分叉的fork版本实现,这些fork有自己的小型社区,主要由一家公司管理,但不是由PostgreSQL主线社区管理。

常用的PostgreSQL多主解决方案如下:

  1. BDR (Bi-Directional Replication)
  2. xDB
  3. PostgreSQL-XL
  4. PostgreSQL-XC / PostgreSQL-XC2
  5. Rubyrep
  6. Bucardo
2.1 BDR (Bi-Directional Replication)

BDR是一个多主复制解决方案,它有不同的版本。早期版本的BDR是开源的,但最新版本是闭源的。BDR由2ndQuadrant开发,是迄今为止最优雅的多主机解决方案之一。BDR提供异步的多主机逻辑复制,基于PostgreSQL逻辑解码特性。由于BDR实质上是在其他节点上重新应用事务,因此如果正在应用的事务与在接收节点上提交的事务之间存在冲突,应用操作可能会失败。

2.2 xDB

EnterpriseDB使用Java开发了双向复制解决方案xDB,基于他们自己的协议,因为它是一个闭源方案,所以相关的设计信息无从获取。

  • 由EnterpriseDB开发和维护
  • 使用Java开发,性能欠佳
  • 闭源代码,专有软件
  • xDB复制服务包含多个可执行程序
  • failover故障转移时间较长
  • 拥有用户界面,用于配置和维护复制系统
2.3 PostgreSQL XC/XC2

PostgreSQL XC由EnterpriseDB和NTT开发,它是一个同步复制解决方案。PostgresXC是一个开源项目,提供写场景可伸缩的、同步的、对称的和透明的PostgreSQL集群解决方案。从EnterpriseDB和NTT官网,已经多年没有看到PostgreSQL XC有新的发展。目前,华为正致力于此产品。在OLAP的场景下,已经报告了一些性能提高,但不适合于TPS。

2.4 PostgreSQL XL

PostgreSQL XL是PostgreSQL XC的一个分支,目前由2ndQuadrant支持。它远远落后于PostgreSQL社区,它基于PostgreSQL 10.6,与PostgreSQL最新版本PostgreSQL 12不一致。它是基于PostgreSQL XC的,对于OLAP性能非常好,但是不太适合于高TPS。

所有的PostgreSQL XC/XC2/XL都被认为是“PostgreSQL派生软件”,与PostgreSQL当前的开发不同步。

2.5 Rubyrep

它是由Arndt-Lehmann开发的异步主主复制,声称通过最简单的配置、安装,就可以跨平台工作,包括windows。它总是在两台服务器上运行,在Rubyrep术语中被称为“左”和“右”。因此,将其称为主主架构更合适,而不是多主架构。

  • rubyrep可以在左数据库和右数据库之间同步复制数据
  • 自动设置必要的触发器、日志表等
  • 自动发现新添加的表并同步表内容
  • 自动重新配置序列以避免重复的序列数据冲突
  • 跟踪主键字段的更改
  • 可以同时实现主从复制和主主复制
  • 预构建冲突解决方法:左/右获胜,早期/后期更改获胜
  • 可通过ruby代码段指定的自定义冲突解决方案
  • 复制决策可以选择性地记录在rubyrep事件日志表中

注:就发展而言,该项目在过去三年中一直不活跃。

2.6 Bucardo

Bucardo是End Point公司的Jon Jensen和Greg Sabino Mullane开发的基于触发器的复制解决方案。Bucardo已经存在了近20年,最初被设计为一个”懒惰“的异步解决方案,实现最终复制所有的更改。有一个Perl守护进程监听NOTIFY请求并对其执行操作。表上发生的更改记录在表(bucardo_delta)中,并通知守护进程。守护进程通知控制器启动“kid”以同步表更改。如果存在冲突,则使用标准或自定义冲突处理程序对其进行处理。

  • 基于触发器的复制
  • 冲突解决策略
  • 依赖Perl5、DBI、DBD::Pg、DBIx::Safe
  • 安装和配置都很复杂
  • 复制经常中断,bug较多
三、总结

单主复制足够应对大多数应用场景,但仍然有人试图配置多主机复制,并使其多主复制设计得过于复杂。强烈建议设计系统时尽量避免多主复制,除非没有其他可选方案。主要有两个原因:第一,它使系统过于复杂,难以调试;第二,由于没有可用的社区维护的多主复制,无法获得PostgreSQL社区的任何支持。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
一文入门高性能计算HPC-详解2
接上文: https://cloud.tencent.com/developer/article/2508936
晓兵
2025/03/29
520
一文入门高性能计算HPC-详解2
一文入门高性能计算HPC-详解1
高性能计算(HPC) 是使用多组尖端计算机系统执行标准商用计算系统无法实现的复杂模拟、计算和数据分析的艺术和科学。
晓兵
2025/03/29
1140
一文入门高性能计算HPC-详解1
MPI消息传递接口协议和硬件卸载
MPI 提供了三种不同的通信方法,MPI 进程可以使用这些方法相互通信。下面讨论了这些通信方法:
晓兵
2024/05/29
4330
MPI消息传递接口协议和硬件卸载
算法、应用与计算平台,讯飞百度阿里360的深度学习经
当前人工智能领域最热门的技术,无疑是大数据+深度学习。实验环境下,深度学习的性能在语音识别、图象分类和检索、人脸识别、文字识别以及智能交通等领域,都大幅超过了传统的方法。但从商业化的角度来看,深度学习的应用才刚刚开始,挑战依然巨大。深度学习如何才能有用、好用,依然困扰许多企业和开发者。在9月24日下午的2015高性能计算用户大会 (HPCUF2015)深度学习分论坛上,来自 工业界和学术界的六位专家分享了深度学习技术在智能语音、搜索、广告、视觉分析、流量识别等不同领域的应用,以及为如何构建高性能计算平台来支
用户1737318
2018/06/05
1.2K0
聚众群殴 IB 网络,超以太网联盟携 45 名新成员走向 v1.0 规范!
超以太网联盟 (UEC) 继续朝着 v1.0 版本规范集迈进。规范将为从业者提供数据中心网络技术最新的创新性部署方法,可以更好地服务于人工智能和高性能计算工作负载。由于 UEC 保留了现有的 AI 框架和 HPC 库 API,因此预计现有工作负载无需任何更改即可迁移到 UEC。
用户6874558
2024/03/22
8600
聚众群殴 IB 网络,超以太网联盟携 45 名新成员走向 v1.0 规范!
浪潮发布最新深度学习框架CAFFE-MPI
德国当地时间6月20日,与英特尔宣布第二代至强Phi芯片“Knights Landing”(以下称KNL)正式上市同步,浪潮在刚刚举行的第31届国际超算大会(ISC2016)上,全球首发基于最新KNL
昱良
2018/04/08
1.3K0
浪潮发布最新深度学习框架CAFFE-MPI
英特尔研究员展望人工智能与高性能计算的融合
高性能计算领域专业媒体HPCwire发表文章,介绍了英特尔研究人员对人工智能与高性能计算结合的技术展望。 将针对特定问题的深度神经网络扩展到具有数千个节点的大型系统是一项具有挑战性的工作。事实上,这是将人工智能(AI)和高性能计算(HPC)进行融合时面临的几个障碍之一。英特尔院士(Intel Fellow)、英特尔并行计算实验室(Parallel Computing Lab)主管撰写了一篇博客,描述英特尔为了更好地了解和解决这个问题所做的努力,并承诺将在2017年全球超级计算大会(SC2017)上提
人工智能快报
2018/03/15
6740
英特尔研究员展望人工智能与高性能计算的融合
「首度揭秘」大规模HPC生产环境 IO 特征
在王坚博士的《在线》一书中提到,单纯谈数据的“大”,意义是不大的。欧洲核子研究中心(CERN)进行一次原子对撞产生的数据大到惊人,而如何通过计算的方式去挖掘出这些数据背后的价值,才是数据意义的本身。HPC高性能计算,就是完成这种价值转换的重要手段。近年来,HPC的应用范围已经从纯学术扩展到资源勘探、气象预测、流体力学分析、计算机辅助设计等更多场景。这些HPC应用程序会产生或依赖大量数据,并将其存储在PB级别的共享的高性能文件系统中。然而,无论是HPC应用的用户,还是高性能文件系统的开发人员,对这些文件的访问模式了解都非常有限。
焱融科技
2020/05/22
1.2K0
「首度揭秘」大规模HPC生产环境 IO 特征
从 HPC 到 AI:探索文件系统的发展及性能评估
随着 AI 技术的迅速发展,模型规模和复杂度以及待处理数据量都在急剧上升,这些趋势使得高性能计算(HPC)变得越来越必要。HPC 通过集成强大的计算资源,比如 GPU 和 CPU 集群,提供了处理和分析大规模数据所需的算力。
Juicedata
2024/03/07
2430
从 HPC 到 AI:探索文件系统的发展及性能评估
Hammerspace:全局并行文件系统架构案例
按:鹏弟最近在学习国内JuiceFS产品文档,数据与元数据分离,构建统一命名空间设计,在软件定义存储领域并不算新事物,国内SDS厂商几乎都有自己统一存储方案。AI/新场景对海量文件的效率要求,使得并行文件系统备受关注。全局命名空间+并行文件系统是Hammerspace对当前AI场景的求解。
数据存储前沿技术
2025/02/11
1660
Hammerspace:全局并行文件系统架构案例
100TB大数据存储方案
Hive Hbase 存储介质: https://www.zhihu.com/question/46392643?sort=created 请问,在家里攒一套 100TB-200TB 的存储有什么架构
全栈程序员站长
2022/11/08
1.3K0
分布式文件系统MFS、Ceph、GlusterFS、Lustre的比较
**MooseFS(MFS)** **Ceph** **GlusterFS** **Lustre** **Metadata server** 单个MDS。存在单点故障和瓶颈。 多个MDS,不存在单点故障和瓶颈。MDS可以扩展,不存在瓶颈。 无,不存在单点故障。靠运行在各个节点上的动态算法来代替MDS,不需同步元数据,无硬盘I/O瓶颈。 双MDS(互相备份)。MDS不可以扩展,存在瓶颈。 **FUSE** 支持 支持 支持 支持 **访问接口** POSIX POSIX POSIX POSIX/MPI **
EltonZheng
2021/01/22
3.7K0
2021年图灵奖公布!72岁的美国科学家 Jack Dongarra 获奖
作者 | Ailleurs 编辑 | 陈彩娴 刚刚,2021年计算机领域的最高奖项——图灵奖公布!美国计算机科学家 Jack J. Dongarra 获奖,以表彰他在高性能计算领域的卓越成就。 根据 ACM 的介绍,Dongarra 的算法和软件推动了高性能计算的发展,对人工智能、计算机图形学等多个计算科学领域均产生了重大的影响。 他在数值算法和库方面做出了开创性的贡献,使得高性能计算软件能够跟上四十多年来的指数级硬件更新。 图灵奖被称为「计算机领域的诺贝尔奖」,由美国计算机协会(ACM)于 1966 年设
AI科技评论
2022/03/31
8350
2021年图灵奖公布!72岁的美国科学家 Jack Dongarra 获奖
Mercury为高性能计算启用远程过程调用(RPC)
远程过程调用(RPC)是分布式服务广泛使用的一种技术。 这种技术现在越来越多地用于高性能计算 (HPC) 的上下文中,它允许将例程的执行委托给远程节点,这些节点可以留出并专用于特定任务。 然而,现有的 RPC 框架采用基于套接字的网络接口(通常在 TCP/IP 之上),这不适合 HPC 系统,因为此 API 通常不能很好地映射到这些系统上使用的本机网络传输,从而导致网络性能较低。 此外,现有的 RPC 框架通常不支持处理大数据参数,例如在读取或写入调用中发现的参数。我们在本文中提出了一个异步 RPC 接口,专门设计用于 HPC 系统,允许参数和执行请求的异步传输和直接支持大数据参数。 该接口是通用的,允许传送任何函数调用。 此外,网络实现是抽象的,允许轻松移植到未来的系统并有效使用现有的本地传输机制
晓兵
2023/06/23
5590
Mercury为高性能计算启用远程过程调用(RPC)
如何借助云集群打造高性能计算
云计算一开始致力于为互动系统(systems of engagement)改善应用架构,而在高性能计算方面提供不了什么。而如今,领先的云服务提供商正在重构解决方案及相关的基础设施,让计算密集型应用切合
静一
2018/03/23
1K0
如何借助云集群打造高性能计算
文件系统基准测试应用IOR-简介
IOR(交叉或随机)是一种常用的文件系统基准测试应用程序,特别适合评估并行文件系统的性能。该软件通常以源代码形式分发,通常需要在目标平台上编译。IOR 不是特定于 Lustre 的基准测试,可以在任何符合 POSIX 的文件系统上运行,但它需要完全安装和配置的文件系统实现才能运行。对于 Lustre,这意味着必须安装、配置和运行 MGS、MDS 和 OSS 服务,并且有一组 Lustre 客户端节点在运行,并安装了 Lustre 文件系统
晓兵
2025/02/04
1440
文件系统基准测试应用IOR-简介
华为OceanStor Pacific斩获IO500榜单第二,数据存储的“时”与“势”
根据世界经济论坛的估算,2020年全世界产生了超过44ZB的数据量,而在十年前全球的数据总量还只有1ZB。
Alter聊科技
2023/01/13
4610
腾讯混合云存储 TStor 系列再添新成员,并行存储一体机正式发布
最近国内某大型互联网公司依靠其数据优势成功上市,可见数据的重要性,而数据和存储密不可分,您真的知道自己需要更高性能存储吗? 在当今数据爆发式增长的时代,数据已经成为很多行业最重要的资源,没有之一。 数据左右着很多新兴企业的命脉,收集数据、分析数据和应用数据的循环已经变为企业发展的根本,依靠数据创造更大的价值,并持续的加强和优化数据管理流程,让数据型驱动的行业不断进化。 常规的存储只能满足数据保存的基本需求,或者顺带一些基本的数据混合管理,而要真正挖掘数据的价值,采用高性能的存储必不可少,以支撑高性能
云存储
2021/10/14
6950
文件系统测试工具整理
合成测试程序根据统计的真实负载发生规律,如请求的读写比例,大小,频率和分布等信息。建立响应的io存取模型。在测试时产生符合存取模型的io请求序列。发送给存储系统。这类程序包括 IOMeter,IOZone 和 Bonnie++。
西湖醋鱼
2020/12/30
3K0
快手春节红包背后,高并发存储架构设计
2020年的春节,想必大家都印象深刻,除了新冠肺炎疫情,就是春晚各大APP的红包大战,让不少用户“薅”到了羊毛。
腾讯云开发者
2020/05/08
4.3K0
推荐阅读
相关推荐
一文入门高性能计算HPC-详解2
更多 >
LV.1
北京焱融科技有限公司
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文