共计 3886 个字符,预计需要花费 10 分钟才能阅读完成。
作者:伊布拉尔·艾哈迈德(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