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:关闭逻辑复制槽故障转移功能。