高效安全迁移:PG 高可用集群实战方案深度解析
PostgreSQL 是一个开源的数据库管理系统,相比于其他开源数据库系统,PostgreSQL 有更加丰富的数据类型和可扩展性,并因此被广泛采用。在实际工作中,若企业业务需求变动,则有可能面临 PG 高可用集群迁移的情况。
云掣具备丰富的帮助企业迁移数据平台的实战经验,提供专业的数据库运维托管服务,本文旨在通过一次 PG 高可用集群环境迁移但 IP 不变的成功客户案例,结合云掣在多次客户数据迁移过程中总结出的宝贵经验,与大家分享两种安全稳定迁移 PG 高可用集群的方案,并将两种方案的优缺点进行了对比,便于大家根据自己的情况择优选择。
一、客户背景
某客户线下环境有 2 套 PG 高可用自建集群,由于之前使用的 CentOS 系统,官方已经不再维护了,所以需由当前的 CentOS 环境迁至新的 RedHat 环境。2 套 PG 均是 REPMGR 高可用集群架构,迁移切换后,新环境需使用旧环境的 IP 地址。
说明:当前 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 环境搭建从库并克隆数据的架构图:
·切换 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
评论