Postgresql
Patroni:如何處理與主伺服器長時間斷開連接的副本?
假設我在 Postgres 10.4 和 Patroni 1.4.4 的 3 節點集群中使用具有以下配置的非同步流複製
bootstrap: dcs: ttl: 30 loop_wait: 10 retry_timeout: 10 maximum_lag_on_failover: 1048576 postgresql: use_pg_rewind: true use_slots: true parameters: max_wal_senders: 10 wal_keep_segments: 100 max_replication_slots: 10
假設其中一個副本節點突然長時間失去與主節點的連接。
- 在這種情況下,我認為主伺服器上的 WAL 的大小將繼續增長,因為它沒有被斷開連接的副本的複制槽消耗。那麼,如果它在 x 時間段內與主伺服器斷開連接,是否有任何設置將刪除副本並刪除其複制槽?
- 處理這種情況的推薦方法是什麼?
我假設您正在監控您的數據庫集群執行狀況,因此很快就會出現失去的副本。此外,必須監視磁碟空間(用完磁碟空間可能會使您陷入不太容易解決的情況),因此也可以解決此問題(通常遲早)。
一旦你發現你有一個回退的副本,你必須調查它為什麼這樣做,並修復它 - 或者完全從 Patroni 中刪除主機。如果在磁碟空間壓力下,移除複製槽以釋放 WAL 空間。在雲設置中,通常只需終止主機即可通過啟動新主機來解決所有這些問題。在任何情況下,一旦您擁有一個正常執行的主機,您可能需要重新初始化 Patroni 節點。
另一方面,恐怕目前沒有機制來隔離似乎不會回來的副本(無論是從刪除複製槽到比這更複雜的任何實際實現)。