X86架构迁移鲲鹏/ARM架构方案之--瀚高数据库迁移

举报
长弓三石 发表于 2024/04/25 14:46:40 2024/04/25
【摘要】 瀚高数据库是一款优秀的国产关系型数据库,兼容PostgreSQL,在自主可控的项目开发中有广泛的应用,在笔者负责设计的某平台中,使用该数据库作为关键业务数据库使用。当初该平台部署在X86架构下,近期因为信创要求,需要规划切换为鲲鹏架构,所以初步设计了下面的方案,把X86架构下的瀚高数据库迁移到鲲鹏架构下,并且保证整个过程平稳尽可能减少停机维护时间。

1.前言

瀚高数据库是一款优秀的国产关系型数据库,兼容PostgreSQL,在自主可控的项目开发中有广泛的应用,在笔者负责设计的某平台中,使用该数据库作为关键业务数据库使用。当初该平台部署在X86架构下,近期因为信创要求,需要规划切换为鲲鹏架构,所以初步设计了下面的方案,把X86架构下的瀚高数据库迁移到鲲鹏架构下,并且保证整个过程平稳尽可能减少停机维护时间。

2.迁移方案

2.1 原理

基于复制槽的数据库发布订阅方案,在现有X86架构数据库服务器上发布需要同步数据库数据的变更,在ARM架构数据库服务器上订阅该数据库发布的变更,当有数据库数据的变化,比如INSERT、UPDATE、DELETE以及TRUNCATE的任意组合时,发布服务器会发布该变更,订阅服务器在接收到这些变更后,在目标数据库服务器重放该变更,从而实现了发布订阅数据库的数据同步。

在具体的实现上,数据库服务器把变更的预写日志记录到WAL文件中,发布服务器发布WAL记录的LSN(日志序列号)到每一个订阅对应的复制槽上,作为复制槽的最新LSN,当订阅服务器成功应用某一个LSN对应的WAL记录后,复制槽会向后推进当前LSN到下一个LSN,当所有复制槽的当前LSN记录都向后推进后,发布服务器才会删除所有复制槽中最早的当前LSN之前的WAL记录,这样可以保证所有变更日志在被订阅服务器应用前不会被删除。

2.2 优点

使用基于复制槽的数据库发布订阅方案,在初始化完成后,只需要同步变更的数据即可,可以实现发布数据库和订阅数据库的准实时数据同步,从而最大限度减少停机时间,使系统切换时间维持在分钟级。

2.3 迁移步骤

步骤1:在ARM(鲲鹏)架构服务器安装相同版本的瀚高数据库,并且确保ARM架构和X86架构数据库服务器处于同一个局域网内(后文把X86架构数据库称为发布数据库,ARM架构数据库为订阅数据库)。

步骤2:备份发布数据库的对象定义(模式),不备份数据,参考备份命令如下:


pg_dump -s dbname ->dbname_sql.bak复制

步骤3:在订阅数据库服务器上创建同名数据库,然后使用发布数据库的备份文件在订阅数据库恢复数据库对象定义,参考恢复命令如下:


psql -d dbname -f dbname_sql.bak复制

步骤4:检查发布数据库的wal_level级别、max_replication_slots、max_logical_replication_workers、max_worker_processes配置的数量:

show wal_level

show max_replication_slots

show max_logical_replication_workers

show max_worker_processes

        如果不满足要求,就按照如下的配置修改postgresql.conf并重启服务器:

wal_level = logical

max_replication_slots = 10

max_logical_replication_workers = 10

max_worker_processes =16

具体的配置值根据实际需要确定,但要确保满足如下的条件



max_worker_processes > max_logical_replication_workers

max_worker_processes > max_wal_senders

max_wal_senders > max_replication_slots复制

步骤5:在发布数据库创建所有数据库变更的发布,参考命令如下:


CREATE PUBLICATION pub_all_table FOR ALL TABLES;复制

步骤6:在订阅数据库创建对pub_all_table的订阅,参考命令如下:


CREATE SUBSCRIPTION sub_all_table

    CONNECTION 'host=**** port=**** user=**** dbname=**** password=****'

    PUBLICATION pub_all_table复制

步骤7:订阅数据库会自动同步发布数据库的数据,在发布数据库通过如下的命令可以查看当前复制槽的工作情况:


select * from pg_replication_slots复制

 如果没有形如sub_all_table_****的临时复制槽,表明数据已经初始化完毕,进入增量同步的状态,此时发布数据库的变化会在秒级同步到订阅数据库。

步骤8:检查订阅数据库的数据完备性(抽查关键业务表数据是否和发布数据库一致),确认无误后,应用停机,然后把平台配置文件文件(比如nacos)中的数据库连接指向订阅数据库,同时停止订阅数据库的订阅,也可以删除该订阅,停止订阅和删除订阅的参考命令如下:


ALTER SUBSCRIPTION sub_all_table DISABLE;

DROP SUBSCRIPTION sub_all_table;复制

步骤9:重新启动应用,检查系统运行状态是否正常,如果不正常再停止应用,并切换为原先的X86服务器,待问题解决后重新开始迁移过程。

2.4 迁移周期

该方案前期准备时间较长,可以提前一段时间做好迁移准备,但是准备期间不影响系统正常运行,在做好准备工作并实现数据库的逻辑同步后,停机时间只有几分钟,在业务量较少的时间段,比如晚上,基本不会对正常运行造成显著的影响。

2.5 注意事项

  1. 首先选择对业务影响较小的数据库进行迁移,迁移后运行24小时以上,检查在新架构下有没有异常,无异常再进行其他数据库的迁移。
  2. 在迁移前做好数据库物理备份,并且保证X86架构数据库处于随时可用状态。
  3. 通知相关的开发、实施、业务处理人员,选择影响较小的时间段进行迁移。

3. 备选方案

步骤1:在Arm架构服务器安装同版本的瀚高数据库

      步骤2:对X86架构数据库进行全量备份,然后在Arm架构数据库恢复该备份。

      步骤3:应用停机,然后对X86架构数据库进行增量备份并复制到Arm架构数据库服务器;

      步骤4:在Arm架构数据库恢复增量备份。

      步骤5:修改应用nacos数据库配置,指向Arm架构数据库,然后启动应用,检查系统是否正常。

      备选方案步骤相对简单,缺点是停机时间较长,主要是需要备份数据库,然后复制备份文件到目标服务器,最后在目标数据库恢复备份,时间根据环境不同需要几十分钟到几个小时。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。