当前位置: 首页 > news >正文

IvorySQL v4 逻辑复制槽同步功能解析:高可用场景下的数据连续性保障

功能简介

IvorySQL v4 基于 PostgreSQL 17,引入了逻辑复制槽同步至热备份数据库的功能。这一改进有效解决了旧版本中主数据库与备份数据库切换后逻辑复制中断的问题。对于那些追求数据高可用性和业务连续性的数据库来说,这无疑是一个重大的利好消息。它不仅提升了系统的整体稳定性,还确保了在故障发生时,数据复制过程能够无缝继续,从而最大程度地降低了业务中断的可能性。

在这里插入图片描述

复制槽同步机制

前提条件

  1. 物理复制槽:主数据库与备份数据库之间必须存在物理复制槽,作为逻辑复制槽同步的基础,确保数据在主备之间有效传输。。
  2. 配置参数
    • 在备份数据库上配置 primary_slot_name 参数,并在使用 pg_basebackup 工具时指定复制槽。这一配置步骤确保了备份数据库能够正确接收主数据库数据。
    • 启用备份数据库的 hot_standby_feedback 功能,确保其能接收并反馈 WAL 日志。这一功能的启用保证了备份数据库在接收数据时的活跃性和反馈机制的完整性。
    • primary_conninfo 参数中指定有效的数据库名称(dbname)。这一配置确保了复制过程中的目标数据库是明确且正确的。
  3. 推荐配置:在主数据库上配置 standby_slot_names 参数以保持复制槽同步的一致性。这一配置有助于维护主备数据库间复制槽的一致状态,从而提高复制过程的可靠性。

实现方式

  1. 创建逻辑复制槽
    调用 pg_create_logical_replication_slot 函数时设置 failover=true,指定复制槽同步至备份数据库。这一设置至关重要,因为它决定了复制槽在主备切换时的行为。
  1. 订阅配置
    使用 CREATE SUBSCRIPTION 语句时指定 failover=true,确保复制槽同步至备份数据库。这为数据库管理员提供了灵活的配置选项,使他们能够根据实际业务需求和环境特点定制复制策略。

  2. 手动同步
    在备份数据库上执行 pg_sync_replication_slots 函数,手动同步复制槽。这种方法提供了一种即时同步的手段,特别适用于需要立即反映主数据库变更的场景。

  3. 自动同步:
    设置备份数据库的 sync_replication_slots = on,实现定期自动同步,无需重启数据库。这一自动化功能简化了数据库的维护工作,使管理员能够将更多精力投入到其他关键任务中。

下图是配置及创建同步逻辑复制槽的流程图,详细的顺序讲解了如何配置同步逻辑复制槽基础参数,以及如何创建一个同步逻辑复制槽。

在这里插入图片描述

函数与参数

  1. pg_create_logical_replication_slot
  • 新增了 failover 参数,其默认值为 false。若设置为 true,则表示该复制槽需同步至备份数据库。
  • 示例语法:
    SELECT pg_create_logical_replication_slot('test_slot', 'test_decoding', false, false, true)
    
  • 这一函数的引入,为数据库管理员提供了更精细的控制手段,使得逻辑复制槽的管理更加灵活和高效。
  1. pg_sync_replication_slots
  • 该函数用于手动同步复制槽至备份数据库。
  • 示例语法:
    SELECT pg_sync_replication_slots()
    
  • 通过这一函数,可以即时地将主数据库的变更同步到备份数据库,确保数据的一致性和完整性。
  1. sync_replication_slots
  • 在备份数据库上设置该参数为 on,可实现复制槽变更的定期自动同步,无需重启数据库。
  • 这一自动化设置极大地减轻了数据库管理员的负担,使得复制槽的维护工作更加轻松和高效。

在这里插入图片描述
在这里插入图片描述

如上图所示,为主库和备库的复制槽的状态,主库创建了逻辑复制槽 test_slots2,并定义属性 failover 为 true,开启了这个槽的故障转移功能,通过手动或自动的方式,可以将逻辑复制槽 test_slots2 的状态及信息同步至备库,当发生主备切换或者故障转移时,备库被提升为新主时,逻辑复制槽 test_slots2 的信息将会保留,从而保证订阅端间断、不丢失数据。

操作步骤与验证

手动同步复制槽

搭建主数据库与备份数据库环境,确保主数据库和备份数据库的配置正确,包括物理复制槽和流复制用户。这一过程需要仔细规划和执行,以确保复制环境的稳定性和可靠性。

  1. 创建复制槽:
  • 执行
    SELECT pg_create_logical_replication_slot('test_slot2', 'test_decoding',false, false, true)
    
  • 这一操作是逻辑复制槽同步的起点,它为后续的数据复制奠定了基础。
  1. 在备份数据库上手动同步复制槽:
  • 执行
    SELECT pg_sync_replication_slots()
    
  • 这一操作确保了复制槽的变更能够及时反映到备份数据库上,从而保证了数据的同步性和一致性。
  1. 验证复制槽同步:
  • 在备份数据库上执行查询,以确保复制槽已同步至备份数据库。
  • 执行
    SELECT \* FROM pg_replication_slots
    
  • 这一验证步骤是确认复制槽同步成功的关键环节,它确保了复制过程的正确性和完整性。

自动同步复制槽

  1. 在备份数据库上设置 sync_replication_slots = on
  • 执行
    ALTER SYSTEM SET sync_replication_slots = on
    
  • 然后执行
    SELECT pg_reload_conf()
    
  • 这一自动化设置使得复制槽的同步工作更加简便和高效,管理员无需手动介入即可完成同步任务。
  1. 验证自动同步:

    在主数据库插入数据,观察备份数据库复制槽的变化,以确保主数据库复制槽的变更能够自动同步到备份数据库。这一验证步骤是确认自动同步功能正常工作的关键环节,它确保了复制过程的自动化和可靠性。

在这里插入图片描述

模拟主数据库与备份数据库的切换

  1. 在备份数据库上执行主数据库提升操作:
  • 模拟主数据库故障,将主数据库关机。
  • 在备份数据库上执行
    pg_ctl -D data promote
    
  • 这一操作模拟了主数据库发生故障时的应急切换,是测试复制槽同步功能在实际故障场景中表现的重要步骤。
  1. 在新的主数据库上继续进行逻辑复制:

    在新的主数据库绑定 VIP,以确保逻辑复制能够继续进行。这一操作确保了在主数据库切换后,逻辑复制能够无缝地继续进行,从而保证了业务的连续性和数据的一致性。

在这里插入图片描述
在这里插入图片描述

上图为切换后的新主,保留了原有的逻辑复制槽 my_subscription 和发布信息 my_publication。并且配置其他必要参数后,恢复新备库的逻辑复制槽同步能力。

订阅端根据 VIP 路由至新主数据库,继续使用同步的逻辑复制槽,保证逻辑复制的正常数据复制。

在这里插入图片描述

总结

逻辑复制槽同步功能提升了 IvorySQL 在高可用性环境下的可靠性,解决了主数据库与备份数据库切换后逻辑复制槽丢失的问题。这一功能的引入,使得数据库面对主备切换时,保证逻辑复制槽的信息不丢失,确保了数据复制过程的连续性和一致性。

同步过程需满足以下条件:

  • 设置 failover=true 的复制槽;
  • 主数据库与备份数据库间配置物理复制槽;
  • 备份数据库启用 hot_standby_feedback
  • 备份数据库的 primary_conninfo 参数配置正确的数据库名称;
  • 推荐配置 standby_slot_names 参数以确保一致性;
  • 通过 pg_sync_replication_slotssync_replication_slots 参数,备份数据库可以手动或自动同步复制槽,确保逻辑复制能够无缝切换。

这一系列的措施和功能,共同构成了 IvorySQL 中逻辑复制槽同步功能的强大和灵活,为数据库管理员提供了强大的工具,以应对各种复杂和挑战性的数据复制场景。

相关文章:

IvorySQL v4 逻辑复制槽同步功能解析:高可用场景下的数据连续性保障

功能简介 IvorySQL v4 基于 PostgreSQL 17,引入了逻辑复制槽同步至热备份数据库的功能。这一改进有效解决了旧版本中主数据库与备份数据库切换后逻辑复制中断的问题。对于那些追求数据高可用性和业务连续性的数据库来说,这无疑是一个重大的利好消息。它…...

vxe-table开启表尾和el-collapse-transition不兼容,动画卡顿

调用控制台 发现是el-collapse-transition内置的计算高度函数计算的高度总是会高一点 直接放弃使用el-collapse-transition 使用下面的div包裹住vxe-table 我的table是渲染出来的会有多个 <el-button click"group.messShow !group.messShow" type"text&q…...

康谋分享 | 3DGS:革新自动驾驶仿真场景重建的关键技术

随着自动驾驶技术的迅猛发展&#xff0c;构建高保真、动态的仿真场景成为了行业的迫切需求。传统的三维重建方法在处理复杂场景时常常面临效率和精度的挑战。在此背景下&#xff0c;3D高斯点阵渲染&#xff08;3DGS&#xff09;技术应运而生&#xff0c;成为自动驾驶仿真场景重…...

golang学习笔记——go语言安装及系统环境变量设置

文章目录 go语言安装go envgo getgoproxy测试安装 Go 插件安装 Go 插件依赖工具参考资料用户环境变量和系统环境变量用户环境变量系统环境变量示例设置环境变量的步骤设置用户环境变量设置系统环境变量 验证环境变量总结 2024年最火的5大Go框架1. Gin&#xff1a;高并发接口的“…...

Redis|集群 Cluster

文章目录 是什么能干嘛集群算法-分片-槽位slotredis集群的槽位slotredis集群的分片分片槽位的优势slot槽位映射——业界的3种解决方案小厂&#xff1a;哈希取余分区中厂&#xff1a;一致性哈希算法分区大厂&#xff1a;哈希槽分区 面试题&#xff1a;为什么 Redis 集群的最大槽…...

解锁MacOS开发:环境配置与应用开发全攻略

✨✨✨这里是小韩学长yyds的BLOG(喜欢作者的点个关注吧) ✨✨✨想要了解更多内容可以访问我的主页 小韩学长yyds-CSDN博客 目录 引言 一、MacOS 开发环境配置 &#xff08;一&#xff09;必备工具安装 &#xff08;二&#xff09;集成开发环境&#xff08;IDE&#xff09;选…...

如何通过卷积神经网络(CNN)有效地提取图像的局部特征,并在CIFAR-10数据集上实现高精度的分类?

目录 1. CNN 提取图像局部特征的原理 2. 在 CIFAR - 10 数据集上实现高精度分类的步骤 2.1 数据准备 2.2 构建 CNN 模型 2.3 定义损失函数和优化器 2.4 训练模型 2.5 测试模型 3. 提高分类精度的技巧 卷积神经网络&#xff08;Convolutional Neural Network, CNN&#…...

监听 RabbitMQ 延时交换机的消息数、OpenFeign 路径参数传入斜杠无法正确转义

背景 【MQ】一套为海量消息和高并发热点消息&#xff0c;提供高可用精准延时服务的解决方案 我现在有一个需求&#xff0c;就是监听 RabbitMQ 一个延时交换机的消息数&#xff0c;而 RabbitTemplate 是不存在对应的方法来获取的。 而我们在 RabbitMQ 的控制台却可以发现延时交…...

希音(Shein)前端开发面试题集锦和参考答案

用 Node 写过什么工具或 npm 包 在实际开发中,使用 Node 编写过多种实用工具和 npm 包。 自动化构建工具 开发了一个简单的自动化构建工具,用于处理前端项目的资源压缩和合并。在前端项目中,为了优化性能,需要对 CSS 和 JavaScript 文件进行压缩,减少文件体积,同时将多个…...

python全栈-Linux基础

python全栈-Linux基础 文章目录 Linux安装/配置网络配置配置Linux远程登录配置虚拟机内部ip配置真机的ip安装XShell和Xftp目录结构用户和用户组用户管理添加用户useradd查看用户id修改用户usermod (选项)(参数)用户密码设置passed (选项)(参数)删除用户userdel [选项] 用户名 用…...

DeepSeek R1助力,腾讯AI代码助手解锁音乐创作新

目录 1. DeepSeekR1模型简介2. 歌词创作流程2.1 准备工作2.2 歌词生成技巧 3. 音乐制作环节3.1 主流AI音乐生成平台 4. 歌曲欣赏5. 总结展望 1. DeepSeekR1模型简介 腾讯AI代码助手最新推出的DeepSeekR1模型不仅在代码生成方面表现出色&#xff0c;其强大的自然语言处理能力也…...

Git安装与配置

安装部分&#xff1a; Windows&#xff1a;下载官网安装包&#xff0c;双击安装&#xff0c;路径选择&#xff08;注意是否修改&#xff09;&#xff0c;安装选项&#xff08;是否勾选某些选项&#xff0c;如提到安装时更换编辑器为Nano&#xff09;。Linux&#xff1a;通过包管…...

【Linux】自定协议和序列化与反序列化

目录 一、序列化与反序列化概念 二、自定协议实现一个加法网络计算器 &#xff08;一&#xff09;TCP如何保证接收方的接收到数据是完整性呢&#xff1f; &#xff08;二&#xff09;自定义协议 &#xff08;三&#xff09;自定义协议的实现 1、基础类 2、序列化与反序列…...

C++基础系列【19】运算符重载

博主介绍&#xff1a;程序喵大人 35- 资深C/C/Rust/Android/iOS客户端开发10年大厂工作经验嵌入式/人工智能/自动驾驶/音视频/游戏开发入门级选手《C20高级编程》《C23高级编程》等多本书籍著译者更多原创精品文章&#xff0c;首发gzh&#xff0c;见文末&#x1f447;&#x1f…...

Python-04BeautifulSoup网络爬虫

2025-03-04-BeautifulSoup网络爬虫 记录BeautifulSoup网络爬虫的核心知识点 文章目录 2025-03-04-BeautifulSoup网络爬虫 [toc]1-参考网址2-学习要点3-核心知识点1. 安装2. 导入必要的库3. 发送 HTTP 请求4. 创建 BeautifulSoup 对象5. 解析 HTML 内容5.1 查找标签5.2 根据属性…...

芯科科技通过全新并发多协议SoC重新定义智能家居连接

MG26系列SoC现已全面供货&#xff0c;为开发人员提供最高性能和人工智能/机器学习功能 致力于以安全、智能无线连接技术&#xff0c;建立更互联世界的全球领导厂商Silicon Labs&#xff08;亦称“芯科科技”&#xff0c;NASDAQ&#xff1a;SLAB&#xff09;&#xff0c;日前宣…...

python-leetcode-零钱兑换 II

518. 零钱兑换 II - 力扣&#xff08;LeetCode&#xff09; 这个问题是 完全背包问题 的一个变体&#xff0c;可以使用 动态规划 来解决。我们定义 dp[i] 为凑成金额 i 的硬币组合数。 思路&#xff1a; 定义 DP 数组 设 dp[i] 表示凑成金额 i 的组合数&#xff0c;初始化 dp[…...

【RabbitMQ】Producer之TTL过期时间 - 基于AMQP 0-9-1

这篇文章和大家分享Producer发布消息时如何设置消息过期时间&#xff0c;包括队列级别和消息级别&#xff0c;还有如何设置队列的过期时间。 消息过期时间 给消息设置TTL&#xff0c;在超过TTL值后&#xff0c;消息就会变成dead message&#xff08;死信&#xff09;&#xf…...

演示汉字笔顺的工具

视频需要审核&#xff0c;还是gif比较方便&#xff0c;本来就不长。 给小学生辅导汉字笔顺的时候&#xff0c;先是发现“百度汉语”里面有很多类似的笔顺的动画&#xff0c;非常方便。但总是需要上网&#xff0c;而且百度上并不提供针对特定汉字的方便的检索途径&#xff0c;加…...

JVM简单了解

一、JVM概述 目录 一、JVM概述 1.jvm的作用 2.jvm的组成 2.1类加载 2.1.1加载 2.1.2链接 2.1.3初始化 2.1.4类加载器分类 2.1.5双亲委派机制 2.2运行时数据区 2.2.1程序计数器 2.2.2虚拟机栈 2.2.3本地方法栈 2.2.4java堆内存 2.2.5方法区 2.3本地方法库接口 …...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展&#xff0c;越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式&#xff0c;也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建&#xff0c;…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案&#xff0c;如果正确地操作&#xff0c;重启Eureka集群中的节点&#xff0c;对已经注册的服务影响非常小&#xff0c;甚至可以做到无感知。 但如果操作不当&#xff0c;可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

接口自动化测试:HttpRunner基础

相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具&#xff0c;支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议&#xff0c;涵盖接口测试、性能测试、数字体验监测等测试类型…...

怎么开发一个网络协议模块(C语言框架)之(六) ——通用对象池总结(核心)

+---------------------------+ | operEntryTbl[] | ← 操作对象池 (对象数组) +---------------------------+ | 0 | 1 | 2 | ... | N-1 | +---------------------------+↓ 初始化时全部加入 +------------------------+ +-------------------------+ | …...

pgsql:还原数据库后出现重复序列导致“more than one owned sequence found“报错问题的解决

问题&#xff1a; pgsql数据库通过备份数据库文件进行还原时&#xff0c;如果表中有自增序列&#xff0c;还原后可能会出现重复的序列&#xff0c;此时若向表中插入新行时会出现“more than one owned sequence found”的报错提示。 点击菜单“其它”-》“序列”&#xff0c;…...