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

云掣YunChe4个月前最新动态179
PostgreSQL是一个开源的数据库管理系统,相比于其他开源数据库系统,PostgreSQL有更加丰富的数据类型和可扩展性,并因此被广泛采用。在实际工作中,若企业业务需求变动,则有可能面临PG高可用集群迁移的情况。


云掣具备丰富的帮助企业迁移数据平台的实战经验,提供专业的数据库运维托管服务,本文旨在通过一次PG高可用集群环境迁移但IP不变的成功客户案例,结合云掣在多次客户数据迁移过程中总结出的宝贵经验,与大家分享两种安全稳定迁移PG高可用集群的方案,并将两种方案的优缺点进行了对比,便于大家根据自己的情况择优选择。
 客户背景
某客户线下环境有2套PG高可用自建集群,由于之前使用的CentOS系统,官方已经不再维护了,所以需由当前的CentOS环境迁至新的RedHat环境。2套PG均是REPMGR高可用集群架构,迁移切换后,新环境需使用旧环境的IP地址。

image.png

说明:当前2套PG高可用集群使用REPMGR实现集群内故障切换,每套PG集群有1个主节点2个从节点1个见证节点,2套PG主节点的部分schema会通过逻辑复制同步至报表库,2套PG的主节点及报表库均有1个容灾备库。
迁移方案

方案一

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

image (3).png

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

 方案二

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

 两种方案优缺点对比

方案一CentOS环境与RedHat环境之间PG的数据同步通过物理流复制实现,该方法的优点是同步数据速度快、操作简单、同步对象齐全。缺点是RedHat环境的报表库需要等切主后才能开始数据同步,报表库不可用的时间比较长。

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

 方案实施

 确定操作方案

经与业务方沟通确认,报表库不可用时间长的影响较低,决定采用方案一进行迁移。

具体操作步骤

一、RedHat环境准备工作

  1. RedHat环境搭建PG、REPMGR,其中见证节点初始化PG,从节点采用REPMGR进行数据克隆、物理复制同步,记录数据克隆耗时及对当前主库的性能消耗影响。

  2. 将RedHat环境部署的从节点和见证节点的PG,加入至当前主库所在的REPMGR集群。

  3. RedHat环境安装pg_probackup,用于WAL日志归档及备份任务设置。

  4. RedHat环境新报表库初始化PG。

二、RedHat环境新报表库同步测试

  1. 梳理报表库数据信息

CentOS环境,当前报表库的数据分为3部分,第1部分由PG集群1的主库逻辑复制同步而来,第2部分由PG集群2的主库逻辑复制同步而来,第3部分是业务自身在报表库新增的schema。

对于RedHat环境的新报表库,第1、2部分的数据需待主库切换后由新主通过逻辑复制同步至新报表库,第3部分需要通过pg_dump将相关schema数据备份恢复至新报表库。

  1. 备份恢复测试

针对业务自身在报表库新增的schema,需通过pg_dump备份的方式将数据恢复至新报表库,测试该部分数据备份恢复的耗时情况及期间的性能消耗情况。

备份恢复的方式是先用pg_dumpall将当前报表库所有对象结构进行备份再用pg_dump对相关schema的数据进行备份,相关命令如下:

C++
--备份所有对象结构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
  1. 逻辑复制同步测试

针对由PG集群1、2的主库逻辑复制同步至报表库的数据,将RedHat环境从库5、从库8作为单独新主启动,测试新主逻辑同步至新报表库所需耗时及期间的性能消耗情况。

RedHat环境从库5、从库8数据同步完成后,单独作为新主启动,作为测试逻辑复制同步的源端:

C++
--操作步骤如下a.stop PG;b.修改postgres.auto.conf,注释掉synchronous_standby_names、primary_conninfo、primary_slot_name;c.删掉pg data目录下的standby.signal文件;d.start PG

创建RedHat环境新主至新报表库的逻辑复制同步任务:

C++
--新报表库部分命令如下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插件:

C++
--新主库部分命令如下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;

三、正式切换整体步骤

  1. 准备好RedHat环境,清理新报表库测试时的相关环境,令其满足切换条件,包括RedHat环境PG与REPMGR搭建完成、从库数据同步完成、新报表库初始化完成。

  2. 因后续RedHat环境与CentOS环境IP需互换,IP更换后PG在REPMGR集群中需重新注册,提前注销REPMGR集群中的从节点、见证节点。

  3. 关闭业务。

  4. 关闭PG及监控,先关主库,后关从节点、见证节点、报表库、容灾备库,最后停监控告警。

  5. 整体替换IP,将CentOS环境与RedHat环境的IP进行替换。

  6. 修改REPMGR与PG相关配置文件中与IP有关的相关内容。

  7. 启动PG,先启主库,后启从节点、见证节点、报表库。

  8. 将主节点、从节点、见证节点重新注册至REPMGR集群。

  9. 切主,将主节点由CentOS环境的主库切至RedHat环境的其中一个从库,切换后VIP会绑定新主。

  10. 将切换后的旧主作为新主的从节点,重新加入REPMGR集群。

  11. 开启监控告警。

  12. 开始处理RedHat环境新报表库,将CentOS环境报表库自身产生的数据通过备份恢复至RedHat环境新报表库,将需同步的数据由RedHat环境新主库逻辑复制同步至新报表库。

  13. 设置WAL归档与备份任务,确认复制同步状态及延迟情况,核对同步对象数量、表数据量是否一致。

  14. 开启业务,确认业务是否正常。

总结

通过两种不同的迁移方案,均可实现PG高可用集群的迁移切换,便于结合业务需求使用更为稳定的物理复制同步方案,使客户的PG集群整体平稳迁至新环境。

云掣专注于可观测运维,致力解决企业上云难、用云难、管云难三大问题。基于云数据库提供7*24小时保障服务,提供开发支持、数据库体系规范、持续优化、数据库架构支持,保障企业数据库高效稳定运行。全面提升企业的运维效率和稳定性,助力企业完成云时代的数字化转型,满足客户在数据库管理和云迁移方面的多样化需求!

云掣基于多年在运维领域的丰富时间经验,编写了《云运维服务白皮书》,欢迎大家互相交流学习:

《云运维服务白皮书》下载地址:https://fs80.cn/v2kbbq

想了解更多大数据运维托管服务、数据库运维托管服务、应用系统运维托管服务的的客户,欢迎点击云掣官网沟通咨询:https://yunche.pro/?t=shequ


阅读剩余的69%

相关文章

袋鼠云秋季发布会圆满落幕,AI驱动让生产力数智化

袋鼠云秋季发布会圆满落幕,AI驱动让生产力数智化

在当今时代,AI 的发展如汹涌浪潮,其速度之快超越了任何历史时期。它以前所未有的迅猛之势,渗入到各个领域的不同场景之中,悄然重塑着商业模式与人们的生活方式。在 AI 逐渐成为企业基础属性的背景下,袋鼠...

可观测领域系列之存储分析鉴赏Talk(Part 1)

可观测领域系列之存储分析鉴赏Talk(Part 1)

前面有文章也提到过,可观测领域目前尚存的一些短板,其中存储分析就是其一,只能根据过往的一些经验,以及调研分析来尝试帮大家鉴赏下当前这个领域的一些技术和竞品分析。在分析这个问题之前,我们先从场景出发,以...

应对复杂架构下的监控挑战?统一运维可观测能力是关键!

在全球数字化变革背景下,企业需适应数字经济与市场变化,进行系统性数字化转型。在“十四五”规划指导下,企业纷纷探求数字化应用之路,大数据、云计算、人工智能、区块链等技术成了热门话题,其中云运维备受瞩目。...

指标+AI+BI,袋鼠云构建智能数据分析新范式

指标+AI+BI,袋鼠云构建智能数据分析新范式

10月30日,袋鼠云成功举办了以“AI驱动,数智未来”为主题的2024年秋季发布会。大会深度探讨了如何凭借 AI 实现新的飞跃,重塑企业的经营管理方式,加速数智化进程。作为大会的重要环节之一,袋鼠云数...

现场太火爆,CEO徐进挺带来Oracle上云最佳实践

现场太火爆,CEO徐进挺带来Oracle上云最佳实践

10月20号,云栖大会“企业上云与数据管理专场论坛”上,袋鼠云CEO徐进挺(丁原)以《阿里云&袋鼠云oracle上云最佳实践》为主题发表演讲,以Oracle单节点、Oracle DG、Orac...

MySQL数据库线程池泄露场景解决方案

MySQL数据库线程池泄露场景解决方案

在数字化时代,数据是企业的核心资产,而数据库则是存储和管理这些资产的重要仓库。本文通过云掣为某信息化管理行业客户快速解决MySQL数据库故障的案例,详细的分享了MySQL数据库出现问题时的解决思路和具...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。