gpt4 book ai didi

PostgreSQL 同步复制一致性

转载 作者:行者123 更新时间:2023-12-04 08:58:15 38 4
gpt4 key购买 nike

如果我们比较多种类型的复制(Single-leader、Multi-leader 或 Leaderless),Single-leader 复制就有可能是 Linearizable。在我的理解中,线性化意味着一旦写入完成,所有后续读取都应返回该值,或稍后写入的值。或者换句话说,如果只有一个数据库,但没有更多,应该会有一个印象。所以我想,没有陈旧的读物。
PostgreSQL 在他的流式复制中,能够使用 synchronous_standby_names 使其所有副本同步。并且它还具有与 synchronous_commit 进行微调的能力选项,可以设置为 remote_apply ,所以领导者一直等到事务在备用服务器上重放(使其对查询可见)。在 documentation ,在谈到 remote_apply 选项的段落中,它指出这允许在具有因果一致性的简单情况下进行负载平衡。
几页后,它说this :
,,一些解决方案是同步的,这意味着在所有服务器都提交事务之前,不会认为数据修改事务已提交。这保证了故障转移不会丢失任何数据,并且无论查询哪个服务器,所有负载平衡的服务器都将返回一致的结果,
所以我很难理解可以保证什么,以及如果我们将读取查询负载平衡到只读副本会发生什么异常。仍然可以有过时的读取吗?当我查询不同的副本以获得不同的结果时,甚至在领导者发生后没有写入时会发生这种情况吗?我的印象是肯定的,但我不确定。
如果不是,PostgreSQL 如何防止过时读取?我没有找到任何关于它如何在引擎盖下完全工作的详细信息。它是使用两阶段提交,还是对其进行一些修改,还是使用其他算法来防止过时读取?
如果它不提供无过时读取的选项,有没有办法做到这一点?我看到,PgPool 必须选择对不超过定义阈值的副本进行负载平衡,但我不明白是否可以将其定义为对与领导者一致的副本进行负载平衡。
真正理解在 PostgreSQL 的完全同步复制中是否会发生异常,我真的很困惑。
我知道这样的设置存在可用性问题,但现在不必担心。

最佳答案

如果您将同步复制与 synchronous_commit = remote_apply 一起使用,您可以确定,一旦提交修改事务,您就会在备用数据库上看到修改后的数据。
同步复制不使用两阶段提交,主服务器先在本地提交,然后在COMMIT之前简单地等待同步备用服务器的反馈。返回。所以以下是可能的:

  • 观察者将在 COMMIT 之前看到主节点上修改后的数据返回,并且在数据传播到备用数据库之前。
  • 观察者将在 COMMIT 之前看到备用数据库上的修改数据。在主要返回上。
  • 如果提交事务在 COMMIT 之前的适当时刻在主服务器上中断返回,事务将仅在主 上提交.在服务器上发生提交和向客户端报告的时间之间总是有一个特定的时间窗口,但该窗口随着流式复制而显着增加。
    但最终,数据修改将始终发送到备用数据库。
  • 关于PostgreSQL 同步复制一致性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63700820/

    38 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com