真实案例:从零迁移10+32G腾讯云服务器应用上私有云实战(必坑)
2023年初,突然接到一个老项目迁移的工作任务,总结特点:老大紧慢
老:项目已经迭代很久了,时间长,接手的人一波又一波,好多文件都不可考了,
大:整个数据库300G,系统文件等500G
紧:腾讯云服务器快过期了,慢一步就进回收站,让你掏钱,此处省略。。。
慢:带宽有限,20M 10M,下载文件慢,对于大文件如何操作
对于资深(大龄)程序员,不为困难找借口,只为成功想办法。干他
迁移分析
没有代码,只有服务器,难度是肯定的,首先与领导沟通,真实的迁移背景是什么,腾讯云花钱多(肯定不是),了解背景后,花了一下午时间遍历10+台机器,整理出基础方案,协调资源,完成迁移。
一、知己知彼:遍历10+台机器都做了什么?
1. 查看磁盘空间
目的是搞清楚每台机器上的挂载了哪些盘
命令:df -h

2. 查询目录磁盘内的文件
目的是搞清楚目录大文件有哪些,和业务确定优先级
命令:du -sh *

此处一定抓大放小,不要此时就陷入细节,在有限时间里面保证最重要的数据能拷走
3. 查询运行程序进程
目的是搞清楚每台服务器上跑了什么应用,中间件,监控等
命令:ps -ef |more

4. 梳理初步迁移方案

二、资源协调:基于初步分析结果,协调资源具体实施
对于短时间内完成迁移,需要专人去做一项事情,避免顾此失彼,导致文件丢失,迁移不完整;
其中文件迁移可以独立分配专人处理,只需要保证文件一对一,完成压缩,拷贝,大小一致即可;
对于中间件的迁移可以安排专人处理,设计到历史数据的迁移备份;
对于应用部署可以再分配一人处理,应用是微服务架构,需要部署注册中心、配置中心等基础组件,应用的运行依赖中间的部署
三、组织实施:优先级把控,各环节依赖提级
1. 大文件迁移
主要有两种方法:
1)使用rsync同步
命令:yum -y install rsync
拷贝命令:
rsync -rvlt root@111.111.111.111:/home/data/home/
2)使用sftp+wget
sftp的安装命令:yum install openssh-clients
服务器端使用方法为:sftp -oPort=36000 test@10.0.11.11
下载命令:yum install -y wget
wget --ftp-user=test--ftp-password=testftp://10.0.11.11/file/*
2. 中间件-Rabbitmq安装
1)Rabbitmq安装
hostnamectlset-hostname yijie10
2)erlang安装
方式一:rpm包安装方式 STEP1: Have you installedthisrepository? If not, run the installation script, or manually install the repository before installingthispackagecurl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | sudo bashwget --content-disposition https://packagecloud.io/rabbitmq/erlang/packages/el/7/erlang-23.3.4.10-1.el7.x86_64.rpm/download.rpm?distro_version_id=140STEP2: Install thepackagesudo yum install -y erlang-23.3.4.10-1.el7.x86_64
3)socat安装
wgethttp://www.rpmfind.net/linux/centos/7.9.2009/os/x86_64/Packages/socat-1.7.3.2-2.el7.x86_64.rpm rpm -ivh socat-1.7.3.2-2.el7.x86_64.rpm
4)rabbitmq安装
rpm-ivherlang-23.3.4.10-1.el7.x86_64.rpmyumremoveerlangerl-vrpm-ivherlang-23.3.4.10-1.el7.x86_64.rpmerl-vrpm-ivhrabbitmq-server-3.9.2-1.el7.noarch.rpm
5)Rabbitmq 启动
开机启动
systemctlenable rabbitmq-serversystemctlrestart rabbitmq-serversystemctlstatus rabbitmq-server
6)rabbitmq管理
配置用户和权限
rabbitmqctl list_users rabbitmqctl add_user admin test124 rabbitmqctl set_permissions -p"/"admin".*"".*"".*"rabbitmqctl delete_user guest rabbitmq-pluginsenablerabbitmq_management rabbitmqctl change_password admintest124rabbitmqctl set_user_tags admin administrator /etc/rabbitmq/rabbitmq.config第一次打开时会自动创建,直接在里面输入内容即可
6) 配置外部访问
vi /etc/rabbitmq/rabbitmq.config修改所在行如下图所示 [{rabbit, [{loopback_users, ["admin"]}]}].
3. 中间件-Mysql安装
生产环境Mysql主从300G数据迁移
四、应用部署(具体应用具体分析)
五、数据割接
六、业务验证
整个迁移过程是很紧张,对于历史目录很难考证,应考尽拷,但是带宽是有限的,我们优先拷贝了中间件有数据的mysql、redis等,然后拷贝了应用部署相关的jar及部署脚本、配置参数文件等,基本保障应用部署能够正常进行,nginx配置要重视,一般都是应用的入口文件,对后面验证有很大帮助。大文件的拷贝也是个问题,使用rsync能够满足需求,拷贝效率也还可以,也可以实现增量拷贝,很方便。
划重点:对于资金充沛的情况下是可以选择镜像恢复的,基本数据是全量的,我们这个方案省了几万块,通过最大拷贝,小马拉大车,
小技巧:可以通过缩减配置(坑1:一定要在过期前设置,过期后无法设置),腾讯云的到期后,说是有两天的期限,实测,只有一天多(坑2:腾讯云到期会送到回收站内,此刻你的服务器已经gg,无法外部链接),拷贝文件尽量在到期之前完成!