将运行中的应用程序从 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 和复杂网络解决方案的场景。.

常见问题解答

您可能也喜欢
cPanel 中的技术和高级主题

技术主题和高级 cPanel 工具

如果您使用 cPanel 管理您的主机,那么您可能已经熟悉它的一些常用功能,例如文件管理器或电子邮件。但 cPanel 还拥有许多更高级、更专业的功能,可以显著提升您网站的速度、安全性和稳定性。.