更新时间:2022-05-17 GMT+08:00
分享

逻辑订阅故障转移(Failover Slot)

使用场景

RDS for PostgreSQL的逻辑订阅故障转移(Failover Slot)功能用来将那些指定为failover slot的逻辑复制槽信息从主实例同步到备实例,当主备切换之后逻辑订阅能够继续进行,实现逻辑复制槽的故障转移。

当用户使用逻辑复制时,由于slot信息不会随着主备切换转移到新的主实例上,一旦实例发生主备切换,逻辑订阅就会断开,此时除非手动重新创建slot,否则逻辑订阅无法重新连接。RDS for PostgreSQL的Failover Slot功能可以将所有的logical slot从主实例同步到备实例,避免主备切换后逻辑订阅断开。

注意事项

  • 该功能针对RDS for PostgreSQL 12.6及以上的小版本、RDS for PostgreSQL 13的所有小版本。
  • 当前只支持logical slot的故障转移,physical slot暂不支持。
  • 该功能由于引入新的日志类型,因此一旦使用了该功能,通过备份文件恢复到新实例时,会保留旧的slot信息,恢复到新实例后需要手动删除slot信息。

使用方法

在发布端执行如下sql,创建一个failover slot:

SELECT * FROM pg_create_logical_replication_slot('slot1', 'pgoutput', false, true);

参数说明如下:

  • slot1表示logical slot的名称。
  • pgoutput表示plugin的名称。
  • 第三个参数(例如false)表示该slot是否为临时slot。
  • 第四个参数(例如true)表示该slot是否为failover slot。

因此,如果要创建一个failover slot,第三个参数必须为false,第四个参数必须为true。如果第四个参数省略不写,则创建的是非failover slot。

逻辑订阅完整使用示例

  • 发布端创建表

    create table t1(c1 int primary key, c2 int);

  • 发布端创建发布

    create publication pub1 for table t1;

  • 发布端创建一个failover slot

    SELECT * FROM pg_create_logical_replication_slot('slot1', 'pgoutput', false, true);

  • 发布端插入数据

    insert into t1 values(1,1);

    insert into t1 values(2,2);

  • 订阅端创建表

    create table t1(c1 int primary key, c2 int);

  • 订阅端创建订阅,指定创建的failover slot名称

    create subscription sub1 connection 'host=127.0.0.1 dbname=postgres user=postgres port=5438' publication pub1 with(create_slot=false,slot_name=slot1);

  • 订阅端查询数据,验证数据是否订阅到

    Select * from t1;

  • 主备切换

    发布端继续插入数据,在订阅端查看,逻辑订阅不会断开。

分享:

    相关文档

    相关产品

close