openGauss系数据库逻辑复制实现双写

本篇关于逻辑复制实现双写的案例,本来准备了3个环境,分别是306、501和505,奈何在5版本向3版本订阅的时候,出现了报错,但也将整个过程都记录下来吧。

环境准备

节点信息

MogDB=# select version();                                                                  version------------------------------------------------------------------------------------------------------------------------------------------------------(MogDB 5.0.5 build b77f1a82) compiled at 2023-12-08 03:11:47 commit 0 last mr 1804  on x86_64-unknown-linux-gnu, compiled by g++ (GCC) 7.3.0, 64-bit
(1 row)MogDB=# show wal_level ;wal_level
-----------logical
(1 row)MogDB=# select version();version
------------------------------------------------------------------------------------------------------------------------------------------------------(MogDB 5.0.1 build ae6d2ada) compiled at 2023-08-16 09:07:43 commit 0 last mr 1804  on x86_64-unknown-linux-gnu, compiled by g++ (GCC) 7.3.0, 64-bit
(1 row)MogDB=# show wal_level ;wal_level
-----------logical
(1 row)MogDB=# select version();                                                                    version------------------------------------------------------------------------------------------------------------------------------------------------------(MogDB 3.0.6 build 0e82b772) compiled at 2023-09-08 03:05:33 commit 0 last mr 1801  on x86_64-unknown-linux-gnu, compiled by g++ (GCC) 7.3.0, 64-bit
(1 row)MogDB=# show wal_level ;wal_level
-----------logical
(1 row)

用户权限 (所有节点)

--创建用户
create user logicalrep REPLICATION OPRADMIN encrypted password 'logicalrep@123';--配置白名单
host    replication            logicalrep  172.20.22.1/24     sha256

语句准备

--测试表(所有节点)
create table logicaltest(id serial, col1 text, ctime timestamp);
alter table logicaltest REPLICA IDENTITY full;--初始数据(源)
insert into logicaltest select generate_series(1,5),md5(random()),now();--发布者mypub506(在505实例,发布者名字应该叫505)
create publication mypub506 for table logicaltest;--订阅者mysub506(在501实例)
create subscription mysub506 connection 'dbname=postgres host=172.20.22.218 user=logicalrep password=logicalrep@123 port=25001' publication mypub506;--发布者mypub501(在501实例)
create publication mypub501 for table logicaltest;--订阅者mysub501(在505实例)
create subscription mysub501 connection 'dbname=postgres host=172.20.22.220 user=logicalrep password=logicalrep@123 port=26001' publication mypub501;--订阅者mysub501(在306实例)
create subscription mysub501 connection 'dbname=postgres host=172.20.22.220 user=logicalrep password=logicalrep@123 port=26001' publication mypub501;

复制测试

用户访问测试

订阅发布信息检查

目前三个节点都是干净的,没有订阅发布

建立发布订阅关系

506实例初始化数据,并创建发布者

501创建订阅者,发布者是mypub506

5.0.x版本支持了复制历史数据

501创建发布者

506创建订阅者

image.png

双写测试

在501节点上插入数据11-15

 

数据已经同步到506,且在506上再次插入数据1-5,发现数据已经正常写入且同步到501

双写分析

逻辑复制实现双写,没有造成数据循环的原因在于record_origin这个标记,这与PG16中的WITH (ORIGIN = NONE)异曲同工。

REDO @ 1B/312EC090; LSN 1B/312EC100: prev 1B/312EC050; xid 1233997; term 1; len 72; total 111; crc 4149308913; desc: Transaction - XLOG_XACT_COMMIT commit: 2024-04-30 18:28:45.671021 CST; csn:1049046; RecentXmin:1233996; origin: node 1, lsn C/2EE68978, at 2024-04-30 18:42:35.911074 CSTSYSID 0; record_origin 1; max_block_id 4294967295; readSegNo 6961; readOff 3063808; readPageTLI 0; curReadSegNo 0; curReadOff 0 latestPagePtr 1B/312EC000; latestPageTLI 1; currRecPtr 1B/312EC090PRIVATE @1B/31000000-1B/32000000; TLI 1; endptr_reached 0MAINDATA main_data_len 72; main_data_bufsz 72
mog_xlogdump: FATAL:  error in WAL record at 1B/3141D9E0: invalid record length at 1B/3141DA38: wanted 32, got 0

问题汇总

高版本5.0.x无法订阅低版本3.0.x

LOG:  received wal replication command: IDENTIFY_MODE
LOG:  received wal replication command: SELECT 1 FROM pg_catalog.pg_publication t WHERE t.pubname IN ('mypub3')
FATAL:  replication command parser returned 1

本文作者:高云龙

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/22665.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nc解决自定义参照字段前台保存后只显示主键的问题

nc解决自定义参照字段前台保存后只显示主键的问题 自定义参照类VoucherRefModel.java package nc.ui.jych.ref;import nc.ui.bd.ref.AbstractRefModel;/*** desc 凭证号参照* author hanh**/ public class VoucherRefModel extends AbstractRefModel {Overridepublic String[…

企业应用架构模式--详解51种企业应用架构模式

导读:企业应用包括哪些?它们又分别有哪些架构模式? 世界著名软件开发大师Martin Fowler给你答案 目录 01什么是企业应用02 企业应用的种类03企业架构模式 01什么是企业应用 我的职业生涯专注于企业应用,因此,这里所谈…

PySpark特征工程(III)--特征选择

有这么一句话在业界广泛流传:数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。由此可见,特征工程在机器学习中占有相当重要的地位。在实际应用当中,可以说特征工程是机器学习成功的关键。 特征工程是数据分析…

【Vue】非父子通信-event bus 事件总线

文章目录 一、实现步骤二、代码示例 作用:非父子组件之间,进行简易消息传递。(复杂场景→ Vuex) 一、实现步骤 创建一个都能访问的事件总线 (空Vue实例) → utils/EventBus.js 叫事件总线的原因是因为本质是它俩消息的接受和发送…

JL-03-Y1 清易易站

产品概述 清易易站是清易电子新研发的一体式气象站,坚持科学化和人文化相结合的设计理念,应用新检测原理研发的传感器观测各类气象参数,采用社会上时尚的工艺理念设计气象站的整体结构,实现了快速观测、无线传输、数据准确、精度较…

NCP1680AAD1R2G是一款CrM PFC控制器IC 用于驱动无桥图腾柱PFC拓扑结构

NCP1680AAD1R2G NCP1680是一个CrM PFC控制器IC,用于驱动无桥图腾柱PFC拓扑结构。无桥图腾柱PFC是一种功率因数校正结构,包括一个以PWM开关频率驱动的快速开关桥臂和一个以AC线频率工作的第二桥臂。这种拓扑结构消除了传统PFC电路输入端存在的二极管桥&am…

LabVIEW冲击响应谱分析系统

LabVIEW冲击响应谱分析系统 开发了一种基于LabVIEW开发的冲击响应谱分析系统,该系统主要用于分析在短时间内高量级输入力作用下装备的响应。通过改进的递归数字滤波法和样条函数法进行冲击响应谱的计算,实现了冲击有效持续时间的自动提取和响应谱的精准…

操作简单中医电子处方中药划价系统软件视频教程,佳易王诊所电子处方管理系统软件

操作简单中医电子处方中药划价系统软件视频教程,佳易王诊所电子处方管理系统软件 一、前言 以下软件操作教程以,佳易王中西医诊所电子处方软件为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 1、软件支持中医和西医处方…

冯喜运:6.5今日黄金原油行情怎么看及日内操作策略

【黄金消息面分析】:周三(6月5日)亚市早盘,现货黄金窄幅震荡,目前交投于2328.13美元/盎司附近。黄金价格周二下跌超过1%,原因是美元在本周晚些时候美国就业数据公布前趋于稳定,该数据可能为美联…

女生适合学GIS开发吗?0基础怎么学?

最近小编在各账号后台会陆续收到一些粉丝留言。其中有些女粉在问,女生适合学GIS开发吗?会被歧视吗? 众所周知,IT行业中男生占了很大部分的比例,那么GIS开发行业也是这样吗,女生适合学习GIS开发吗&#xff…

SwiftUI 利用 Swizz 黑魔法为系统创建的默认对象插入新协议方法(五)

功能需求 在 SwiftUI 的开发中,我们往往需要借助底层 UIKit 的“上帝之手”来进一步实现额外的定制功能。比如,在可拖放(Dragable)SwiftUI 的实现中,会缺失拖放取消的回调方法让我们这些秃头码农们“欲哭无泪” 如上图所示,我们在拖放取消时将界面中的一切改变都恢复如初…

【前端 - Vue】Vuex基础入门,创建仓库的详细步骤

🚀 个人简介:6年开发经验,现任职某国企前端负责人,分享前端相关技术与工作常见问题~ 💟 作 者:前端菜鸟的自我修养❣️ 📝 专 栏:vue从基础到起飞 🌈 若有帮助&…

有极性电容器的引脚极性怎么判别?

由于有极性电容器有正、负之分,在电路中又不能乱接,所以在使用有极性电容器前需要先判别出正、负极。有极性电容器的正、负极判别方法如图2—9~图2—11所示。 方法一:对于未使用过的新电容,可以根据引脚长短来判别。引…

vue改造四级树状可输入table

vue改造四级树状可输入table <template><div class"dimension_wary"><div class"itemHeader"><div class"target"></div><div class"sort">X2</div><div class"weight">…

基于最大重叠离散小波变换的PPG信号降噪(MATLAB 2018)

光电容积脉搏波PPG信号结合相关算法可以用于人体生理参数检测&#xff0c;如血压、血氧饱和度等&#xff0c;但采集过程中极易受到噪声干扰&#xff0c;对于血压、血氧饱和度测量的准确性造成影响。随着当今社会医疗保健技术的发展&#xff0c;可穿戴监测设备对于PPG信号的质量…

【Kubernetes】k8s集群的污点、容忍、驱逐 以及排障思路

污点和容忍以及驱逐 一、污点&#xff08;Taint&#xff09; 污点介绍 节点亲和性&#xff0c;是Pod的一种属性&#xff08;偏好或硬性要求&#xff09;&#xff0c;它使Pod被吸引到一类特定的节点。Taint 则相反&#xff0c;它使节点能够排斥一类特定的 Pod。 Taint 和 Tol…

Word忘记保存?请使用Word隐藏备份文件

大家用Word写材料时&#xff0c;如果忘记保存&#xff0c;可以使用Word隐藏备份文件找回未保存的文件。&#xff08;仅供参考&#xff09; Windows7、8、10、11系统的设置如下&#xff1a; 执行上述操作&#xff0c;可以在word文件菜单中信息项的自动保存中找到了。上述内容…

Java中的接口与抽象类:区别与联系

Java中的接口与抽象类&#xff1a;区别与联系 在Java中&#xff0c;interface&#xff08;接口&#xff09;和abstract class&#xff08;抽象类&#xff09;是两种重要的抽象类型&#xff0c;用于定义对象的抽象行为和结构。虽然Java 8之后接口引入了默认方法和静态方法&…

Mac保姆级配置jdk环境

1.找到下载的jdk环境 通常是这个。留作备用 /Library/Java/JavaVirtualMachines/jdk1.8.0_291.jdk/Contents/Home/bin 然后新开一个终端下执行以下命令 sudo vim ~/.bash_profile 进入编辑模式后 按 i 开始添加内容结束编辑模式按 ESC结束后保存输入 :wq!不保存输入 :q! 注意…

理解NSCopying协议

NSCopying 协议用于让对象能够被复制。实现这个协议的类需要定义如何创建该对象的副本。这个副本是独立的&#xff0c;不会与原对象共享内存地址。 为什么需要 NSCopying 协议&#xff1f; 当你需要复制对象时&#xff0c;例如将对象存储到一个集合&#xff08;如数组、字典&…