Postgresql

確保 PostgreSQL 9.x 熱備複製仍然正常執行的最方便的方法是什麼

  • September 9, 2019

假設我已經很好地設置了熱伺服器複製,那麼我可以定期採取的最簡單或最方便的步驟是什麼,以確保熱伺服器複製仍然正常工作並且應該如此。

我想SELECT txid_current_snapshot();在兩台伺服器上進行比較。txid如果 2 s 匹配,那麼假設複製工作正常是否足夠好和安全?

PostgreSQL 的 wiki 在其關於流複製的頁面上有以下資訊:

您可以通過比較主伺服器上的目前 WAL 寫入位置與備用伺服器接收/重放的最後一個 WAL 位置來計算複製延遲。它們可以分別使用 主數據庫上的 pg_current_xlog_location和備用數據庫上的****pg_last_xlog_receive_location / pg_last_xlog_replay_location來檢索。

在 PostgreSQL 版本 10 中,這些函式已重命名為 pg_current_wal_lsn,pg_last_wal_receive_lsnpg_last_wal_replay_lsn,因此上述名稱現在僅對 9.6 及更早版本有效。

這些函式返回格式為id/offsetwhereidoffset是十六進制數字的字元串。要將它們轉換為 64 位數字以進行比較,您可以使用這個公式,取自check_postgres Nagios 外掛:

0xff000000 * from_hex(id) + from_hex(offset)

在 bash 腳本中,可以使用以下函式來完成:

xlog_location_to_64bits()
{
 id="${1%%/*}"
 offset="${1##*/}"
 echo $((0xFF000000 * 0x$id + 0x$offset))
}

從主伺服器上的值減去從伺服器上的值會得到複製延遲(以字節為單位)。

引用自:https://serverfault.com/questions/473090