1.
前期评估与目标设定
步骤:列出所有服务(计算、数据库、对象存储、负载均衡、证书等)。
确定业务优先级、RTO(可恢复时间目标)和RPO(数据丢失容忍度)。
产出清单示例:web-www、api-db、static-oss、k8s-cluster、证书与密钥。
2.
选定备援云与网络策略
步骤:至少选择一个与阿里云不同的云提供商(AWS、GCP、Azure或腾讯云大陆)。
建立跨云网络方案:推荐使用IPsec VPN或云厂商提供的SD-WAN/Direct Connect方案,若无法直连则使用公网加密隧道(strongSwan)。
配置要点:固定公网出口、BGP或静态路由、MTU和心跳监控。
3.
架构设计:热备、冷备与混合策略
步骤:按业务等级决定热备(Active-Active)、热冷(Active-Passive)或异步冷备。
示例:前端与缓存可做Active-Active,核心数据库建议主备异地同步并在备用云做只读实例。
设计要点:保持一致的应用镜像、IaC(Terraform/CloudFormation)定义跨云部署模板。
4.
数据库跨云同步实操(以MySQL为例)
步骤:如果允许短暂停机可用全量备份+增量复制;在线业务建议使用CDC工具(Debezium、Maxwell)或云厂商DTS/AWS DMS。
示例命令:在目标库执行mysqldump --single-transaction导入,然后在源库开启binlog并记录master log位置,再在目标执行CHANGE MASTER TO MASTER_HOST='源IP', MASTER_LOG_FILE='xxx', MASTER_LOG_POS=12345; START SLAVE;
注意:关闭GTID冲突、同步延迟监控、定期校验一致性(pt-table-checksum)。
5.
对象存储与静态文件同步
步骤:使用rclone或云厂商迁移服务实现跨云对象同步。
示例:rclone sync oss:bucket s3:bucket --transfers=20 --checkers=16;或使用阿里DTS/OSS跨区域复制到S3/Blob。
要点:保持对象版本、ACL一致、使用MD5/etag校验并对大文件分片迁移。
6.
容器与应用配置同步
步骤:用GitOps(Argo CD/Flux)管理Kubernetes应用,分别部署在不同云的集群。
操作示例:在两个集群中使用相同的Helm chart和镜像仓库;备援镜像推送至多个registry(阿里、AWS ECR、GCR)。
数据卷:对状态ful应用使用数据库替代持久卷,或使用Velero做周期性备份并在切换时恢复PV。
7.
流量切换与DNS策略
步骤:把域名接入支持主动健康检查的DNS(Route53/GSLB/阿里云DNS+监控)。
配置举例:设置低TTL(30-60s)、健康检查接口(/healthz),创建Failover或Weighted记录以便快速切流。
高级方案:使用Anycast或全球加速服务减少切换影响,并结合CDN缓存静态内容。
8.
自动化故障演练与检测
步骤:编写Runbook并使用脚本化演练(kubectl、terraform plan/apply、ansible)。
演练清单:数据同步验证、DNS切换演练、应用在备用云启动、回切流程。
记录与改进:每次演练记录RTO/RPO实际值并优化阈值。
9.
安全与合规注意事项
步骤:跨云传输必须启用TLS或IPsec,数据库和对象存储使用服务器端/客户端加密。
权限管理:采用最小权限IAM策略,多云环境统一使用OIDC/SSO或集中化身份管理。
合规:关注数据主权和日志留存,必要时落地备份到合规区域。
10.
监控、告警与指标能见度
步骤:统一采集指标(Prometheus+Grafana)并跨云归集到一个观测层或使用云监控输出到统一平台。
关键指标:复制延迟、错误率、主机/节点心跳、DNS健康状态。
推荐:设置自动化告警并与Runbook链接,使用PagerDuty/企业微信/钉钉推送。
11.
故障切换实战步骤(发生阿里云香港机房故障时)
步骤:1)确认故障范围并切换DNS到备用云的健康节点;2)如果数据库主库不可用,切换到备用库并提升为主(执行STOP SLAVE; RESET SLAVE ALL;)。
3)启动备用集群的应用副本并验证对外接口;4)通知流量回切窗口并持续监控。
要点:切换前先冻结重要写入(限流或只读),切换后验证数据一致性。
12.
常见问答:多云容灾是否一定要实时双写?
问:是否必须实现跨云实时双写才能保证零数据丢失?
12. 回答:不是必须,但如果业务要求零RPO才需实时双写或同步复制;实时双写复杂度高且会影响延迟,建议按业务等级分级实现,关键业务采用同步或半同步,次级业务用异步复制并接受短时RPO。
13.
常见问答:DNS切换会有多长时间的影响?
问:使用DNS做故障转移,切换后用户还能访问吗,延迟多久生效?
13. 回答:生效时间取决于TTL与客户端缓存。设置低TTL(30-60秒)并结合主动健康检查可在数十秒到几分钟内大部分用户切换完成。对关键服务建议结合Anycast或负载均衡实现更快切换。
14.
常见问答:如何确保切换后可以无缝回流主站?
问:故障恢复后如何安全回切到原主站?
14. 回答:回切前确认主站数据一致:使用checksum、binlog位置比对;先把主站切为只读并将差异增量回写到主站,再切换DNS并逐步放开写权限。务必有回切Runbook并在非高峰进行演练。
来源:应对阿里云香港机房故障始末的多云容灾架构设计指南