目标
把一个生产服务及其数据迁移到新的云区域。迁移前验证延迟、合规和容量,切换过程按比例可控,并保留回到原区域的路径;不能把区域迁移简化成一次 DNS 修改。
步骤
- 确定迁移模式:多数服务采用 pilot light(单写入区域加热备),只有需要分钟级区域故障切换时才考虑双活。列出每个数据存储和第三方依赖在目标区域的对应实现。
- 用基础设施即代码在目标区域创建同等规格的堆栈,确认密钥、证书、网络策略和健康检查与源区域一致。
- 启动持续复制,比较行数和校验和,在压测流量下记录复制延迟,确认满足恢复点目标。
- 通过加权 DNS 依次导入 1%、10%、100% 流量,同时观察两个区域的延迟、错误率和饱和度。示例变更如下:
{"Comment":"将 10% 的 api 流量切到 eu-west-1","Changes":[{"Action":"UPSERT","ResourceRecordSet":{"Name":"api.example.com","Type":"A","SetIdentifier":"eu-west-1","Weight":10,"AliasTarget":{"HostedZoneId":"ZEUWEST1","DNSName":"api-eu.example.com","EvaluateTargetHealth":true}}}]}
- 源区域缩容但保留 14 天,确认没有残留复制、批处理或缓存流量后,再删除堆栈并导出最终备份。
验证
从多个地点请求公网端点,确认响应来自新区域;对比切换前后的延迟和错误率;核对复制报告中的行数;检查 DNS 权重和 TTL 是否符合预期;确认源区域没有生产流量和复制任务。
回滚
目标区域开始接受写入之前,回滚只是把 DNS 权重调回源区域,完全可逆。目标区域一旦独立接受写入,必须先建立反向复制再回退,否则这部分数据会丢失;最终切换时应冻结写入或采用双写。删除源区域堆栈及其备份是不可逆步骤,必须由指定负责人书面批准,并且只能在 14 天观察窗口结束后执行。