Postgresql
確保 PostgreSQL 9.x 熱備複製仍然正常執行的最方便的方法是什麼
假設我已經很好地設置了熱伺服器複製,那麼我可以定期採取的最簡單或最方便的步驟是什麼,以確保熱伺服器複製仍然正常工作並且應該如此。
我想
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_lsn
和pg_last_wal_replay_lsn
,因此上述名稱現在僅對 9.6 及更早版本有效。這些函式返回格式為
id/offset
whereid
和offset
是十六進制數字的字元串。要將它們轉換為 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)) }
從主伺服器上的值減去從伺服器上的值會得到複製延遲(以字節為單位)。