Logo

从阿里云到AWS:年销售额上亿的电商项目的服务器迁移经验

avatar alex 19 Aug 2024

背景

我们的项目是澳洲电商项目,服务器用的阿里云集群,从2020年运营到现在,年销售额超过一亿RMB,用户量比较大。在今年年初接到阿里云的通知,9月份将撤掉澳洲的服务器,所以我们开始着手找替代品,经过评估,最终决定将所有服务迁移到AWS。

准备工作

  • 列出使用了阿里云的服务列表,确定哪些服务是必须迁移,哪些服务是不需要迁移。
    我们使用的服务:SMS,Redis,RDS,OSS,负载均衡器,多台ECS
    除了SMS到期还能正常使用,其他服务都必须迁移,而为了保证短信服务的稳定性,SMS继续用着阿里云。
  • AWS准备好相应的服务,版本号最好跟原服务保持一致,避免出现不可知错误
  • 准备一台临时大容量磁盘大带宽服务器,作为传输OSS数据的跳板机

迁移

数据迁移注意事项

迁移最重要是保证数据的一致性及对用户产生最小影响,必须注意几点:

  • 为了节省时间,OSS可在ECS迁移之前先做迁移
    1. OSS进行全量迁移
    2. 项目OSS服务切换到AWS OSS
    3. 再进行一轮增量迁移,避免切换服务期间有新数据差异
  • Redis、RDS数据比较敏感,必须进行停机服务才能保证数据一致
    1. 提前发布停机公告
    2. 在用户最不活跃时间段停掉项目可能修改数据的服务(例:puma, sidekiq等)
    3. 进行数据迁移

数据迁移操作

  • OSS

    • 项目运行了4年,OSS容量达到了惊人的3TB,第一个想法肯定是产生了很多垃圾数据,于是我写了个脚本,获取阿里云所有文件路径,一一跟数据库数据进行对比,没用到的数据删除掉,将数据大幅缩减到200多GB
    • 数据传输:需要在跳板机上使用到两个工具

      1. 使用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
      
      1. 使用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/
      

      image.png

      1. 由于数据还需要国内访问,所以需要使用cloudfront的加速服务,按需选择区域

      image.png

  • Redis数据:

    • 阿里云导出数据

      image.png

    • AWS导入数据
      image.png

  • 数据库用的是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的负载均衡搭建比阿里云复杂许多,配置如下

负载均衡器信息配置:

image.png
image.png
image.png

侦听器配置:
image.png

目标组配置
image.png
image.png

总结与思考

此次迁移整体是比较顺利的,由于用户量、数据量较大,我们对此次迁移还是非常谨慎。在生产环境迁移之前,我们在测试服务器按相同配置进行1:1完整预演,解决掉很多意想不到的问题,并将预演过程完整记录到文档中。该环节很有必要,极大程度降低了对用户的影响,避免在生产环境迁移期间还要花时间排查,另外文档可以确保迁移过程中有步骤遗漏。

Tags
阿里云
电商
aws
迁移