Failover Slot功能可以将所有的logical slot从主实例同步到备实例,从而实现logical slot的故障转移。

背景信息

使用逻辑订阅时如果不开启Failover Slot功能,当实例发生主备切换,逻辑订阅就会断开,因为slot不会随着主备切换转移到新主库上,除非手动重新创建slot,否则逻辑订阅无法重新连接。Failover Slot功能可以将所有的logical slot从主实例同步到备实例,避免逻辑订阅断开。

说明 当前只支持logical slot的故障转移,physical slot暂不支持。

通过设置参数rds_failover_slot_mode(即时生效,无需重启实例)可以使用Failover Slot功能,取值如下:

  • sync:同步模式
  • async:异步模式
  • off:关闭

如何设置参数请参见设置实例参数

关于两种模式的详细说明请参见下文。

同步模式

同步模式可以尽量保证主备切换后逻辑订阅不丢失数据,但是极端情况会发生逻辑订阅的数据丢失。

如果备实例长时间断开连接,或者备实例重搭,则会导致这段时间内主备延迟较大,如果这时候发生主备切换,不能保证逻辑订阅不丢失数据。此时丢失的数据,除了主备切换本身造成的数据丢失外,还可能会丢失主备切换后新主实例上新增的部分数据。

想要避免这种极端情况,可以设置参数rds_priority_replication_force_waiton(默认为off),修改该参数即时生效,无需重启实例。设置后,在备实例长时间断开连接,或者备实例重搭等情况时,主实例会一直等待备实例重新连接或者重搭完成,在此之前不会发送数据给逻辑订阅客户端,但是这样会降低逻辑订阅的可用性,不推荐这样操作。

异步模式

异步模式可以保证实例主备切换后,逻辑订阅不丢失数据,但是可能会给逻辑订阅客户端发送重复数据。

除非您可以接受异步模式时可能存在的数据不一致问题,否则推荐使用同步模式。