Mar*_*ijn 3 postgresql replication monitoring
我们正在设置一个主站和一个(只读)从站的流式复制。我们现在正在寻找一种方法来监控复制;主要是为了验证从服务器是否仍然是最新的。
是否有可能做到这一点——最好是从奴隶?如果是这样,如何?
在支持 keepalive 套接字选项的系统上,设置tcp_keepalives_idle、tcp_keepalives_interval和tcp_keepalives_count有助于主节点及时发现连接断开。
在这种情况下,“及时通知”是什么意思?是否有一些错误日志报告连接断开?
我们现在正在寻找一种方法来监控复制;主要是为了验证从服务器是否仍然是最新的。
对于监控副本滞后,有几种方法会给出略有不同的答案,具体取决于您使用的 Postgres 版本。一个可以直接在备用数据库上完成的简单查询是:
SELECT (CASE WHEN pg_last_xlog_receive_location() = pg_last_xlog_replay_location()
THEN 0
ELSE EXTRACT (EPOCH FROM now() - pg_last_xact_replay_timestamp())
END) AS log_delay;
Run Code Online (Sandbox Code Playgroud)
请注意,在与主服务器的连接已被切断的情况下,此检查不会报告“延迟”,因为对接收和应用的 XLOG 段之间的差异的检查不知道尚未接收到的 XLOG 段的任何信息 - - 对主要的其他检查pg_stat_replication
也可能有帮助,例如参见此处。
在这种情况下,“及时通知”是什么意思?
在这种情况下,“及时通知”是指在 TCP 客户端(即备用服务器)注意到它与另一端的连接已被切断之前可能或必须经过多长时间。(我认为文档在这里真的应该说“帮助备用”而不是“帮助主”,因为备用必须检测断开的连接并重新建立到主的新连接。)
另请参阅此相关问题,讨论 keepalive 设置如何影响此时间。
是否有一些错误日志报告连接断开?
我相信当 SR 连接被删除或重新建立时,您会在主端和备用端的 postmaster 日志中看到消息(特别是如果您有log_connections
/log_disconnections
启用)。