Postgresql HA 集群与 Patroni 的一致性如何?
我的理解是,由于故障转移使用共识(等或 zookeeper),系统将在网络分区下保持一致。
这是否意味着在可序列化隔离级别下运行的事务也将提供线性化。
如果不是,我将获得哪种一致性,顺序一致性,因果一致性..?
Postgresql HA 集群与 Patroni 的一致性如何?
我的理解是,由于故障转移使用共识(等或 zookeeper),系统将在网络分区下保持一致。
这是否意味着在可序列化隔离级别下运行的事务也将提供线性化。
如果不是,我将获得哪种一致性,顺序一致性,因果一致性..?
您不应该混淆主数据库和副本之间的一致性以及数据库内的一致性。
在 Patroni 集群中运行的 PostgreSQL 数据库是具有流式副本的普通数据库,因此它提供了流式复制的最终一致性(所有副本最终将显示与主副本相同的值)。
Serializabiliy 保证您可以在针对主数据库运行的数据库事务中建立顺序,以便按该顺序序列化执行的结果与实际工作负载相同。
如果我没看错定义,那与“线性化”是一样的。
由于只有 Patroni 集群中的一个节点可以写入(主节点),因此无论数据库是否在 Patroni 集群中,这都是正确的。
在分布式上下文中,我们有一个对象状态的多个副本,如果它们都在一个时间点同时更新,那么调度是线性化的。
写入完成后,任何副本的所有后续读取(挂钟时间)都应该看到该写入的值或稍后写入的值。
从 PostgreSQL 版本 9.6 开始,它可以有多个同步的备用节点。这意味着如果我们有 3 台服务器并使用 num_sync = 2,则主服务器将始终等待写入在 2 备用服务器上,然后再进行提交。
即使有故障转移,这也应该满足线性化调度的约束。
从Patroni 1.2 版开始,当同步模式启用时,Patroni 将自动故障转移到在主故障时同步复制的备用服务器。这实际上意味着在这种情况下不会丢失任何用户可见的事务。