南大通用GBase 8c逻辑复制槽实践解析

25 阅读3分钟

原文链接:www.gbase.cn/community/p…
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。

GBase 8c的逻辑复制槽功能是实现实时数据复制的核心组件,它通过解析事务日志(xlog)生成逻辑变更流,为异构数据库同步提供基础支持。逻辑复制槽代表一个数据更改流,确保事务按原始顺序在目标端重放。它主要作用是防止所需的事务日志被系统回收,为逻辑解码提供稳定的日志源。

核心特性

事务级解码:以事务为单位输出逻辑日志,仅在事务提交后解码

异构数据库支持:降低对目标数据库形态限制,支持同构/异构数据库同步

实时低延迟:支持目标库同步期间可读写,同步时延较低

使用前提

设置GUC参数:

 wal_level = logical  

 max_replication_slots > (物理流复制槽数 + 逻辑复制槽数)

 ssl = on  (建议启用SSL保障安全)

操作权限:仅限初始用户和拥有REPLICATION权限的用户操作

操作方法

  • pg_create_logical_replication_slot('slot_name', 'plugin_name')

备注:第一个返回值表示slot_name,第二个返回值表示该逻辑复制槽解码的起始LSN位置。调用该函数的用户需要具有SYSADMIN权限或具有REPLICATION权限或继承了内置角色gs_role_replication的权限。此函数目前只支持在主机调用。

select pg_create_logical_replication_slot('test_slot', 'wal2json');

查看逻辑复制槽信息。

select * from pg_replication_slots;

往测试表里插入数据。

create table t1 (id int, c1 varchar(100));
insert into t1 select generate_series(1,100), md5(random()::text);

选择解码不推进复制槽,查询CDC数据。从结果来看可以清楚的知道数据变动,执行的是insert,插入的值也有展示。

  • pg_logical_slot_peek_changes('slot_name', 'LSN', upto_nchanges, 'options_name', 'options_value')

解码并不推进流复制槽(下次解码可以再次获取本次解出的数据)。

select data from pg_logical_slot_peek_changes('test_slot', null, null, 'pretty-print', '1');

此时查看逻辑复制槽信息。会发现confirmed_flush和restart_lsn并没有改变。这是因为执行的pg_logical_slot_peek_changes只是解码了复制槽,而没有推进复制槽。

接下来选择解码并推进复制槽。

  • pg_logical_slot_get_changes('slot_name', 'LSN', upto_nchanges, 'options_name', 'options_value')

备注:调用该函数的用户需要具有SYSADMIN权限或具有REPLICATION权限或继承了内置角色gs_role_replication的权限。此函数目前只支持在主机调用。

select data from pg_logical_slot_get_changes('test_slot', null, null, 'pretty-print', '1');

再次查看复制槽信息。会发现confirmed_flush和restart_lsn都放生了变化。confirmed_flush表示的是订阅端已经成功消费到该LSN的所有日志,restart_lsn表示的是逻辑复制槽从哪里重新开始读取 WAL 数据。

如果想要直接推进流复制槽到指定LSN,不输出解码结果,可以执行pg_replication_slot_advance。

  • pg_replication_slot_advance ('slot_name', 'LSN')

备注:返回值分别对应slot_name和实际推进至的LSN。调用该函数的用户需要具有SYSADMIN权限或具有REPLICATION权限或继承了内置角色gs_role_replication的权限。此函数目前只支持在主机调用。

再次插入数据,并查询当前的LSN。

选择跳过LSN 0/3447AB0,之后再执行解码并推进复制槽,会发现并没有输出解码结果,这是因为已经推进复制槽到LSN 0/3447AB0了。

原文链接:www.gbase.cn/community/p…
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。