4. 服务器迁移实战
当企业需要把成百上千台物理机、虚拟机或其它云上的实例整体搬到 AWS 时,逐台重建、逐台校验的方式几乎不可行。AWS Application Migration Service(简称 MGN,前身是 CloudEndure Migration)正是为这种"块级复制 + 按需拉起"的规模化迁移场景设计的服务。理解它的工作原理,是后续所有操作与自动化编排的基础。
一、MGN 的核心原理:块级复制与暂存区
MGN 的迁移模型可以概括为"持续块级复制 + 按需启动测试/割接实例"。在源服务器上安装 AWS Replication Agent 后,代理会读取磁盘的块级写入,把变化数据通过加密通道(TCP 1500 端口)发送到目标区域中自动创建的暂存区(Staging Area)。暂存区由一组轻量级 EC2 复制服务器和 EBS 卷组成,它并不运行业务负载,只负责接收并落盘这些块数据,使暂存卷与源盘保持近乎实时的同步。
当需要验证或正式切换时,MGN 从暂存卷的快照启动测试实例或割接实例,把暂存卷转换成目标实例的根卷与数据卷。因此整个过程中源服务器可以继续对外服务,直到最后一次增量同步完成、业务停机窗口开启,才做最终切换。这种"复制与切换解耦"的设计,是 MGN 能支撑大规模迁移的关键。
二、代理安装:把复制能力植入源服务器
代理安装是整条链路的起点。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 的自动化能力主要体现在三个层面:
- 批量代理安装:通过 Ansible、SSM Run Command 或启动脚本,把安装命令批量下发到源服务器,统一指定 region 与 devices。
- 批量配置与启动:使用 MGN API(如
initialize-service、start-cutover、launch-test)或 CloudFormation/Terraform 模板,按分组批量设置复制参数、批量启动测试与割接。 - 编排与波次:按应用依赖关系划分迁移波次(Wave),先迁无依赖的基础服务,再迁上层应用;用 Step Functions 或脚本串联"同步检查 → 启动测试 → 验证 → 割接 → 通知"。
一个实用的编排思路是:为每台服务器打上 Wave 与 App 标签,脚本按标签筛选源服务器,先检查 Lag 是否低于阈值,再触发测试启动;测试通过后进入割接队列,由人工或自动审批放行。这样既保留了批量效率,又保留了关键节点的可控性。
掌握 MGN 的复制原理、代理安装、复制配置、测试割接与自动化编排后,服务器迁移就从"逐台手工操作"变成了"可批量、可验证、可回退"的工程化流程,这也是企业级大规模上云能够按期交付的基础。