从阿里云到AWS:年销售额上亿的电商项目的服务器迁移经验
背景
我们的项目是澳洲电商项目,服务器用的阿里云集群,从2020年运营到现在,年销售额超过一亿RMB,用户量比较大。在今年年初接到阿里云的通知,9月份将撤掉澳洲的服务器,所以我们开始着手找替代品,经过评估,最终决定将所有服务迁移到AWS。
准备工作
- 列出使用了阿里云的服务列表,确定哪些服务是必须迁移,哪些服务是不需要迁移。
我们使用的服务:SMS,Redis,RDS,OSS,负载均衡器,多台ECS
除了SMS到期还能正常使用,其他服务都必须迁移,而为了保证短信服务的稳定性,SMS继续用着阿里云。 - AWS准备好相应的服务,版本号最好跟原服务保持一致,避免出现不可知错误
- 准备一台临时大容量磁盘大带宽服务器,作为传输OSS数据的跳板机
迁移
数据迁移注意事项
迁移最重要是保证数据的一致性及对用户产生最小影响,必须注意几点:
- 为了节省时间,OSS可在ECS迁移之前先做迁移
- OSS进行全量迁移
- 项目OSS服务切换到AWS OSS
- 再进行一轮增量迁移,避免切换服务期间有新数据差异
- Redis、RDS数据比较敏感,必须进行停机服务才能保证数据一致
- 提前发布停机公告
- 在用户最不活跃时间段停掉项目可能修改数据的服务(例:puma, sidekiq等)
- 进行数据迁移
数据迁移操作
-
OSS
- 项目运行了4年,OSS容量达到了惊人的3TB,第一个想法肯定是产生了很多垃圾数据,于是我写了个脚本,获取阿里云所有文件路径,一一跟数据库数据进行对比,没用到的数据删除掉,将数据大幅缩减到200多GB
-
数据传输:需要在跳板机上使用到两个工具
- 使用ali ossutill工具,sync命令可将OSS数据同步到跳板机,首次全量,后续增量(https://help.aliyun.com/zh/oss/developer-reference/synchronize-oss-objects-to-your-computer?spm=a2c4g.11186623.0.i3)
# 安装ossutil sudo -v ; curl https://gosspublic.alicdn.com/ossutil/install.sh | sudo bash # 初始化OSS信息,config file和stsToken直接为空即可 ossutil config # 将bucket(prod-oss)所有文件同步到本地/home/deploy/alinyun-oss-folder ossutil sync -u oss://prod-oss/ /home/deploy/aliyun-oss-folder
- 使用aws cli工具,sync命令将跳板机数据同步到AWS S3,也是首次全量,后续增量(https://docs.aws.amazon.com/zh_cn/cli/latest/userguide/cli-services-s3-commands.html)
# 安装aws cli sudo -v ; curl https://gosspublic.alicdn.com/ossutil/install.sh | sudo bash unzip awscliv2.zip sudo ./aws/install # 配置,配置内容如图 aws configure # 将/home/deploy/alinyun-oss-folder的文件同步到aws S3的存储桶(prod-oss) cd /home/deploy/alinyun-oss-folder aws s3 sync . s3://prod-oss/
- 由于数据还需要国内访问,所以需要使用cloudfront的加速服务,按需选择区域
-
Redis数据:
-
阿里云导出数据
-
AWS导入数据
-
-
数据库用的是PostgreSQL,用以下命令完成导出导入
# 导出压缩文件 PGPASSWORD='XXX' pg_dump -U postgres -h host databse_name --no-acl --no-owner | bzip2 - -c --stdout > ./database.sql.bz2 # 导入 bunzip2 database.sql.bz2 PGPASSWORD='XXX' psql -U postgres -h host -d databse_name < ./database.sql
ECS迁移
ECS按照原服务器配置购买即可,然后部署项目
负载均衡
AWS的负载均衡搭建比阿里云复杂许多,配置如下
负载均衡器信息配置:
侦听器配置:
目标组配置
总结与思考
此次迁移整体是比较顺利的,由于用户量、数据量较大,我们对此次迁移还是非常谨慎。在生产环境迁移之前,我们在测试服务器按相同配置进行1:1完整预演,解决掉很多意想不到的问题,并将预演过程完整记录到文档中。该环节很有必要,极大程度降低了对用户的影响,避免在生产环境迁移期间还要花时间排查,另外文档可以确保迁移过程中有步骤遗漏。
Tags
阿里云
电商
aws
迁移