监控流复制

Mar*_*ijn 3 postgresql replication monitoring

我们正在设置一个主站和一个(只读)从站的流式复制。我们现在正在寻找一种方法来监控复制;主要是为了验证从服务器是否仍然是最新的。

是否有可能做到这一点——最好是从奴隶?如果是这样,如何?

关于流式复制文档提到了以下内容:

在支持 keepalive 套接字选项的系统上,设置tcp_keepalives_idletcp_keepalives_intervaltcp_keepalives_count有助于主节点及时发现连接断开。

在这种情况下,“及时通知”是什么意思?是否有一些错误日志报告连接断开?

Jos*_*idt 6

我们现在正在寻找一种方法来监控复制;主要是为了验证从服务器是否仍然是最新的。

对于监控副本滞后,有几种方法会给出略有不同的答案,具体取决于您使用的 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启用)。