流复制使用两种常见的故障检测过程,不需要任何特别的硬件。
- 备库服务器的失效检测 当检测到walsender 和walreceiver 之间的连接断开时,主库立即 判定备库或walreceiver 进程出现故障。当底层网络函数由于未能成功读写walreceiver 的套接字接口而返回错误时,主库也会立即判定其失效。
- 硬件与网络的失效检测
如果walreceiver 在参数
wal_sender_timeout
(默认为60秒)配置的时间段内没有返回任何结果,则主库会判定备库出现故障。相对于上面的故障而言,尽管从库可能因为一些失效原因(例如备库上的硬件失效,网络失效等),已经无法发送任何响应,但主库仍需要耗费特定的时间 —— 最大为wal_sender_timeout
,来确认备库的死亡。
取决于失效的类型,一些失效可以在失效发生时被立即检测到,而有时候则可能在出现失效与检测到失效之间存在一段时间延迟。如果在同步从库上出现后一种失效,那么即使有多个潜在备库正常工作,直到检测到同步备库失效了,主库仍然可能会停止一段时间的事务处理。
在9.2或更早版本中,参数
wal_sender_timeout
被称为replication_timeout
。