小编Сте*_*лић的帖子

PostgreSQL同步复制一致性

如果我们比较多种类型的复制(单领导者、多领导者或无领导者),单领导者复制有可能是线性化的。在我的理解中,线性化意味着一旦写入完成,所有后续读取都应返回该值或后续写入的值。或者说,只有一个数据库应该有印象,但没有更多。所以我想,没有陈旧的阅读。

PostgreSQL 在其流复制中,能够使用 使其所有副本同步synchronous_standby_names,并且还能够使用该synchronous_commit选项进行微调,可以将其设置为remote_apply,因此领导者会等待,直到事务在备用数据库上重播(使其对查询可见)。在文档中,在讨论 remote_apply 选项的段落中,它指出这允许在简单情况下实现负载平衡并具有因果一致性。

前几页,它是这么说的:

,,一些解决方案是同步的,这意味着在所有服务器都提交了数据修改事务之前,该事务不会被视为已提交。这保证了故障转移不会丢失任何数据,并且无论查询哪个服务器,所有负载平衡的服务器都将返回一致的结果,

因此,我很难理解如果我们将读取查询负载平衡到只读副本,可以保证什么,以及会发生什么异常情况。还会有陈旧的读吗?当我查询不同的副本以获得不同的结果时,即使在领导者上发生后没有写入,也会发生这种情况吗?我的印象是肯定的,但我不太确定。如果不是,PostgreSQL 如何防止过时读取?我没有找到任何关于它如何在引擎盖下完全工作的更多细节。它是否使用两阶段提交或对其进行某种修改,或者使用其他算法来防止过时读取?

如果它不提供无陈旧读取的选项,有没有办法实现这一点?我看到,PgPool 必须选择对落后于不超过定义阈值的副本进行负载平衡,但我不明白是否可以将其定义为对与领导者一致的副本进行负载平衡。

我真的很困惑如何真正理解 PostgreSQL 中的完全同步复制是否会发生异常。

我知道这样的设置存在可用性问题,但现在这不是问题。

postgresql replication pgpool

6
推荐指数
1
解决办法
3049
查看次数

标签 统计

pgpool ×1

postgresql ×1

replication ×1