逻辑复制槽故障转移(Logical Replication Slot Failover)

PolarDB PostgreSQL的逻辑复制槽故障转移(Logical Replication Slot Failover)功能可以将所有的逻辑复制槽从主节点同步到Standby节点,从而实现逻辑复制槽的故障转移。

前提条件

支持的PolarDB PostgreSQL的版本如下:

PostgreSQL 11(内核小版本1.1.27及以上)

说明

您可以通过SHOW polar_version查看内核小版本。如未满足版本要求请升级版本

背景信息

在主节点创建的Replication Slot,不会通过流复制协议同步到Standby节点。当集群发生主备切换,会造成Replication Slot丢失,进而导致逻辑订阅中断。PolarDB PostgreSQL逻辑复制槽故障转移功能可以将所有的逻辑复制槽从主节点同步到Standby节点,实现逻辑复制槽的故障转移。

说明
  • PolarDB PostgreSQL当前只支持逻辑复制槽(Logical Replication Slot)的故障转移,物理复制槽(Physical Replication Slot)暂不支持。

  • 逻辑复制槽(Logical Replication Slot)的更多信息,请参见官方文档

开启或关闭逻辑复制槽故障转移功能

您可通过控制台设置集群参数polar_failover_slot_mode来开启或关闭逻辑复制槽故障转移功能。取值如下:

  • sync:开启逻辑复制槽故障转移功能,并设置为同步模式。

    说明
    • 同步模式可以保证集群HA后,逻辑复制不丢数据。

    • 同步模式通过保证逻辑复制客户端不会超前于Standby节点,来保证HA后逻辑复制不丢数据。如果发生Standby节点长时间断开连接后重新连接,或者重搭,则会存在一定的时间窗口,在这段时间内,主备之间延迟比较大,且逻辑复制客户端可能会超前于Standby节点。如果此时发生HA,无法保证逻辑复制不丢数据。此时丢失的数据,除了HA本身造成的数据丢失外,还可能会丢失HA后新主库上新增的部分数据。

      为避免上述数据丢失的情况,可联系我们设置polar_priority_replication_force_wait参数为on。Standby节点断开期间,主节点会一直等待节点重新连接或者重搭完成,在此之前不会发送数据给逻辑复制客户端。这样会降低逻辑复制的可用性,请谨慎操作。

  • async(默认):开启逻辑复制槽故障转移功能,并设置为异步模式。

    说明
    • 异步模式,可以保证集群HA后,逻辑复制不丢数据。但是有可能会给逻辑复制客户端发送重复的数据。如果集群HA后逻辑复制客户端超前于新主节点,则逻辑复制客户端上还可能保留有集群HA时丢失的数据(如果HA时有数据丢失)。

    • 除非您可以接受异步模式下,HA后可能带来的数据不一致问题,否则推荐使用同步模式。

  • off:关闭逻辑复制槽故障转移功能。