4. 服务器迁移实战

当企业需要把成百上千台物理机、虚拟机或其它云上的实例整体搬到 AWS 时,逐台重建、逐台校验的方式几乎不可行。AWS Application Migration Service(简称 MGN,前身是 CloudEndure Migration)正是为这种"块级复制 + 按需拉起"的规模化迁移场景设计的服务。理解它的工作原理,是后续所有操作与自动化编排的基础。

一、MGN 的核心原理:块级复制与暂存区

MGN 的迁移模型可以概括为"持续块级复制 + 按需启动测试/割接实例"。在源服务器上安装 AWS Replication Agent 后,代理会读取磁盘的块级写入,把变化数据通过加密通道(TCP 1500 端口)发送到目标区域中自动创建的暂存区(Staging Area)。暂存区由一组轻量级 EC2 复制服务器和 EBS 卷组成,它并不运行业务负载,只负责接收并落盘这些块数据,使暂存卷与源盘保持近乎实时的同步。

当需要验证或正式切换时,MGN 从暂存卷的快照启动测试实例或割接实例,把暂存卷转换成目标实例的根卷与数据卷。因此整个过程中源服务器可以继续对外服务,直到最后一次增量同步完成、业务停机窗口开启,才做最终切换。这种"复制与切换解耦"的设计,是 MGN 能支撑大规模迁移的关键。

源端环境 物理机 / VMware VM / 其它云实例 AWS Replication Agent(块级驱动) 源磁盘写入 (持续变化) 业务仍在线运行 停机窗口极短 TCP 1500 加密块级复制 AWS 目标区域 · 暂存区 复制服务器 EC2 (Replication Server) 暂存 EBS 卷 (与源盘同步) 周期性快照 (还原点) 不运行业务负载 仅承接复制数据 测试实例(Test Instance) 隔离 VPC / 独立子网 验证启动、服务、数据一致性 不影响源端与生产 割接实例(Cutover) 最终增量同步后启动 切换 DNS / 负载均衡 承接生产流量 复制与切换解耦:源端持续在线,测试与割接按需从暂存卷快照拉起实例

二、代理安装:把复制能力植入源服务器

代理安装是整条链路的起点。MGN 控制台在"源服务器"页面提供安装器下载,安装命令形如:

# Linux(以 root 执行,示例参数)
wget -O ./aws-replication-installer-init.py \
  https://aws-application-migration-service-<region>.s3.<region>.amazonaws.com/latest/linux/aws-replication-installer-init.py

sudo python3 aws-replication-installer-init.py \
  --region ap-northeast-1 \
  --aws-access-key-id  AKIA****EXAMPLE \
  --aws-secret-access-key  **** \
  --no-prompt \
  --devices /dev/sda,/dev/sdb

关键点有三:一是 --region 必须与目标区域一致,代理据此找到暂存区;二是 --devices 明确要复制的磁盘,未列出的盘不会被迁移;三是凭证建议使用最小权限的 IAM 用户或临时凭证,避免长期密钥泄露。Windows 服务器则运行对应的 .exe 安装器,安装后代理以系统服务方式常驻。

安装完成后,源服务器会出现在 MGN 控制台的源服务器列表中,状态从 Pending 逐步变为 Healthy。若长时间停留在 Disconnected,通常需要检查 1500 端口出站、代理服务状态以及凭证是否过期。

三、复制配置:让同步可控、可预期

复制设置(Replication Settings)决定数据如何落到暂存区,主要参数包括:

  • Staging area subnet:复制服务器所在的子网,需能访问 S3 与 MGN 端点。
  • Replication server instance type:默认 t3.small,磁盘吞吐高的源端可上调,避免复制成为瓶颈。
  • EBS volume type:默认 gp3,可按 IOPS 需求调整。
  • Snapshot frequency:快照间隔,默认 1 小时,决定可回退的还原点密度。
  • Bandwidth throttling:限速,避免复制流量挤占生产带宽。

配置完成后,MGN 会为每台源服务器创建复制服务器与暂存卷,并开始首次全量同步。全量完成后进入增量阶段,控制台会显示 Lag(滞后时间)与 Backlog(待复制数据量)。这两个指标是判断"能否安全割接"的核心依据:Lag 越小、Backlog 越接近 0,说明暂存卷与源盘越接近一致。

四、测试与割接:先验证,再切换

MGN 提供两种启动模式,对应迁移的两个关键节点:

模式用途典型动作
Test instance验证迁移可行性在隔离网络启动,检查系统引导、应用服务、数据完整性
Cutover instance正式切换生产最终增量同步后启动,切换 DNS/负载均衡,停用源端

测试实例启动后,建议按"系统层 → 应用层 → 数据层 → 业务层"的顺序验证:能否正常引导、关键服务是否自启、数据库文件是否完整、业务接口是否返回预期结果。测试通过后,测试实例应被终止,避免长期占用资源。

割接前需要做最后一次增量同步,确认 Lag 已收敛。割接实例启动后,先不要立即切流量,而是用内部地址做一轮冒烟测试,确认无误后再修改 DNS 或负载均衡后端,最后观察一段时间再停用源服务器。整个割接窗口通常可控制在分钟级。

五、大规模迁移的自动化与编排

当服务器数量达到数百台时,控制台逐台点击不可持续。MGN 的自动化能力主要体现在三个层面:

  1. 批量代理安装:通过 Ansible、SSM Run Command 或启动脚本,把安装命令批量下发到源服务器,统一指定 region 与 devices。
  2. 批量配置与启动:使用 MGN API(如 initialize-service、start-cutover、launch-test)或 CloudFormation/Terraform 模板,按分组批量设置复制参数、批量启动测试与割接。
  3. 编排与波次:按应用依赖关系划分迁移波次(Wave),先迁无依赖的基础服务,再迁上层应用;用 Step Functions 或脚本串联"同步检查 → 启动测试 → 验证 → 割接 → 通知"。

一个实用的编排思路是:为每台服务器打上 Wave 与 App 标签,脚本按标签筛选源服务器,先检查 Lag 是否低于阈值,再触发测试启动;测试通过后进入割接队列,由人工或自动审批放行。这样既保留了批量效率,又保留了关键节点的可控性。

实践建议:把"Lag 是否收敛""测试是否通过""割接后健康检查是否正常"作为三个硬性门禁,任何一项不满足都不进入下一阶段,可显著降低大规模迁移中的返工与事故风险。

掌握 MGN 的复制原理、代理安装、复制配置、测试割接与自动化编排后,服务器迁移就从"逐台手工操作"变成了"可批量、可验证、可回退"的工程化流程,这也是企业级大规模上云能够按期交付的基础。