将运行中的应用程序从 AWS EC2 迁移到 DigitalOcean — 完整指南,无需停机
本指南将教您如何将线上应用程序从 AWS EC2 迁移到 DigitalOcean。.

将运行中的应用程序从 AWS EC2 迁移到 DigitalOcean — 完整指南,无需停机

完整指南,教您如何以最低成本将运行中的应用程序从 AWS EC2 迁移到 DigitalOcean,且不会中断服务。.
0 股票
0
0
0
0

如何将运行中的应用程序从 AWS EC2 迁移到 DigitalOcean?— 步骤概述

在本分步技术指南中,我们将解释如何 如何将运行中的应用程序从 AWS EC2 迁移到 DigitalOcean 传输过程尽量减少停机时间,并兼顾安全性和网络安全性。.

  • 资源初步评估和清点(EC2、EBS、RDS、S3、ELB、安全组、IAM)
  • 在 DigitalOcean 中设计目标架构(Droplet、VPC、Volumes、Spaces、负载均衡器、托管数据库)
  • 数据传输(文件、S3 → Spaces、数据库 → 托管数据库或副本)
  • 应用程序部署(恢复、容器化或使用应用平台/Kubernetes)
  • 以最短停机时间完成切换(复制、浮动 IP、DNS TTL)
  • AWS清理和最终审查,以及安全措施和监控

第一阶段——评估与准备

资源编目

列出所有相关资源的完整清单:EC2 实例、EBS 卷和快照、安全组、负载均衡器、IAM 角色/策略以及其他依赖服务,例如 S3、RDS、ElastiCache 和 CloudFront。.

确定应用程序类型 必填:该应用是有状态的(例如带有数据库)、无状态的(例如前端)、容器化的,还是需要 GPU/渲染的?

确定功能和位置需求

指定网络延迟、GPU 要求、最大 IOPS 和输出带宽等参数。.

如果您需要低延迟进行交易或游戏,请选择靠近最终用户的服务器位置。DigitalOcean 也提供不同的区域——请查看哪个 DO 数据中心离您最近。.

2. 在 DigitalOcean 中设计目标架构

建议的组件

该建筑设计方案包括以下内容:

  • 液滴 用于应用程序和服务(VPS)
  • 托管数据库 (Postgres / MySQL)消除了复制和备份的复杂性
  • 空格 (与 S3 兼容)用于从 S3 传输对象
  • 块存储卷 大数据和持久性
  • 负载均衡器浮动知识产权 实现无停机切换
  • VPC 用于网络隔离和防火墙的访问控制
  • 如果需要GPU,请使用GPU服务器或专用计算服务器。

选择液滴尺寸和类型

对于 CPU 密集型应用,使用 CPU 优化型 droplet;对于内存密集型应用,使用高 RAM droplet 或托管服务。.

对于交易或游戏而言,建议使用位于合适位置、具有低延迟和专用网络资源的专用VPS。.

3. 传输文件和对象(S3 → 空间 / EBS → 卷)

S3 → 空间转移

要将对象从 S3 传输到 Spaces,请使用与 S3 兼容的工具,例如 rclone 或者 s3cmd 使用。.

rclone config
rclone sync s3:my-bucket spaces:my-space --progress

您也可以使用 aws cli 导出,然后使用 doctl 或 s3cmd 上传。.

服务器文件传输(EBS → Droplet)

对于大量静态内容 rsync 要同步,请使用:

rsync -azP --delete -e "ssh -i /path/to/key.pem" ubuntu@ec2-ip:/var/www/ /home/ubuntu/www/

如果需要快照,请先从 EBS 获取快照,压缩内容,然后将其传输到 Droplet。.

4. 数据库迁移(RDS → 托管数据库或自托管数据库)

基于数据库类型的选项

MySQL/MariaDB:

为了最大限度地减少停机时间,请在 DigitalOcean 上设置一个副本,然后执行切换。如果您使用的是 RDS:

  1. 在 DO 中创建托管数据库。.
  2. 从 RDS 建立外部副本或使用 mysqldump。.
mysqldump -u user -p --single-transaction --quick --lock-tables=false dbname > dump.sql
mysql -h do-managed-host -u user -p dbname < dump.sql

PostgreSQL: 对于几乎零确定性的情况,建议使用逻辑复制(pg_dump/pg_restore)或流复制。.

pg_dump -Fc -h aws-rds-host -U user dbname > db.dump
pg_restore -d dbname -h do-host -U user db.dump

无停机解决方案(MySQL 示例)

一般流程:

  1. 在 AWS 中启用二进制日志记录。.
  2. 在 DigitalOcean 上创建一个 MySQL 副本服务器,并将其作为从服务器连接到 AWS 上的主服务器。.
  3. 同步完成后,将应用程序推送到副本并将其提升。.

5. 应用程序部署 — 选项和命令

方法一——容器化和镜像仓库

使用 Docker/Kubernetes 进行容器化是无需依赖 AMI 即可进行迁移的最佳方式。在 CI 系统中构建镜像,然后推送到 Docker Hub 或 GitLab Registry。.

在 DO 中,您可以使用托管 Kubernetes 或带有 docker-compose 的 droplets。.

docker-compose pull
docker-compose up -d --remove-orphans

方法二——传统修复

传统方法是,安装软件包,使用 rsync 传输代码,然后使用 systemd 或 PM2 等进程管理器运行服务。.

npm install --production
pm2 start app.js --name myapp

使用应用平台和托管服务

DigitalOcean 应用平台可提供 CI/CD、自动扩展和自动 SSL,如果您不想管理底层服务器,则适合 Web 应用。.

6. 网络、安全和无停机切换

浮动IP和负载均衡器

为了实现无停机切换,您可以在 DigitalOcean 中设置负载均衡器并使用 浮动知识产权 或者换个目标群体。.

战略 蓝绿色 它通常包括以下步骤:

  1. 在 DO 中建立绿色环境并全面发布应用程序
  2. 健康检查
  3. 更改负载均衡器中的浮动 IP 或更改目标组

DNS TTL 缩短 不要忘记预先切换(例如 TTL=300 秒或更短),以加快传播速度。.

防火墙和安全

为您的 DO 帐户添加 SSH 密钥并禁用密码登录:

Edit /etc/ssh/sshd_config: PermitRootLogin no, PasswordAuthentication no

使用 UFW 进行基本访问管理:

sudo ufw allow OpenSSH
sudo ufw allow 80,443/tcp
sudo ufw enable

在 DigitalOcean 中使用云防火墙,并实施类似于 AWS 安全组的规则。 失败2禁止 此外,建议使用 Certbot 或由负载均衡器管理的证书进行 SSL 加密。.

7. 操作技巧和脚本

doctl 示例

DO CLI 安装和身份验证:

doctl auth init --access-token <TOKEN>

创建 Droplet 的示例:

doctl compute droplet create my-droplet --size s-2vcpu-4gb --image ubuntu-22-04-x64 --region nyc3 --ssh-keys <KEY_ID> --vpc-uuid <VPC_ID> --wait
doctl compute cdn create --origin my-space.nyc3.digitaloceanspaces.com ...

使用 rsync 进行增量同步

rsync -azP --delete -e "ssh -i ~/.ssh/do_key" /var/www/ user@do-ip:/var/www/

8. 迁移后——测试和优化

绩效考核与监控

使用 Prometheus/Grafana 或 New Relic 等工具检查日志、延迟和吞吐量。使用 ab 或 siege 等工具进行负载测试,并检查 IOPS 和网络带宽至关重要。.

备份和灾难恢复

为 Droplets 和托管数据库启用快照和自动备份,并测试恢复计划。.

9. 成本和资源管理技巧

比较 AWS(EC2 + EBS + RDS + S3)和 DO 组合(Droplets + Volumes + Managed DB + Spaces)的成本。.

如果您的应用需要广泛的网络,使用 CDN 和 BGP/任播可以降低全球延迟。.

10. 常见问题及解决方案

  • 数据库版本差异 → 使用逻辑转储在暂存环境中进行兼容性测试和迁移。.
  • 大文件和慢传输 → 使用 tar+gzip 压缩,通过 rsync 恢复,并使用 Spaces 来分发内容。.
  • 切换后出现 SSL 和 CORS 错误 → 检查证书链和 Nginx/负载均衡器设置。.

11. 负载均衡器和上游 Droplet 的 Nginx 配置示例

upstream app {
    server 10.0.0.5:3000;
    server 10.0.0.6:3000;
}
server {
    listen 80;
    server_name example.com;
    location / {
        proxy_pass http://app;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

12. 安全提示和最佳实践遵守情况

  • 使用 SSH密钥 和激活 双因素认证 云账户
  • 限制 IAM 访问权限和 API 密钥
  • 执行漏洞扫描和补丁管理
  • 根据需要启用 DDoS 防护和 WAF

结论

将实时应用程序从 AWS EC2 迁移到 DigitalOcean 是一项挑战,但通过适当的规划(包括仔细清点、数据库复制以及使用浮动 IP 或负载均衡器进行切换),您可以最大限度地减少停机时间,并充分利用 Droplets、Spaces 和托管数据库。.

该团队已准备好协助进行基础设施的设计和实施,特别是对于需要 GPU、专用交易或游戏 VPS、CDN 和复杂网络解决方案的场景。.

常见问题解答

您可能也喜欢