X86架构迁移ARM/鲲鹏架构方案之--不停机Mongodb数据库迁移
1.前言
Mongodb是内存型的非关系型数据库,可以支持海量的数据存储,特别是在大数据量的查询性能方面,比传统的数据库有较大的优势。和上一篇文章中同样的原因,也需要迁移到鲲鹏架构的服务器中。
2.迁移方案
2.1 原理
使用Mongodb副本集的方式进行不停机的数据迁移,多个Mongodb实例构成一个副本集,每个副本集有一个主节点和若干个副本节点,应用对主节点的数据修改都会同步给副本节点。在现有的3节点X86架构Mongodb副本集上,加入多个Arm架构的Mongodb实例,在完成数据同步后,依次对X86架构的副本集进行停机,最终使用3台Arm架构的Mongodb实例代替原先的3台X86架构的Mongodb实例,从而实现了不停机的数据迁移。
2.2 优点
迁移过程平滑,随时可以终止,不会造成业务中断等影响。
2.3 迁移步骤
步骤1:在ARM架构服务器上安装和X86架构同样版本的Mongodb实例。
步骤2:把原先X86架构下的Mongodb副本集密钥文件keyFile复制到ARM架构下同样的位置,设置该文件的权限,参考命令如下(假设文件名为auth.key,docker用户为systemd-coredump):
chown systemd-coredump:systemd-coredump auth.key
chmod 600 auth.key
步骤3:配置新的Mongodb实例,以副本集形式启动Mongodb,指定keyFile(假设文件名为auth.key),参考命令如下:
mongod --replSet rs --keyFile /etc/auth.key
如果使用Docker Composer,docker-compose.yaml添加启动命令:
command: mongod --replSet rs --keyFile /etc/auth.key
步骤4:启动ARM实例,然后登录副本集的主库,添加ARM架构实例作为新节点,添加时设置优先级和投票权都为0,参考命令如下:
rs.add( { host: "ip:port", priority: 0, votes: 0 } )
步骤5:等待新加入的Mongodb节点从主库同步数据,加入副本集的节点开始状态为STARTUP2,同步完成变为SECONDARY,可以通过如下的命令查看节点的状态:
rs.status()
步骤6:新节点同步完毕,修改优先级和投票权,参考命令如下:
var cfg = rs.conf()
cfg.members[3].priority = 1
cfg.members[3].votes = 1
rs.reconfig(cfg)
修改完毕后使用rs.config()()检查最新节点配置,确保修改成功,这样新节点就加入了副本集并开始提供服务。
步骤7:观察系统运行一段时间(比如24小时),确保新的节点可以持续正常提供服务。
步骤8:重复过程1到过程4,把剩下的两个ARM节点加入到副本集。
步骤9:依次对X86架构节点进行停机下线,该过程可以持续几天时间,比如每天下线一个节点,确保从X86架构到ARM架构的平稳过度。
步骤10:最终下线所有X86节点,从而完成Mongodb数据库的不停机迁移。
2.4 迁移周期
主要时间在新加的ARM架构副本集的搭建及数据同步上,该过程不影响业务的正常运行,在不停机的情况下,根据数据量不同一般几十分钟到几个小时即可完成数据同步。考虑到服务器和应用程序的安装和调试,根据软硬件环境和网络情况,整个迁移周期在三个工作日以内。
2.5 注意事项
- 首先选择对业务影响较小的数据库进行迁移,迁移后运行24小时以上,检查在新架构下有没有异常,无异常再进行其他数据库的迁移。
- 在迁移前做好数据库物理备份,并且保证X86架构节点在移出副本集后处于随时可用状态。
- 通知相关的开发、实施、业务处理人员,选择影响较小的时间段进行迁移。
3.备选方案
步骤1:在Arm架构服务器安装同版本的Mongodb数据库
步骤2:对X86架构数据库进行全量备份,然后在Arm架构数据库恢复该备份。
步骤3:应用停机,然后对X86架构数据库进行增量备份并复制到Arm架构数据库服务器;
步骤4:在Arm架构数据库恢复增量备份。
步骤5:修改应用配置文件(比如nacos)的数据库配置,指向Arm架构数据库,然后启动应用,检查系统是否正常。
备选方案在ARM架构Mongodb实例和X86架构Mongodb实例无法同时组网时可以使用,正常组网情况下不建议使用。
- 点赞
- 收藏
- 关注作者
评论(0)