高效安全迁移:PG高可用集群实战方案深度解析

news/2024/11/29 15:41:22/文章来源:https://www.cnblogs.com/DTinsight/p/18576871

PostgreSQL是一个开源的数据库管理系统,相比于其他开源数据库系统,PostgreSQL有更加丰富的数据类型和可扩展性,并因此被广泛采用。在实际工作中,若企业业务需求变动,则有可能面临PG高可用集群迁移的情况。
云掣具备丰富的帮助企业迁移数据平台的实战经验,提供专业的数据库运维托管服务,本文旨在通过一次PG高可用集群环境迁移但IP不变的成功客户案例,结合云掣在多次客户数据迁移过程中总结出的宝贵经验,与大家分享两种安全稳定迁移PG高可用集群的方案,并将两种方案的优缺点进行了对比,便于大家根据自己的情况择优选择。

一、客户背景
某客户线下环境有2套PG高可用自建集群,由于之前使用的CentOS系统,官方已经不再维护了,所以需由当前的CentOS环境迁至新的RedHat环境。2套PG均是REPMGR高可用集群架构,迁移切换后,新环境需使用旧环境的IP地址。

二、迁移方案
方案一
①在新的RedHat环境安装PG作为当前主库的从节点,通过REPMGR将当前主库数据克隆至RedHat环境的从节点。
②数据同步完成后安排时间先将CentOS环境的IP与RedHat环境的IP进行替换、然后将当前CentOS环境主节点切至RedHat环境的某个从节点。
③切换完成后,CentOS环境旧报表库的逻辑复制不再同步新数据,需在RedHat环境部署新报表库并重新创建新的逻辑复制将新主库数据同步至新报表库。
④RedHat环境新报表库数据同步完成后,重新部署新主库与新报表库的容灾备库。
⑤图例:
·新的RedHat环境搭建从库并克隆数据的架构图:

·切换RedHat环境的从库5、从库8为新主库,切换后通过逻辑复制同步新主库数据至新报表库的架构图:

方案二
在新的RedHat环境搭建与当前CentOS环境完全相同的集群架构,通过逻辑复制将CentOS环境主库的数据同步至RedHat环境的主库,数据同步完成后安排时间暂停所有PG、将CentOS环境的IP与RedHat环境的IP进行替换、修改相关配置文件后重启PG。

两种方案优缺点对比
方案一CentOS环境与RedHat环境之间PG的数据同步通过物理流复制实现,该方法的优点是同步数据速度快、操作简单、同步对象齐全。缺点是RedHat环境的报表库需要等切主后才能开始数据同步,报表库不可用的时间比较长。
方案二CentOS环境与RedHat环境之间PG的数据同步通过逻辑复制实现,逻辑复制操作麻烦、有很多限制,比如表必须都有主键、每个库都需要创建一个逻辑复制同步通道,逻辑复制的同步能力和稳定性比较差,可能出现同步状态异常或出现较大延迟。另外逻辑复制只同步数据,需用插件同步DDL语句,还需通过备份将CentOS环境的账号权限、视图等对象定义恢复至RedHat环境。该方法的优点是RedHat环境报表库的数据一开始就可以同步,报表库不可用的时间很短。

三、方案实施
确定操作方案
经与业务方沟通确认,报表库不可用时间长的影响较低,决定采用方案一进行迁移。
具体操作步骤
RedHat环境准备工作
①RedHat环境搭建PG、REPMGR,其中见证节点初始化PG,从节点采用REPMGR进行数据克隆、物理复制同步,记录数据克隆耗时及对当前主库的性能消耗影响。
②将RedHat环境部署的从节点和见证节点的PG,加入至当前主库所在的REPMGR集群。
③RedHat环境安装pg_probackup,用于WAL日志归档及备份任务设置。
④RedHat环境新报表库初始化PG。
RedHat环境新报表库同步测试
①梳理报表库数据信息
CentOS环境,当前报表库的数据分为3部分,第1部分由PG集群1的主库逻辑复制同步而来,第2部分由PG集群2的主库逻辑复制同步而来,第3部分是业务自身在报表库新增的schema。
对于RedHat环境的新报表库,第1、2部分的数据需待主库切换后由新主通过逻辑复制同步至新报表库,第3部分需要通过pg_dump将相关schema数据备份恢复至新报表库。
②备份恢复测试
针对业务自身在报表库新增的schema,需通过pg_dump备份的方式将数据恢复至新报表库,测试该部分数据备份恢复的耗时情况及期间的性能消耗情况。
备份恢复的方式是先用pg_dumpall将当前报表库所有对象结构进行备份再用pg_dump对相关schema的数据进行备份,相关命令如下:

--备份所有对象结构
pg_dumpall -s -U{user_name} -p{port} -f "/xxx/all_object.sql"

--备份指定schema数据
pg_dump -Fd -v -a -U{user_name} -p{port} -d{db_name} -n{schema_name} -j2 -f "/xxx/{schema_name}.dump"

--恢复所有对象结构
psql -U{user_name} -p{port} -d{db_name} -f /xxx/all_object.sql >> /xxx/all_object.log 2>&1

--恢复指定schema数据
pg_restore -p{port} -d{db_name} -U{user_name} -j2 /xxx/schema_name.dump >> /xxx/{schema_name}.log 2>&1
③逻辑复制同步测试
针对由PG集群1、2的主库逻辑复制同步至报表库的数据,将RedHat环境从库5、从库8作为单独新主启动,测试新主逻辑同步至新报表库所需耗时及期间的性能消耗情况。
RedHat环境从库5、从库8数据同步完成后,单独作为新主启动,作为测试逻辑复制同步的源端:

--操作步骤如下
a.stop PG;
b.修改postgres.auto.conf,注释掉synchronous_standby_names、primary_conninfo、primary_slot_name;
c.删掉pg data目录下的standby.signal文件;
d.start PG
创建RedHat环境新主至新报表库的逻辑复制同步任务:

--新报表库部分命令如下
create subscription {sub_name} connection 'host={master_ip} port={port} dbname={db_name} user={user_name} password={password}' publication {pub_name};

alter subscription {sub_name} refresh publication ;
RedHat新主库与新报表库安装pgl_ddl_deploy插件:

--新主库部分命令如下
CREATE EXTENSION pgl_ddl_deploy;
INSERT INTO pgl_ddl_deploy.set_configs (set_name,include_schema_regex,driver) VALUES('{pub_name}','{schema_name}','native'::pgl_ddl_deploy.driver);
SELECT pgl_ddl_deploy.deploy('{pub_name}') from pgl_ddl_deploy.set_configs;
SELECT pgl_ddl_deploy.add_role(oid) from pg_roles where rolname='{user_name}';
select * from pgl_ddl_deploy.set_configs;

--新报表库部分命令如下
CREATE EXTENSION pgl_ddl_deploy;
SELECT pgl_ddl_deploy.add_role(oid) from pg_roles where rolname='{user_name}';
alter subscription {sub_name} refresh publication;
正式切换整体步骤
①准备好RedHat环境,清理新报表库测试时的相关环境,令其满足切换条件,包括RedHat环境PG与REPMGR搭建完成、从库数据同步完成、新报表库初始化完成。
②因后续RedHat环境与CentOS环境IP需互换,IP更换后PG在REPMGR集群中需重新注册,提前注销REPMGR集群中的从节点、见证节点。
③关闭业务。
④关闭PG及监控,先关主库,后关从节点、见证节点、报表库、容灾备库,最后停监控告警。
⑤整体替换IP,将CentOS环境与RedHat环境的IP进行替换。
⑥修改REPMGR与PG相关配置文件中与IP有关的相关内容。
⑦启动PG,先启主库,后启从节点、见证节点、报表库。
⑧将主节点、从节点、见证节点重新注册至REPMGR集群。
⑨切主,将主节点由CentOS环境的主库切至RedHat环境的其中一个从库,切换后VIP会绑定新主。
⑩将切换后的旧主作为新主的从节点,重新加入REPMGR集群。
⑪ 开启监控告警。
⑫处理RedHat环境新报表库,将CentOS环境报表库自身产生的数据通过备份恢复至RedHat环境新报表库,将需同步的数据由RedHat环境新主库逻辑复制同步至新报表库。
⑬WAL归档与备份任务,确认复制同步状态及延迟情况,核对同步对象数量、表数据量是否一致。
⑭ 业务,确认业务是否正常。

四、总结
通过两种不同的迁移方案,均可实现PG高可用集群的迁移切换,便于结合业务需求使用更为稳定的物理复制同步方案,使客户的PG集群整体平稳迁至新环境。
云掣专注于可观测运维,致力解决企业上云难、用云难、管云难三大问题。基于云数据库提供7*24小时保障服务,提供开发支持、数据库体系规范、持续优化、数据库架构支持,保障企业数据库高效稳定运行。全面提升企业的运维效率和稳定性,助力企业完成云时代的数字化转型,满足客户在数据库管理和云迁移方面的多样化需求!
想了解或咨询更多有关云掣产品、服务、客户案例的朋友,点击云掣进入官网。

《数据资产管理白皮书》下载地址:https://www.dtstack.com/resources/1073/?src=szsm

《行业指标体系白皮书》下载地址:https://www.dtstack.com/resources/1057/?src=szsm

《数据治理行业实践白皮书》下载地址:https://www.dtstack.com/resources/1001/?src=szsm

《数栈V6.0产品白皮书》下载地址:https://www.dtstack.com/resources/1004/?src=szsm

想了解或咨询更多有关袋鼠云大数据产品、行业解决方案、客户案例的朋友,浏览袋鼠云官网:https://www.dtstack.com/?src=szsm

同时,欢迎对大数据开源项目有兴趣的同学加入「袋鼠云开源框架钉钉技术群」,交流最新开源技术信息,群号码:30537511,项目地址:https://github.com/DTStack

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

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

相关文章

pip 下载包失败(特定版本eg: torch==2.2.1+cu118)

背景介绍: 有时候要复现其项目的实验时,环境需要尽量与原作者实验的环境靠近,这样结果浮现的也更加准确。 这里当需要安装torch==2.2.1+cu118等特定版本的时,出现了报错:解决办法: 根据 PyTorch 官方推荐,可以使用以下命令来安装 torch 2.2.1+cu118 版本 pip install to…

智慧工地算法视频分析服务器物料堆放识别算法:提升建筑工地环境保护与效率的关键技术

随着经济的发展和城市化进程的加速,建筑工地数量急剧增加,物料堆放管理成为工地管理中至关重要的一环。裸露的物料堆不仅会造成扬尘污染,影响空气质量,还可能引发一系列环境问题。为了解决这一难题,视频分析服务器的物料堆放识别算法成为了一项关键技术。物料堆放识别算法…

【NLP高频面题 - LLM架构篇】大模型为何使用RMSNorm代替LayerNorm?

【NLP高频面题 - LLM架构篇】大模型为何使用RMSNorm代替LayerNorm? 重要性:★【NLP高频面题 - LLM架构篇】大模型为何使用RMSNorm代替LayerNorm? 重要性:★★★ 💯NLP Github 项目:NLP 项目实践:fasterai/nlp-project-practice 介绍:该仓库围绕着 NLP 任务模型的设计、…

LLM大模型: CV领域常见attention思路变种及其作用(一)

多年前做传统的机器学习,主要用的是LR、SVM、bayes、浅层nerual network、decision tree、random forest、GBDT等,这些分类或回归模型要想AUC、ROC等指标高,最核心的就是构造特征了!为此还专门诞生了一个细分领域:feather enginering,专门研究怎么构造好的feather!就实战…

[Vue] Vue optimization

Table of contentUse key Feeze object Use composition function (Vue2) Use computed lazy v-model v-model 保持对象引用稳定 Use v-show instead of v-if defer keep-alive 长列表优化 打包体积优化Use key Normally use key when you have v-for, and this keyshould be u…

启动第三方程序并嵌入到指定容器中

通过调用API 方法实现嵌入第三方程序窗口到指定容器 Code using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Win…

centos7定时备份mysql发送邮件

前几天搞服务器备份发邮件的功能,搞了好长时间都没调通,想必有很多人和我遇到过一样的问题,今天分享出来帮大家解决燃眉之急。我不允许还有不会的童鞋出现。安装mailx(邮件服务) yum install mailx -y编辑配置文件 vim /etc/mail.rcset from=xxx@qq.com #发信人地址 set s…

RSA2048生成及使用

RSA2048 小编最近裸辞了,以前工作中涉及到的RSA加密使用方法一直没有总结。 所以把RSA2048的密钥生成和使用方法写一写免得以后忘记(而且网上好多碎片化信息没有总结成一套)。 我选择的开源代码是包含了除N,P,Q,E,D之外还需要E1,E2,C的处理方式。其实大差不差,因为按照我的…

WPF从如何动态从本地文件加载界面

在前面的文章中,我介绍过一种报告模板的实现思路。就是用的XAML本地加载。 https://www.cnblogs.com/zhaotianff/p/18254574在另外一篇文章中,介绍了XAML是如何被转换成对象的。 https://www.cnblogs.com/zhaotianff/p/18363828在这篇文章中,简单介绍了InitializeComponent函…

Python 爬虫必备杀器,xpath 解析 HTML

最近工作上写了个爬虫,要爬取国家标准网上的一些信息,这自然离不了 Python,而在解析 HTML 方面,xpath 则可当仁不让的成为兵器谱第一。 你可能之前听说或用过其它的解析方式,像 Beautiful Soup,用的人好像也不少,但 xpath 与之相比,语法更简单,解析速度更快,就像正则…

视频调色 LUT 教程 All In One

视频调色 LUT 教程 All In One Lookup tables (LUTs) 在图像处理中,查找表通常称为 LUT(或 3DLUT),并为一系列索引值中的每一个提供输出值。一种常见的 LUT,称为颜色图或调色板,用于确定特定图像将显示的颜色和强度值。在计算机断层扫描中,“窗口化”是指用于确定如何显…

探索中国风水学与AI人工智能的融合之旅

在古老的东方智慧中,风水学一直是中国传统文化的重要组成部分。它不仅是一种哲学思想,更是一种生活方式,指导人们如何与自然和谐共存,寻求生活的平衡与和谐。随着科技的发展,人工智能(AI)技术的兴起为风水学带来了新的解读和应用方式。本文将带您走进中国风水学与AI结合…