我想知道是否存在允许从从设备和主设备读取数据的任何复制模式,并且保证在任何时间主设备与从设备完全同步,例如,事务在master上提交并且数据传递给slave之间没有任何延迟,因此从slave读取时不会丢失数据。
答案 0 :(得分:1)
这实际上很棘手,因为CAP theorem表示你不能保持一致性(你要求的是什么)和分区容忍度(如果网络出现故障,系统会保持运行)和可用性(整个系统仍然可用)
您必须通过在postgresql.conf
中设置synchronous_standby_names
并将synchronous_commit
设置为remote_apply
来启用同步复制,因此只有在其效果可见时才会提交事务待机状态。
如果强制所有这些节点保持同步,则当一个节点发生故障时整个系统将变为不可用。唯一的出路是拥有比你需要的节点更多的节点,但是你必须接受其中一些节点在特定时刻可能不一致。
此外,节点之间的网络延迟将直接影响提交率,因此请将节点放在一起,并在它们之间建立良好的网络。
流式复制主要是作为高可用性而非负载平衡的工具而设计的。