项目背景
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=test ftp://10.0.11.11/file/*
2. 中间件-Rabbitmq安装
1)Rabbitmq安装
hostnamectl set-hostname yijie10
2)erlang安装
方式一:rpm包安装方式
STEP 1: Have you installed this repository?
If not, run the installation script, or manually install the repository before installing this package
curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | sudo bash
wget --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=140
STEP 2: Install the package
sudo yum install -y erlang-23.3.4.10-1.el7.x86_64
3)socat安装
wget http://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 -ivh erlang-23.3.4.10-1.el7.x86_64.rpm
yum remove erlang
erl -v
rpm -ivh erlang-23.3.4.10-1.el7.x86_64.rpm
erl -v
rpm -ivh rabbitmq-server-3.9.2-1.el7.noarch.rpm
5)Rabbitmq 启动
开机启动
systemctl enable rabbitmq-server
systemctl restart rabbitmq-server
systemctl status rabbitmq-server
6)rabbitmq管理
配置用户和权限
rabbitmqctl list_users
rabbitmqctl add_user admin test124
rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
rabbitmqctl delete_user guest
rabbitmq-plugins enable rabbitmq_management
rabbitmqctl change_password admin 'test124'
rabbitmqctl 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,无法外部链接),拷贝文件尽量在到期之前完成!
超维链习社得道前,砍柴时惦记着挑水,挑水时惦记着做饭;得道后,砍柴即砍柴,挑水即挑水,做饭即做饭。47篇原创内容
公众号