记录一次云原生线上服务数据迁移全过程

这篇具有很好参考价值的文章主要介绍了记录一次云原生线上服务数据迁移全过程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景

校园 e 站,一群大学生在毕业前夕,为打破信息差而开发的一个校园论坛。一个从零到一全靠一群大学生的满腔热忱而打造的一个前后端分离以小程序为最终展示载体的一个微服务架构体系的 App。并发量的初始定位为 w 级,使用到多级缓存、数据分库等等前沿技术,当然这也是本次就是数据迁移的根本原因所在,架构过于庞大,用户较少,资源空等率高,所以决定将服务缩容,降低运营成本。
记录一次云原生线上服务数据迁移全过程,网站部署,spring boot,docker
整体架构如上所示,本次需要迁移的数据重点为,Mongo 以及 MySQL 持久层数据。

迁移方案调研

因为持久层数据本身是通过 docker-compose进行容器编排加docker volume脚本启动,所以调研到的方案大体可分为以下几种:

  1. 在磁盘级别进行 volume迁移
  2. 以旧数据库为主库,新数据库为从库,进行主从同步
  3. 在应用层面使用应用本身的备份恢复功能进行数据迁移

三种方案的优缺点

方案 优点 缺点
磁盘 暂时想不到,可能是看起来很牛 技术要求高,容易出现兼容性问题
主从 停机时间短 需要改动两次服务启动脚本(主从搭建时,从库切主库)
备份恢复 操作简单,风险低 停机时间较长

在综合考虑下,选择了方案三进行备份恢复。
原因也很简单,生产级别一般都是选择风险最低且操作简单的方式,因为不管你有多牛,也没办法保证迁移过程不会出现一点问题~

迁移过程

服务监控脚本定时任务暂停

本地副本服务启动,在线服务下线

MySQL 数据迁移

遇到的第一个问题是,导出的文件压缩前 38M zip 压缩后依然 3.9 M,远大于 phpmyadmin 允许上传的 2M ,此时有两个方案:一是调大数据导入的文件大小限制,二是减少数据量。按道理正常使用数据,不应该那么大,毕竟用户量不大,且主要数据存在 mongo 中,在查询了之后发现,有一个请求时间监控的表数据量达到 50W
记录一次云原生线上服务数据迁移全过程,网站部署,spring boot,docker
执行 sql 将数据压缩,

-- 数据平均
insert into controller_time(controller, time_cost, success) 
    SELECT controller, AVG(time_cost) as time_cost, success
    FROM controller_time where id < 563003
    GROUP BY controller, success
;

-- 删除旧数据
delete from controller_time where id < 563003;

controller_time 数据压缩后导出文件 4.5M 压缩后 359K,导入新数据库约十秒。

Mongo 数据迁移

进入 新机器 容器内,到 /usr/bin目录调用,容器已有的 mongo命令
记录一次云原生线上服务数据迁移全过程,网站部署,spring boot,docker
记录一次云原生线上服务数据迁移全过程,网站部署,spring boot,docker

  • 将远程 mongo(旧的数据库)数据备份到新机器容器内
mongodump -h <remote_ip>:<remote_port> -d <database>  -u<user_name> -p<user_password> --authenticationDatabase admin -
o /home/mongodb/

记录一次云原生线上服务数据迁移全过程,网站部署,spring boot,docker

  • 数据恢复到新 mongo
mongorestore  -u  <local_user_name>  -p <user_password> --port 27017  --authenticationDatabase admin -d <database>   
/home/mongodb/

记录一次云原生线上服务数据迁移全过程,网站部署,spring boot,docker

  • 数据恢复结果

记录一次云原生线上服务数据迁移全过程,网站部署,spring boot,docker

切换新数据库 ip 本地服务启动

记录一次云原生线上服务数据迁移全过程,网站部署,spring boot,docker

数据库连接验证

记录一次云原生线上服务数据迁移全过程,网站部署,spring boot,docker

服务打包部署

mvn clean install package

记录一次云原生线上服务数据迁移全过程,网站部署,spring boot,docker

服务重启

记录一次云原生线上服务数据迁移全过程,网站部署,spring boot,docker

前端恢复正常

记录一次云原生线上服务数据迁移全过程,网站部署,spring boot,docker

监控脚本定时任务启动

旧服务器器容器关闭

记录一次云原生线上服务数据迁移全过程,网站部署,spring boot,docker

迁移总结

总涉及用户 6592 个用户,其中已通过校园认证的用户 3943 ,全部数据迁移完毕,服务恢复于 13:47 总耗时约 17 分钟。
记录一次云原生线上服务数据迁移全过程,网站部署,spring boot,docker文章来源地址https://www.toymoban.com/news/detail-758986.html

到了这里,关于记录一次云原生线上服务数据迁移全过程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 记录一次开机内存分析的全过程

    作者:zzy的学习笔记 记录一次开机内存分析的全过程,尽量详尽的介绍常用内存分析工具和命令行的使用,结合具体问题探讨开机内存分析的实践经验。通过这篇文章我会介绍开机内存的常用测试分析工具的基本使用方法,以及如何通过抓取出来的内存数据得出下一步的分析

    2024年02月07日
    浏览(44)
  • 记一次云主机如何挂载对象存储

    随着云计算的发展,公有云成为中小型企业建设业务系统的首选,而对象存储则是存储里面必不可少的存储产品,对象存储不仅可以提供海量、高可靠、安全的服务,而且价格相对普通存储来说会便宜很多,并且不受带宽的限制,仅限于本地下载和上传的网速,对象存储应用

    2024年02月05日
    浏览(38)
  • 记录一次久远git仓库迁移

    因为项目需求,公司收购了一个第三方的项目,包含源码。需要将该项目上传到我们公司自己的gitlab上。没过脑子一顿操作: 然后,,然后就报错了。。 报错信息: 文件太大传不了。。查了一些相关问答。大部分说是两种原有原因:1.文件太大 2.历史commit太多,提交时需创

    2024年02月07日
    浏览(74)
  • 得物-Golang-记一次线上服务的内存泄露排查

    在风和日丽的一天,本人正看着需求、敲着代码,展望美好的未来。突然收到一条内存使用率过高的告警。 告警的这个项目,老代码是python的,最近一直在go化。随着go化率不断上升,发现内存的RSS使用率越飙越高。最终达到容器内存限制后,进程会自动重启。RSS如下图所示

    2024年02月04日
    浏览(61)
  • 【Kafka】记录一次基于connect-mirror-maker做的Kafka集群迁移完整过程

    一个测试环境的kafka集群,Topic有360+,Partition有2000+,部署在虚拟机上,由于多方面原因,要求迁移至k8s容器内(全量迁移),正好可以拿来练一下手。本文主要记录对MM1和MM2的实际操作过程,以及使用过程中遇到的问题及解决方案。 source集群:kafka-2.6.0、2个broker、虚拟机

    2024年02月11日
    浏览(53)
  • 迁移到云原生:如何使用微服务迁移应用程序

    企业遇到大规模部署和监督生产中的应用程序的任务。幸运的是,我们可以使用大量技术和工具。然而,从传统的,整体的结构转变为云态一个人提出了自己的障碍。在这里,您会发现将应用程序从整体设置转移到基于微服务的体系结构时要进行的基本初始步骤列表。 Compa

    2024年02月03日
    浏览(56)
  • 记录--『uni-app、小程序』蓝牙连接、读写数据全过程

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 这是一次真实的 蓝牙收发数据 的全过程讲解。 本文使用 uni-app + Vue3 的方式进行开发,以手机app的方式运行(微信小程序同样可行)。 uni-app 提供了 蓝牙 和 低功耗蓝牙 的 api ,和微信小程序提供的 api 是一样

    2024年01月21日
    浏览(53)
  • uniapp - 微信小程序平台模板消息订阅功能,唤起订阅模板消息弹框、微信公众号向用户发送 “服务通知“ 实现全过程示例代码,支持一次性订阅与永久性订阅(注释详细,一键复制开箱即用)

    本博客实现了uniapp微信小程序端,详细实现公众号订阅通知模板消息完整示例源码,一次性订阅与永久订阅均可,注释详细新手一看就懂! 效果如图所示,uniapp编译的微信小程序内点击按钮后,唤起模板消息订阅申请弹框,后续微信内会收到通知。

    2024年02月13日
    浏览(67)
  • 后端服务迁移方案及过程记录

    阶段 时序 动作 双写+数据对比 1 新rdb集群上线 双写+数据对比 2 新服务上线,无流量 双写+数据对比 2 后端自己发起的流程比如job,新服务上线一份新的,独立运行 双写+数据对比 2 消费二方mq,新服务使用新的消费组消费原有消息 双写+数据对比 3 新旧服务比较转发服务comp

    2024年02月15日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包