功能简介

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_slots 或 sync_replication_slots 参数,备份数据库可以手动或自动同步复制槽,确保逻辑复制能够无缝切换。

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

关于 IvorySQL

lvorySQL 是由瀚高股份主导研发的一款开源的兼容 Oracle 的 PostgreSQL。IvorySQL 与 PostgreSQL 国际社区紧密合作,保持与最新 PG 版本内核同步,为用户提供便捷的升级体验。基于双 Parser 架构设计,100% 与原生 PostgreSQL 兼容,支持丰富的 PostgreSQL 周边工具和扩展,并根据用户需求提供定制化工具。同时,IvorySQL 4.0 提供更全面灵活的 Oracle 兼容功能,具备高度的 SQL 和 PL/SQL 兼容性能够为企业构建更加高效、稳定和灵活的数据库解决方案。

本文由博客一文多发平台 OpenWrite 发布!

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

  1. PostgreSQL逻辑复制槽

    Schema | Name | Result data type | Argument data types | Type ------------+------------------------- ...

  2. MySQL主主复制以及使用keepalived保证高可用

    1:准备工作 MySQL的安装步骤在此处省略:安装完成一定要做以下准备工作,初始化MySQL,/usr/bin/mysql_secure_installation,设置root密码,删除无效账户以及t ...

  3. 高可用的并行MySQL数据同步及分布式

    首先聊聊MySQL的数据分布式,目前最为常用的就是Replication(复制)技术.基于此技术外延开来有很多中架构,分类归结为如下:      1.树状结构(Master,Backup-Master ...

  4. PostgreSQL逻辑复制解密

    在数字化时代的今天,我们都认同数据会创造价值.为了最大化数据的价值,我们不停的建立着数据迁移的管道,从同构到异构,从关系型到非关系型,从云下到云上,从数仓到数据湖,试图在各种场景挖掘数据的价值.而在这 ...

  5. Redis高可用复制集群实现

    redis简单介绍 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库.Redis 与其他 key - value 缓存产品有以下三个特点: 支持数据的持久化,可以将 ...

  6. SQL Server2012高可用之事物复制(发布订阅)测试

      (一)测试目的 目前公司使用的SQL SERVER 2012高可用环境为主备模式,其中主库可执行读写操作,备库既不可写也不可读,即采用的高可用技术为"数据库镜像".存在的问题为 ...

  7. 20、高可用数据同步工具drbd介绍

    20.1.什么是drbd: 20.2.drbd的工作原理: 20.3.drbd的同步模式: 1.实时同步模式: 2.异步同步模式: 20.4.drbd生产应用场景: 1.生产场景中drbd常用于基于高 ...

  8. postgresql从库搭建--逻辑复制

    1 物理复制及逻辑复制对比 前文做了PostgreSQL物理复制的部署,其有如下主要优点 物理层面完全一致,是主要的复制方式,其类似于Oracle的DG 延迟低,事务执行过程中产生REDO recor ...

  9. WPF的Binding功能解析

    1,Data Binding在WPF中的地位 程序的本质是数据+算法.数据会在存储.逻辑和界面三层之间流通,所以站在数据的角度上来看,这三层都很重要.但算法在3层中的分布是不均匀的,对于一个3层结构的 ...

  10. Centos7.5部署MySQL5.7基于GTID主从复制+并行复制+半同步复制+读写分离(ProxySQL) 环境- 运维笔记 (完整版)

    之前已经详细介绍了Mysql基于GTID主从复制的概念,原理和配置,下面整体记录下MySQL5.7基于GTID主从复制+并行复制+增强半同步复制+读写分离环境的实现过程,以便加深对mysql新特性GT ...

随机推荐

  1. Python读取栅格图像并对像元数据处理后导出到表格文件中

      本文介绍基于Python语言中的gdal模块,读取一景.tif格式的栅格遥感影像文件,提取其中每一个像元的像素数值,对像素值加以计算(辐射定标)后,再以一列数据的形式将计算后的各像元像素数据保存在 ...

  2. Git Permission denied

    问题现象 家里电脑 git pull 项目时,提示:Permission denied,ssh -T 测试又是正常的,如下图 同样配置和密钥,在公司电脑就可以正常 pull .push . 问题原因 ...

  3. KMS for Windows 11

    I. 镜像下载 Windows 镜像下载地址:站点1,站点2 II. 手动激活 参考文档:Easy ways to activate Windows 11 for FREE without a pro ...

  4. 大模型复现实践记录-在linux环境4090GPU(24G)

    chatglm-6b chatglm2-6b tigerbot-7b baichuan-7b vicuna

  5. JpaRepository动态代理执行原理

    本文基于spring-boot-starter-data-jpa:2.7.17分析 SpringBoot 里集成Jpa自动配置是如何处理的 通过分析SpringBoot 自动配置核心源码可以找到Jpa ...

  6. FileGDB代码示例

    FileGDB代码示例 1. 读取FileGDB图层 1.1 实现思路 graph TD A[注册OGR] --> B[设置中文路径支持] B --> C[打开数据驱动] C --> ...

  7. [LC952]按公因数计算最大组件大小

    题目描述 给定一个由不同正整数的组成的非空数组 nums ,考虑下面的图: 有 nums.length 个节点,按从 nums[0] 到 nums[nums.length - 1] 标记: 只有当 n ...

  8. 画(HB To Ryby!)

      "客人,请描述得具体一点."   他似乎还是很难为情.   "呃--就是--一个女孩儿",他又勉强启开嘴,"女孩儿"三个字几乎被咽进嗓子 ...

  9. 一步一步abp电商模块-1、搭建模块环境

    前言 目前在开发abp电商模块,打算做一步,写一步,算是对自己的记录,主要是参考nopcommoner 并结合abp模块开发 知识都是连贯的,如果你熟悉asp.net core 3.x.abp(非vN ...

  10. 释放全球互连的数字潜力!MWC 2024云网高峰论坛召开,中国电信天翼云扬帆起航!

    2月27日,在2024年世界移动通信大会(MWC 2024)期间,中国电信云网高峰论坛顺利召开.本次论坛以"释放全球互连的数字潜力"为主题,汇聚全球多个国家和地区的通信业领袖和重量 ...