我想知道是否有任何复制模式允许从从主服务器和从服务器上读取数据,并且是否保证在任何时间点主服务器与从服务器完全同步,例如,在主服务器上提交事务和将数据传送到从服务器之间没有任何延迟,这样从slave读取时就不会丢失数据。
最佳答案
这实际上是一个棘手的问题,因为CAP theorem表示您不能有一致性(您所要求的)以及分区容忍度(如果网络出现故障,系统将保持正常)和可用性(整个系统仍然可用)。
必须通过在synchronous_standby_names
中设置postgresql.conf
并将synchronous_commit
设置为remote_apply
来启用同步复制,因此只有当事务的效果在待机状态下可见时,才会提交事务。
如果强制所有这些节点保持同步,则当一个节点发生故障时,整个系统将变得不可用。唯一的解决方法是拥有比需要一致性的节点更多的节点,但随后必须接受其中一些节点在给定时刻可能不一致。
而且,节点之间的网络延迟会直接影响提交速率,所以把节点紧密地放在一起,使它们之间有一个良好的网络。
流式复制主要是作为一种工具来实现高可用性,而不是负载平衡。
关于postgresql - PostgreSQL复制-从从属读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49573443/