作者:伊布拉尔·艾哈迈德(Ibrar Ahmed)在2018年7月加入Percona。在加入Percona之前,Ibrar曾在EnterpriseDB担任高级数据库架构师10年。Ibrar拥有18年的软件开发经验。Ibrar在PostgreSQL上写了多本书。

译者:魏波,中国PG分会培训认证执行总监、资深数据库工程师,十多年的数据库运维管理及培训经验,掌握PostgreSQL架构部署、性能优化等,致力于推动PostgreSQL在中国的发展。

由于数据量巨大,因此可伸缩性已成为数据库领域中最热门的主题之一。可伸缩性可以水平或垂直实现。垂直可伸缩性意味着向现有节点添加更多资源/硬件,以增强数据库存储和处理更多数据的能力,例如,向现有节点添加CPU,内存或磁盘。每个DBMS引擎都通过改进锁定/互斥机制和并发性,从而可以更有效地使用新添加的资源,从而提高了垂直可伸缩性的能力。数据库引擎提供配置参数,这有助于更有效地利用可用的硬件资源。

由于硬件成本以及在现有节点中添加新硬件的限制,因此并非总是可以添加新硬件。因此,需要水平可伸缩性,这意味着向现有网络节点添加更多节点而不是增强现有节点的功能。
与垂直可伸缩性相反,水平可伸缩性难以实施。这需要更多的开发工作。

PostgreSQL为垂直可伸缩性和水平可伸缩性提供了相当丰富的功能集。它支持具有多个处理器和大量内存的计算机,并提供配置参数来管理这些资源的使用。PostgreSQL中并行性的新功能使垂直可伸缩性更加突出,但也不缺乏水平可伸缩性。复制是水平可伸缩性的关键支柱,PostgreSQL支持单向主从复制,这足以满足许多用例。

关键概念

数据库复制
数据库复制将数据复制到其他服务器上,并将其存储在多个节点上。在此过程中,数据库实例从一个节点转移到另一节点,并进行了精确的复制。数据复制用于提高数据可用性,这是HA的一项关键功能。通常有一个完整的数据库实例,或者一些经常使用或所需的对象被复制到另一台服务器。复制提供了数据库的多个一致副本,它不仅提供了高可用性,而且还提高了查询性能。

同步复制
将数据写入磁盘时,有两种策略:“同步”和“异步”。同步复制意味着同时将数据写入主服务器和从服务器,换句话说,“同步复制”意味着提交等待远程端的写入/刷新。同步复制用于具有即时故障转移要求的高端事务环境中。

异步复制
异步意味着首先将数据写入主机,然后再复制到从机。在崩溃的情况下,可能会发生数据丢失,但是异步复制提供的开销很小,因此在大多数情况下是可以接受的。它不会使主机负担过重。与同步复制相比,从主数据库到从数据库的故障转移需要更长的时间。
简而言之,同步和异步之间的主要区别在于何时将数据写入主服务器和从服务器。

单主复制
单一主复制意味着仅允许在单个节点上修改数据,并将这些修改复制到一个或多个节点。只能在主节点上进行数据更新和插入。在这种情况下,应用程序需要将流量路由到主服务器,这会增加应用程序的复杂性。因为只有一个主节点负责写入数据,所以没有冲突的机会。在大多数情况下,单主复制对于应用程序来说就足够了,因为配置和管理起来并不那么复杂。但在某些情况下,单主复制是不够的,您需要多主复制。

多主复制
多主复制意味着有多个节点充当主节点。数据在节点之间复制,并且可以在一组主节点上进行更新和插入。在这种情况下,数据有多个副本。该系统还负责解决并发更改之间发生的任何冲突。有多个主复制有两个主要原因。一个是高可用性,第二个是性能。在大多数情况下,某些节点专用于密集写入操作,而某些节点专用于某些节点或用于故障转移。

多主复制的优缺点
优点:

  • 万一一个主机发生故障,另一个主机仍然能提供更新和插入服务。
  • 主节点位于几个不同的位置,因此所有主节点发生故障的机会非常小。
  • 可以在多台服务器上进行数据更新。
  • 应用程序不需要将流量仅路由到单个主机。

缺点:

  • 多主复制的主要缺点是它的复杂性。
  • 解决冲突非常困难,因为可以同时在多个节点上进行写操作。
  • 有时在发生冲突的情况下需要人工干预。
  • 数据不一致的可能性。

正如我们已经讨论的那样,在大多数情况下,单主复制就足够了,强烈建议这样做,但是在某些情况下,仍然需要多主复制。PostgreSQL具有内置的单主复制,但不幸的是,PostgreSQL主版本中没有多主复制。有一些可用的多主复制解决方案,其中一些以应用程序的形式出现,而有些则是PostgreSQL分支。这些派生有其自己的小型社区,并且大多由单个公司管理,而不由PostgreSQL国际社区管理。

这些解决方案有多种类别,包括开放源/封闭源,优先级,免费和付费。

  • BDR(双向复制)
  • xDB
  • PostgreSQL-XL
  • PostgreSQL-XC / PostgreSQL-XC2
  • Rubyrep
  • Bucardo

这是所有复制解决方案的一些关键功能

1.BDR(双向复制)
BDR是多主复制解决方案,并且具有不同的版本。BDR的早期版本是开放源代码,但其最新版本是封闭源代码。这个解决方案是由2ndQuadrant开发的,也是迄今为止最优雅的多主解决方案之一。BDR提供异步多主逻辑复制。这基于PostgreSQL逻辑解码功能。 由于BDR应用实质上是在其他节点上重播事务,因此如果正在应用的事务与在接收节点上提交的事务之间存在冲突,则重播操作可能会失败。

2.xDB
EnterpriseDB用Java开发了自己的双向复制解决方案,称为xDB。它基于自己的协议。因为它是一个封闭源代码的解决方案,所以没有设计信息为外界所知。

  • 由EnterpriseDB开发和维护。
  • 用Java开发。
  • 源代码是封闭源代码。
  • xDB Replication Server包含多个可执行程序。
  • 这是一个完全封闭源代码的专有软件。
  • 用Java开发,大家会抱怨它的性能。
  • 故障转移时间是不可接受的。
  • 用户界面可用于配置和维护复制系统。

3.PostgreSQL XC / XC2
PostgreSQL-XC由EnterpriseDB和NTT开发。它是一个同步复制解决方案。Postgres-XC是一个开源项目,旨在提供可写扩展、同步、对称和透明的PostgreSQL集群解决方案。多年来,我从未在EnterpriseDB和NTT上看到PostgreSQL-XC的大量开发。目前,华为正在为此努力。对于OLAP,已经报告了一些性能提升,但不适用于TPS。

4.PostgreSQL XL
它是PostgreSQL-XC的一个分支,目前受2ndQuadrant支持。它会落后于社区 PostgreSQL的版本迭代。据了解,它基于PostgreSQL 10.6,它与PostgreSQL最新版本PostgreSQL-12不兼容。我们知道它是基于PostgreSQL-XC的,当我们谈论OLAP时,它非常好,但不太适合高TPS。

注意:所有PostgreSQL XC / XC2 / XL都被认为是“ PostgreSQL衍生软件”,与PostgreSQL的当前开发没有同步。

5.Rubyrep
它是阿恩.特莱曼(Arndt Lehmann)开发的异步主/主复制。它声称具有最简单的配置特征,并且可以跨平台(包括Windows)运行。它始终在两台服务器上运行,在Rubyrep术语中分别称为“左”和“右”。因此,将其称为“2-master”设置而不是“ multi-master”会更符合其特点。

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

注意:–就开发而言,该项目在过去三年中一直没有开展。

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

  • 基于触发器的复制
  • 有解决冲突策略
  • 对Perl 5,DBI,DBD :: Pg,DBIx :: Safe的依赖。
  • 安装和配置很复杂。
  • 复制经常中断并且出现错误。

结论

单主机复制的大多数情况就足够了,并且已经观察到人们正在配置多主机复制并使他们的设计过于复杂。强烈建议设计系统,并尝试避免多主复制,而仅在没有其他方法的情况下使用它。原因有两个:第一,它使系统过于复杂且难以调试;第二,由于没有可用的社区维护的多主复制,因此您将无法从PostgreSQL社区获得支持。

原文链接:
https://www.percona.com/blog/2020/06/09/multi-master-replication-solutions-for-postgresql/

更多精彩内容,请关注以下平台、网站:

中国Postgre SQL分会官方公众号(技术文章、技术活动):
开源软件联盟PostgreSQL分会

中国Postgre SQL分会技术问答社区:
www.pgfans.cn

中国Postgre SQL分会官方网站:
www.postgresqlchina.com

PostgreSQL高可用:多主复制解决方案相关推荐

  1. PostgreSQL的高可用与数据复制方案

    2019独角兽企业重金招聘Python工程师标准>>> PostgreSQL是开源的,有多种高可用与数据复制方案,这里做个简单的比较. 一.高可用性.负载均衡.复制方案 共享磁盘失效 ...

  2. PostgreSQL高可用集群在360的落地实战

    本文主要从以下几个方面介绍PostgreSQL高可用集群在360的落地实战 为什么选择Patroni + Etcd + PostgreSQL高可用集群方案 PostgreSQL高可用集群在360的落地 ...

  3. postgresql高可用_Postgresql高可用实现方案

    本文主要讲解一种Postgresql高可用实现方案.由于项目需要,我们需要在短时间实现底层Postgresql DB的高可用,而网络上大多数的解决方案比较复杂,需要深入了解Postgresql. 背景 ...

  4. POSTGRESQL 高可用 Patroni VS Repmgr 到底哪家强(1)

    在众多postgresql 高可用模式中,主要的参与者有两位, Patroni VS repmgr 基于这二者的功能优点以及缺点相信大部分人都不是太明确,下面将根据两篇翻译的文字合并,来对两个高可用的 ...

  5. PostgreSQL高可用(二)使用pgpool实现主从切换+读写分离

    文章目录 1主从流复制 1.1 主机分配 2主从切换 2.1 手动切换 2.2 pgpool 自动切换 2.2.1 解压编译安装 2.2.2 添加环境变量 2.2.3 配置pool_hba.conf ...

  6. keep老是显示服务器开小差,nginx+keepalived高可用服务器宕机解决方案

    原标题:nginx+keepalived高可用服务器宕机解决方案 1.基本服务器宕机的主从切换配置 两台nginx服务器,分别安装keepalived,配置/etc/keepalived/keepal ...

  7. 基于heartbeat v1配置mysql和httpd的高可用双主模型

    一.配置高可用集群的前提:(以两节点的heartbeat为例) ⑴时间必须保持同步 ⑵节点之间必须用名称互相通信 建议使用/etc/hosts,而不要用DNS 集群中使用的主机名为`uname -n` ...

  8. PostgreSQL高可用(三)解决pgpool的单点问题

    文章目录 主机分配 PGPOOL高可用,解决单点问题 1 图例 2 看门狗简介 3 启动/停止看门狗 4 配置看门狗 (pgpool.conf) 4.1 基本配置 4.1.1 启用 4.1.2到前端服 ...

  9. 用Keepalived实现PostgreSQL高可用

    点击上方"蓝字" 关注我们,享更多干货! 一.Keepalived工作原理 Keepalived可提供VRRP以及health-check功能,可以只用它提供双机浮动的vip(VR ...

最新文章

  1. HDU 5785 interesting
  2. 具体数学第二版第三章习题(2)
  3. 简单多进程任务处理程序
  4. flutter友盟分享_flutter中友盟插件开发使用
  5. 产品运营实战系列-产品设计从0到1全流程:以优惠券为例
  6. React开发(284):注意点击事件大小写
  7. 带你认识大模型训练关键算法:分布式训练Allreduce算法
  8. 随记(五)--上传图片耗时问题
  9. ※部分VB文章汇总C※
  10. Linux 中动态链接库的版本号以及ldconfig
  11. ros2 topic 源码解析
  12. Day03 开始学Response
  13. Antd如何在label里增加icon图标
  14. 上海税务局发布2023年第1号文件,全电发票开票试点即将全面扩围!
  15. hasnext() java_java中Scanner的hasNext()的疑问
  16. 新海诚画集[秒速5センチメートル:樱花抄·铁道]
  17. Metasploit 渗透测试02-安装和疑难解决
  18. 搜狗输入法不能输入中文,shift切换为中文输出的还是英文--------解决方法
  19. 手把手教你向国际知名翻译公司Transperfect投递简历
  20. 2023暑期实习历程总结

热门文章

  1. 百万荐才奖励,2022年武汉市“3551荐才企业名录”申报条件以及奖励补贴政策汇总
  2. 硕思闪客巫师v4.1.70209+注册码【目前是最高版本】
  3. 大华sdk对接php,大华网络摄像机SDK对接
  4. HJ77 火车进站(不会,重点复习)
  5. Nacos系列3---源码刨析naming服务的server列表核心管理类ServerListManager
  6. 什么是专利权?专利有多少种类?
  7. CSDN写博客时的代码片格式设置
  8. 深入理解HBase的系统架构
  9. SpringBoot系列(三)----某程序猿竟然因为“日志”问题一夜秃头
  10. 即时与及时有什么区别_仙剑奇侠传6即时制与回合制有什么区别 怎么切换回合制...