IvorySQL与pg_failover_slot插件:如何实现逻辑复制槽的高可用主备同步

news/2024/11/30 9:25:37/

前言

数据库高可用架构中,逻辑复制是实现数据同步和扩展的重要机制之一。通过逻辑复制,数据库管理员可以选择性地复制特定表的数据,而不必像物理复制那样进行全量数据库实例的复制。然而,逻辑复制槽的局限性在于它仅存在于主节点上,导致主备切换后新主节点无法继续向下游发送数据变更,直到重新创建或手动恢复逻辑复制槽。这种情况可能引发数据丢失,或者需要管理员手动干预,影响业务的连续性。
PostgreSQL作为优秀的开源关系型数据库,提供了多种高可用性工具,其中 pg_failover_slot 插件专门解决了逻辑复制槽在主备切换时无法同步的问题,而IvorySQL 作为一款基于PostgreSQL研发的兼容Oracle的数据库,同样适配该插件。
本文将详细介绍如何安装和配置pg_failover_slot 插件,并说明它如何帮助IvorySQL 实现无缝的逻辑复制槽同步。

1.逻辑复制槽的原理及局限性

在PostgreSQL中,逻辑复制与物理复制不同,它允许对特定表的数据变动进行行级别的精细化控制,并可以跨数据库版本和架构同步数据。逻辑复制的关键是通过逻辑复制槽记录并维护主节点上的数据变更,这些变更可以被下游的订阅者捕获和应用。

1.1 逻辑复制槽的工作原理

逻辑复制槽是PostgreSQL维护数据变更的缓冲机制,它存储了自上次传输以来的数据增量,直到下游订阅者成功接收这些数据。复制槽还记录了下游订阅者接收到的最后一个变更,以便在系统故障或网络问题时重新发送未完成的数据。

1.2 逻辑复制槽的局限性

逻辑复制槽仅在主节点上维护,因此在以下情况下会遇到问题:

故障转移后的数据丢失:当主节点宕机并且备节点被提升为主节点时,新的主节点没有复制槽的记录。此时,订阅者无法从新的主节点获取数据变更,直到管理员在新主节点上手动创建新的复制槽。

需要逻辑复制槽的手动创建及重新初始化:手动创建复制槽不仅繁琐,而且会造成数据同步的中断,可能需要重新初始化逻辑复制表,带来额外的负载和复杂度。

为了应对这些挑战,pg_failover_slot插件能够自动同步主备节点之间的逻辑复制槽,确保故障转移时数据的连续性。

2.pg_failover_slot插件介绍

pg_failover_slot是专为PostgreSQL开发的一个插件,旨在解决逻辑复制槽无法在主备之间同步的问题。该插件通过在主节点和备节点之间同步逻辑复制槽,确保当备节点被提升为主节点时,它能够继续向下游订阅者发送数据变更,而不需要重新创建或手动干预。

插件的主要特性包括:

自动复制槽同步:pg_failover_slot可以在主备节点之间同步逻辑复制槽,确保备节点具备相应的复制槽记录。

简化的故障转移流程:在主备切换后,无需手动创建新的逻辑复制槽,保证订阅者能够立即获取新主节点上的数据变更。

高可用性支持:槽的同步,pg_failover_slot提高了系统的容错能力和可用性,减少了宕机时的管理负担。


3.安装和配置pg_failover_slot插件

为了在IvorySQL上使用pg_failover_slot插件,需要进行以下步骤。

3.1 系统环境准备

假设您已经在生产环境中部署了IvorySQL,并且已经配置了主备节点环境:

- 主节点:primary_node

- 备节点:standby_node

确保IvorySQL主备架构运行正常,且已创建逻辑复制槽,并使用高可用工具来管理故障转移过程和VIP管理实现漂移。

3.2 下载并编译插件

首先,从GitHub下载并编译pg_failover_slot插件:

git clone 

https://github.com/EnterpriseDB/pg_failover_slots.git

cd pg_failover_slots

make

make install

3.3 配置IvorySQL

接下来,在主节点和备节点的postgresql.conf文件中添加pg_failover_slot 插件到 shared_preload_libraries,并设置日志复制等级为logical或以上:

wal_level = logical
shared_preload_libraries = 'pg_failover_slots'

确保主库已创建物流复制槽,此为必要条件。

在备库配置:

hot_standby_feedback = on

primary_slot_name = ‘slot_name’

这一设置使数据库在启动时加载插件。完成配置后,重启主节点和备节点的IvorySQL 实例:

pg_ctl restart -D $PGDATA

启动成功后,查看进程可看到pg_failover_slot worker的子进程,并且show shared_preload_libraries 可查看到有pg_failover_slots的信息,即插件生效。


3.4 创建逻辑复制槽

使用1521端口进行oracle模式连接,并主节点上创建带有兼容oracle字段的表t_ora_like、test3,下图显示模式为oracle模式,显示oracle属性字段varchar2的表t_ora_like,作为基础测试表,旨在测试插件与oracle兼容属性间的契合度。

然后在主节点上创建一个发布:

CREATE PUBLICATION my_publication FOR TABLE test3;

CREATE PUBLICATION my_publication2 FOR TABLE t_ora_like;

此时,当有订阅方通过VIP订阅此发布,会创建相应的逻辑复制槽,pg_failover_slot插件将自动同步该复制槽到备节点。您无需手动在备节点上创建复制槽。

3.5 同步逻辑复制槽

备节点会同步相应的逻辑复制槽。

4.故障转移与复制槽恢复

pg_failover_slot插件在主备节点上配置完成,它将自动管理逻辑复制槽的同步和故障转移。

4.1 故障转移流程

当主节点发生故障时,使用高可用工具进行故障转移,备节点将被提升为新的主节点,VIP漂移到新节点。pg_failover_slot插件会确保新主节点恢复并接管逻辑复制槽。

4.2 验证复制槽状态

在新的主节点上检查复制槽是否已经恢复:

SELECT * FROM pg_replication_slots;

新主节点上已经存在原先在旧主节点上创建的逻辑复制槽。这意味着下游订阅者可以继续从新主节点获取数据变更,确保逻辑复制的无缝衔接。

4.3 订阅者同步

下游订阅者无需任何额外操作,它们会通过VIP自动从新主节点接收更新,无需重新配置订阅。

5.最佳实践和注意事项

在使用pg_failover_slot插件时,以下最佳实践可以帮助您更好地管理和维护逻辑复制槽的高可用性:

合理配置复制槽上限:在高并发或大规模复制场景中,确保max_replication_slots参数配置合理。IvorySQL的postgresql.conf文件中的这一参数需要根据工作负载的复杂性进行调整,以避免复制槽过载。

定期监控复制槽状态:使用pg_stat_replication_slots视图定期检查复制槽的状态,确保在主备节点之间的同步过程中没有出现延迟或丢失。结合高可用工具进行自动化故障转移,可以实现主备节点的自动化切换,VIP的管理和漂移。pg_failover_slot插件与高可用工具配合使用时,可以确保复制槽在故障转移过程中的无缝接管。

性能优化与监控:逻辑复制在高并发时可能会对系统性能造成一定压力,因此推荐定期监控系统的I/O性能和CPU利用率,必要时调优系统配置。


6.总结

IvorySQL与pg_failover_slot插件为高可用环境中的逻辑复制提供了强大的支持。通过自动同步主备节点间的逻辑复制槽,pg_failover_slot解决了故障转移后需要重新初始化复制槽的难题,显著提升了逻辑复制的稳定性和可用性。

对于需要无缝故障转移且不希望因复制槽问题导致下游订阅者丢失数据的用户来说,pg_failover_slot是一种必不可少的工具。它简化了逻辑复制槽的管理流程,减少了数据库维护的复杂性,为高可用环境中的数据一致性保驾护航。

通过本文中的步骤,可以在IvorySQL中配置并使用pg_failover_slot插件,确保您的逻辑复制环境在主备切换时始终保持高效运行。


http://www.ppmy.cn/news/1551155.html

相关文章

QT的exec函数

在Qt框架中,exec()方法是QDialog类(及其子类)的一个成员函数,用于以模态(modal)方式显示对话框。当exec()被调用时,它会启动一个局部的事件循环,这个循环会阻塞对对话框之外的其他窗…

实时数据开发 | Flink反压机制原因、影响及解决方案

今天是很忙碌的一天哦,有两个业务在催着验收,终于21:45卡点交上去了。 明早再修修补补一下应该就可以开始做实时方面的需求了,小紧张, 今天同事在同步会上讲这块业务的数据流时就提到了checkpoint和savepoint还有流处理…

深入讲解Spring Boot和Spring Cloud,外加图书管理系统实战!

很抱歉,我的疏忽,说了这么久还没有给大家详细讲解过Spring Boot和Spring Cloud,那今天给大家详细讲解一下。 大家可以和下面这三篇博客一起看: 1、Spring Boot 和 Spring Cloud 微服务开发实践详解https://blog.csdn.net/speaking_me/artic…

Vite 6 正式发布

11 月 26 日,Vite 6.0 正式发布。自一年前 Vite 5 发布以来,Vite 的采用率持续增长,每周 npm 下载量已从 750 万次跃升至 1700 万次。与此同时,Vitest 不仅越来越受到用户的青睐,并开始逐步建立起属于自己的生态系统。…

MySQL隐式转换造成索引失效

一、什么是 MySQL 的隐式转换? MySQL 在执行查询语句时,有时候会自动帮我们进行数据类型的转换,这个过程就是隐式转换。比如说,我们在一个 INT 类型的字段上进行查询,但是传入的查询条件却是字符串类型的值&#xff0c…

pageoffice最新版本浏览器点击没反应解决办法

一、问题现象 最新版本的谷歌、火狐浏览器,调用pageoffice时,点击后没反应(旧的谷歌浏览器不受影响)。 二、产生原因 服务器返回pageOffice的客户端唤起链接格式为: PageOffice://|http://192.168.1.120:8080/xxx …

2023年MathorCup高校数学建模挑战赛—大数据竞赛A题基于计算机视觉的坑洼道路检测和识别求解全过程文档及程序

2023年MathorCup高校数学建模挑战赛—大数据竞赛 A题 基于计算机视觉的坑洼道路检测和识别 原题再现: 坑洼道路检测和识别是一种计算机视觉任务,旨在通过数字图像(通常是地表坑洼图像)识别出存在坑洼的道路。这对于地质勘探、航天科学和自然灾害等领域…

芯盾时代的身份安全产品体系

芯盾时代具备全栈零信任身份安全产品和服务能力: 芯盾时代IAM能够适配大企业用户复杂的应用访问需求,提供云端、互联网端、企业内网全场景的身份访问安全接入能力; 芯盾时代IAM能够理解大企业用户的身份差异,为内部用户、合作方和…