PostgreSQL和BDR:BDR确实是多主设备吗?它是2019年的1.x版开源和EOL吗?

Ted*_*Ted 10 postgresql postgresql-bdr postgres-bdr

我对PostgreSQL BDR感到困惑,我有几个问题:

问题1:BDR是否真的是PostgreSQL的多主服务器?

根据此处的文档,它表示:

BDR(双向复制)项目将多主复制添加到PostgreSQL 9.4

但是,如果我在2ndQuadrant上阅读,则会阅读以下内容:

在此处输入图片说明

如果我读那部分,他们根本不会提到多主机。只是一个“第二主人,被动工作”,这表明它不是真正的主人?

问题2:BDR是开源的吗?

在这里读到的是,至少是:

BDR是PostgreSQL的第一个开源多主复制系统

还在吗 因为当我看时,我经常被引导到2ndQuadrants网页,当他们说:

如何获得Postgres-BDR?

只需填写下面的联系表格,PostgreSQL专家很快就会与您联系!

听起来像是卖给我=)

问题3:什么版本?

读到2ndQuadrant在今年3月发布了 1.0.5 。我也读2ndQuadrants网页

在复杂的复制环境中,第三代BDR实现了...

第三代?版本1.0.5是同一个第三代,还是其他?

此外,同一页上还显示:

当前Postgres-BDR用户的注意事项:BDR 1.x将于2019年12月到期。我们的PostgreSQL专家团队可以帮助计划和执行升级,而影响最小,停机时间几乎为零。立即与我们联系,我们专业服务团队的成员将尽快与您联系。

因此,1.0.5在3月发布,但EOL在2019年12月发布?2.x不是开源的,因此与之相关的一些许可证成本,而1.x是EOL 2019?

Ted*_*Ted 7

我通过电子邮件收到了 2ndQuadrant 的答复,因此我将其发布在这里,因为它解决了上述问题:

1-》BDR 是真正的master-master;shadow master 仍然是master。BDR 是最终一致的多master 解决方案;在最终一致的多master 集群中,可以同时写入多个master,并且同一行同时写入可能会产生冲突 冲突是否可以接受取决于应用程序的逻辑模型 有些人不需要同时在两个节点上写入 只会使用 BDR实现更快的故障转移,就像在我们的 BDR-AlwaysOn 架构中一样。其他人需要在两个节点上写入,在这种情况下,我们需要评估冲突的影响和可能性。”

2- BDR 1.x 是开源的 ( http://bdr-project.org/docs/stable/ )。包括 BDR3 在内的更高版本仅适用于 2ndQuadrant 生产支持客户。很高兴能更详细地讨论这个问题。你是对的,这听起来确实像在销售,我们是一家企业 :)

3-最新版本是BDR3,这是BDR的第三代。它仍然有效,但仅对支持客户可用。

1.x 是开源的,但正如你提到的那样 EOL。


Cra*_*ger 6

BDR1是开源的。BDR2不是。BDR3还没有,但是应该在以后的某个阶段变得如此。

BDR是真正的多主机。“ AlwaysOn体系结构”是用于BDR部署的简化模型,该模型使用具有快速故障转移功能的主动/备用模式,旨在保留与现有应用程序的更好兼容性,同时提高HA和健壮性。

因此BDR可以而且经常以完全多主角色的身份进行部署,AlwaysOn体系结构只是不以这种方式使用它。


PostgreSQL 9.4的BDR 1.x系列(+ BDR补丁)是开源的。它将在2019年12月上线EoL。它工作正常,但鉴于计划中的EoL,我不建议在新部署中使用它。

BDR 2.x系列(对于PostgreSQL 9.6)不是开源的,仅适用于2ndQuadrant客户。但是,部分内容已提交给PostgreSQL本身。它已被BDR 3.x取代。

目前正在投入生产的BDR 3.x系列目前尚未开源,仅对2ndQuadrant客户可用。我的理解是,它打算最终开放源代码发布,但尚未确定日期,因此我无法为2ndQuadrant正式发言。BDR3添加了更强大的节点通信模型,更好的冲突处理等等,并且可以在PostgreSQL 10和11上运行。

我一直在鼓励有关人员就这些问题提供一些最新的官方指导。我现在为您提供的最新信息是2ndQuadrant博客上的“ BDR(多主PostgreSQL)新闻和路线图”

  • @Ted Galera 会受到冲突和异常的影响。更仔细地阅读手册。PACELC 定理(比 CAP 更有用的公式)在这方面相当清楚。您可以获得可用性或一致性,选择一个。供应商使用各种措辞和技巧来解决这个问题,但物理学和光速对此非常坚持。不同的系统有不同的妥协和权衡,是的,有些系统有切换模式的方法,但从根本上说,您的应用程序*必须*容忍冲突,否则在节点关闭时它*不能*保持可写状态。 (3认同)