PolarDB PostgreSQL版(兼容Oracle)的邏輯復制槽故障轉移(Logical Replication Slot Failover)功能可以將所有的邏輯復制槽從主實例同步到備實例,從而實現邏輯復制槽的故障轉移。

背景信息

在主實例創建的Replication Slot,不會通過流復制協議同步到備實例。當實例發生主備切換,會造成Replication Slot丟失,進而導致邏輯訂閱中斷。PolarDB PostgreSQL版(兼容Oracle)邏輯復制槽故障轉移功能可以將所有的邏輯復制槽從主實例同步到備實例,實現邏輯復制槽的故障轉移。

說明
  • PolarDB PostgreSQL版(兼容Oracle)當前只支持邏輯復制槽(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:關閉邏輯復制槽故障轉移功能。