华为云云数据库rds逻辑订阅故障转移(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:

表1 命令及参数说明

版本

命令

参数说明

PostgreSQL12和PostgreSQL13版本

SELECT * FROM pg_create_logical_replication_slot(slotname, pgoutput, false, true);

slotname表示logical slot的名称。
pgoutput表示plugin的名称,也可以更改为其他支持的插件。
第三个参数(例如false),表示该slot是否为临时slot。
第四个参数(例如true),表示该slot是否为Failover Slot。

PostgreSQL14及以上版本

SELECT * FROM pg_create_logical_replication_slot(‘slotname, pgoutput, false, false, true);

slotname表示logical slot的名称。
pgoutput表示plugin的名称,也可以更改为其他支持的插件。
第三个参数(例如false),表示该slot是否为临时slot。
第四个参数(例如true),表示是否启动两阶段提交选项。
第五个参数(例如true),表示该复制槽是否为Failover slot。

因此,如果要创建一个Failover Slot,在第三个参数临时slot字段必须为false,最后一个参数必须为true。如果最后一个参数省略不写,则创建的是非Failover Slot。

查看方法

在发布端执行如下SQL,查询当前数据库的复制槽信息。

select * from pg_get_replication_slots();

查看“failover”字段,如果值为“true”,表示该复制槽为Failover Slot。
如果没有“failover”字段或该字段值为“false”,说明该复制槽不是Failover Slot。

逻辑订阅完整使用示例

发布端创建表

create table tableName(id int primary key, num int);

发布端创建发布

create publication pubName for table tableName;

发布端创建一个Failover Slot(若为PostgreSQL12或13版本,则去掉第四个参数false)

SELECT * FROM pg_create_logical_replication_slot(‘slotname’, ‘pgoutput’, false, false, true);

发布端插入数据

insert into tableName values(1,1);

insert into tableName values(2,2);

订阅端创建表

create table tableName (id int primary key, num int);

订阅端创建订阅,指定创建的Failover Slot名称

create subscription subName connection ‘host=192.168.0.10 dbname=postgres user=root port=5432 password=xxxxxxx‘ publication pubName with(copy_data=true,create_slot=false,slot_name= slotname);

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

select * from tableName;

主备切换

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

父主题: 主要内核功能介绍

同意关联代理商云淘科技,购买华为云产品更优惠(QQ 78315851)

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家