暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

解决循环复制,逻辑复制双向订阅发布最佳实践

原创 多米爸比 2023-11-08
738

适用范围

openGauss5.0 / MogDB 5.0

问题概述

逻辑复制从openGauss 3.0开始支持,但双向订阅发布下会存在循环复制的问题。

PostgreSQL 16可以区分数据变化是由用户的SQL语句或replication复制引起,在创建订阅时可设置发布端不发布replication复制源,从而避免陷入复制循环。参考语法如下:
B节点:

create subscription... publication... with(origin='none');

A节点:

create subscription... publication... with(origin='none',copy_data=false);

而openGauss 5.0也直接解决了循环复制的问题,不需要设置任何参数。

循环复制问题验证

在openGauss 5.0单机环境下使用两个不同的端口号模拟两个节点。

initdb -D pgdata1610 -W
initdb -D pgdata1620 -W

上面初始化了1610节点和1620节点,配置参数如下:

wal_level=logical
password_policy = 0
password_encryption_type = 0
port=1610/1620

pg_hba.conf文件增加如下设置:

host  replication  all  127.0.0.1/32 md5

同时创建repuser如下:

CREATE USER repuser REPLICATION SYSADMIN PASSWORD 'XXX';

1610节点发布数据到1620节点

1610节点创建表结构及发布

create table public.tab1(id int primary key,info varchar); create publication mypub_in_1610 for table public.tab1;

1620节点创建表结构及订阅

create table public.tab1(id int primary key,info varchar); create subscription mysub_in_1620 connection 'host=127.0.0.1 port=1611 user=repuser password=XXX dbname=postgres' publication mypub_in_1610 ;

注意上面的端口需要使用replication加1端口1611(1610+1),否则使用1610主端口会出现如下错误:

WARNING:  apply worker could not connect to the remote server
ERROR:  Failed to connect to publisher.

1620节点发布数据到1610节点

1620节点发布

create publication mypub_in_1620 for table public.tab1;

1610节点创建订阅

create subscription mysub_in_1610 connection 'host=127.0.0.1 port=1621 user=repuser password=XXX dbname=postgres' publication mypub_in_1620 ;

同样需要注意端口需要使用replication加1端口1621(1620+1)。

并且需要配置完双向订阅与发布后,再进行数据操作。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论