PolarDB PostgreSQL版的邏輯複製槽容錯移轉(Logical Replication Slot Failover)功能可以將所有的邏輯複製槽從主執行個體同步到備執行個體,從而實現邏輯複製槽的容錯移轉。
前提條件
支援的PolarDB PostgreSQL版的版本如下:
PostgreSQL 11(核心小版本1.1.27及以上)
您可通過如下語句查看PolarDB PostgreSQL版的核心小版本的版本號碼:
show polar_version;
背景資訊
在主執行個體建立的Replication Slot,不會通過流複製協議同步到備執行個體。當執行個體發生主備切換,會造成Replication Slot丟失,進而導致邏輯訂閱中斷。PolarDB PostgreSQL版邏輯複製槽容錯移轉功能可以將所有的邏輯複製槽從主執行個體同步到備執行個體,實現邏輯複製槽的容錯移轉。
PolarDB PostgreSQL版當前只支援邏輯複製槽(Logical Replication Slot)的容錯移轉,物理複製槽(Physical Replication Slot)暫不支援。
邏輯複製槽(Logical Replication Slot)的更多資訊,請參見官方文檔。
開啟或關閉邏輯複製槽容錯移轉功能
通過設定參數polar_failover_slot_mode參數來開啟或關閉邏輯複製槽容錯移轉功能。取值如下:
sync:開啟邏輯複製槽容錯移轉功能,並設定為同步模式。
說明同步模式可以保證執行個體HA後,邏輯複製不丟資料。
同步模式通過保證邏輯複製client不會超前於備庫,來保證HA後邏輯複製不丟資料。如果發生備庫長時間中斷連線後重新串連,或者備庫重搭,則會存在一定的時間視窗,在這段時間內,主備之間延遲比較大,且邏輯複製client可能會超前於備庫。如果此時發生HA,無法保證邏輯複製不丟資料。此時丟失的資料,除了HA本身造成的資料丟失外,還可能會丟失HA後新主庫上新增的部分資料。
為避免上述資料丟失的情況,可以將polar_priority_replication_force_wait參數設定為on。備庫斷開期間,主庫會一直等待備庫重新串連或者重搭完成,在此之前不會發送資料給client。這樣會降低邏輯複製的可用性,請謹慎操作。
async(預設):開啟邏輯複製槽容錯移轉功能,並設定為非同步模式。
說明非同步模式,可以保證執行個體HA後,邏輯複製不丟資料。但是有可能會給client發送重複的資料。如果執行個體HA後client超前於新主庫,則client上還可能保留有執行個體HA時丟失的資料(如果HA時有資料丟失)。
除非您可以接受非同步模式下,HA後可能帶來的資料不一致問題,否則推薦使用同步模式。
off:關閉邏輯複製槽容錯移轉功能。