Postgresql HA集群与Patroni的一致性是什么?

时间:2018-02-09 20:50:45

标签: postgresql apache-zookeeper database-replication high-availability etcd

Postgresql HA群集与Patroni的一致性是什么?

我的理解是,因为故障转移使用了共识(etc或zookeeper),系统将在网络分区下保持一致。

这是否意味着在可序列化隔离级别下运行的事务也将提供线性化。

如果没有哪种一致性,我会得到顺序一致性,因果一致性。?

2 个答案:

答案 0 :(得分:1)

您不应该混淆主数据库和副本服务器之间的一致性以及数据库中的一致性。

在Patroni集群中运行的PostgreSQL数据库是具有流复制副本的普通数据库,因此它提供了流复制的最终一致性(所有副本最终将显示与主数据库相同的值)。

Serializabiliy保证您可以在针对主数据库运行的数据库事务中建立一个订单,以便按顺序执行序列化执行的结果与实际工作负载相同。

如果我正确地阅读了这个定义,那就和“线性化”一样。

由于Patroni集群中只有一个节点可以写入(主节点),因此无论数据库是否在Patroni集群中都是如此。

答案 1 :(得分:0)

在分布式上下文中,我们有一个对象状态的多个副本,如果某个时间表就好像它们在一个时间点都是一次性更新那么可以进行线性化。

写入完成后,任何副本的所有后续读取(挂钟时间)都应该看到该写入的值或稍后写入的值。

由于PostgreSQL版本9.6可能有多个同步的standy节点。这意味着如果我们有3个服务器并且使用num_sync = 2,那么主服务器将始终等待写入在提交之前处于2待机状态。

即使进行故障转移,这也应该满足线性化调度的约束。

由于 Patroni版本1.2 ,启用同步模式后,Patroni将自动故障转移到主控失败时同步复制的备用数据库。 这实际上意味着在这种情况下没有用户可见的交易丢失