背景
逻辑复制槽(logical replication slot)是 PostgreSQL 中用于逻辑复制的机制,保证了逻辑订阅者能够从指定的 LSN(Log Sequence Number)开始接收变更数据,避免数据丢失。云数据库 PostgreSQL 通过自研内核能力实现 failover slot,用于高可用场景下的跨地域故障转移,保证主备切换时复制槽的连续性和数据一致性。具体功能介绍请参见 逻辑复制槽故障转移(Failover Slot)。
本文将说明 failover slot 的创建和使用步骤。
前提条件
处于同一 VPC 下的两个云数据库 PostgreSQL 实例,分别作为主节点和备节点。
两个实例大版本需一致,且均为11~16。
操作步骤
1、主节点创建 publication
登录主实例,执行以下命令,创建 publication。本示例中,publication 名称为 pub_1,需要发布的表为 table_1。
CREATE PUBLICATION pub_1 FOR TABLE table_1;
说明:
创建 slot 时,系统默认创建为 failover slot ,并在创建订阅时自动创建与 subscription 同名的 failover slot。具体说明请参见 创建 Failover slot 。
2、备节点创建订阅
登录备节点,依次执行以下命令,创建订阅。本示例中,subscription 的名称为 sub_1。
注意:
创建订阅之前,请确保备节点已经创建与 publication 所连接的 table_1 结构相同的表。
-- 创建订阅create subscription sub_1connection 'instanceid=postgres-***** host=*.*.*.* port=5432 dbname=database_name user=user_name password=****** access_type=1'publication pub_1;
命令中的参数说明如下:
instanceid:主实例的实例 ID ,可在控制台的实例列表获取。
host:主节点实例的内网 IP。
port:连接端口号,默认5432。
dbname:主实例发布的 publication 所在的数据库名称。
user:可在主实例所使用的用户名称。
password:可在主实例使用的账户密码。
access_type:取值为1,表示目标实例为 TencentDB 实例。
备库创建订阅后,failover slot 将在主备切换后自动转移到备节点,无需再配置 slot 跟随。
3、验证效果
检查复制槽状态
在主实例上执行:
SELECT slot_name, slot_type, activeFROM pg_replication_slotsWHERE slot_name = 'sub_1';
若 active 值为 true ,表示 failover slot 正在被使用。
检查数据同步
在主库插入数据后,在备库查询 table_1 ,能够看到新插入的数据,则 failover_slot 正常运行。
主备切换验证
在实例详情页单击主备切换,切换后在新主库上重复上述查询,查询结果与上述一致,则备库订阅依然正常,failover_slot 正常运行。
