1. 设计目标与前期准备
- 明确RTO(恢复时间目标)与RPO(恢复点目标),例如RTO≤5分钟,RPO≤1分钟。
- 清点跨境流量、会话粘性、数据库读写比、依赖第三方(如支付、物流)IP/域名。
- 评估
越南机房(A、B)网络延迟/带宽、是否支持BGP、机柜冗余、跨机房光纤链路。
2. 网络与Anycast/BGP部署步骤
- 获取公网IP段与ASN(或与机房运营商协作做BGP)。
- 在两地布置边缘路由器(建议使用FRR或厂商设备),示例FRR配置:router bgp 65000,neighbor x.x.x.x remote-as Y。
- 配置Anycast或Geo-DNS:Anycast适合前端流量,Geo-DNS用于按地理/健康加权切流。TTL设置为30s以便快速切换。
3. 全局流量调度(GSLB)与DNS故障切换
- 选择支持健康检查的DNS服务或自建K8s + CoreDNS+Consul。
- 配置主动健康探测(HTTP/TCP),探测失败时自动从DNS移除节点。
- 若使用第三方(如Cloudflare或DNSPod),设置低TTL、权重路由与备用记录。
4. 应用层多活架构搭建(步骤)
- 架构:前端Anycast LB → 本地LB(HAProxy/Nginx)→ 应用节点(Stateless优先)。
- 部署HAProxy:前端监听80/443,后端按权重分发,使用backup参数指向异地池。示例:backend app_pool server appA1 10.0.0.1:80 check.
5. 会话/状态同步与无状态化策略
- 优先改造为无状态服务,状态放在Redis/Memcached或后端数据库。
- Redis采用主从或Redis Cluster,跨机房建议采用主从+异步复制,关键场景使用半同步并设置replica-priority。
- 对于会话粘性不可改造的应用,使用Sticky Cookie并在故障时通过同步会话到共享Redis恢复。
6. 数据库多活与复制实现(MySQL、Postgres示例)
- MySQL多主:可选Galera或Group Replication。若跨机房延迟高,建议单主+异步从或双主读写分离。
- MySQL主从快速搭建:在主库启用GTID,SET GLOBAL gtid_mode=ON; 在从库执行:CHANGE MASTER TO MASTER_HOST='主IP', MASTER_USER='repl', MASTER_PASSWORD='pw', MASTER_AUTO_POSITION=1; START SLAVE;。
- PostgreSQL流复制:主库postgresql.conf设置wal_level=replica、max_wal_senders,使用pg_basebackup创建备库:pg_basebackup -h 主 -D /var/lib/postgresql/data -U replicator -X stream -P。
7. 文件与对象存储同步操作步骤
- 对象存储(S3兼容):使用rclone或s3cmd做定时同步:rclone sync /data s3:bucket --checksum --transfers 8。
- 文件系统:使用lsyncd或rsync+cron,示例rsync:rsync -az --delete --link-dest=/var/backups /data remote:/data。
- 大对象采用分段上传(multipart)以降低网络中断影响。
8. 监控、告警与自动化切换
- 部署Prometheus+Grafana监控CPU、延迟、错误率;配置Alertmanager发送短信/电话/企业微信告警。
- 实现自动化响应:当健康探针失败且错误率高于阈值,调用自动化脚本通过API修改DNS或BGP公告(示例:调用Cloud DNS API切换权重)。
- 准备Runbook:明确切换命令、回滚路径、联系人名单和核对清单。
9. 灾备演练与SLA验收
- 制定演练计划:每季度做一次部分流量切换、半年做一次全流量倒换。
- 演练步骤:1)通知相关方;2)降低TTL;3)通过DNS/路由逐步切换;4)验证应用与数据一致性;5)记录时间与问题并优化。
10. 安全、合规与跨境注意事项
- 加密链路(TLS/MTLS)、内网VPN或专线,数据库通信使用加密传输。
- 检查越南及目标国家的个人数据保护要求(如越南PDPL草案等),确保数据主权合规,必要时对敏感数据做脱敏或不跨境存储。
11. 成本与运维落地清单
- 清单包括:双机房机柜、BGP/Anycast费用、跨机房带宽、监控告警、备份存储、自动化工具。
- 优先按业务分层:核心服务高可用、低频业务采用异步异地备份以节省成本。
12. 常见故障处理快速命令集
- 切换DNS示例(使用curl调用API):curl -X POST "https://dns.api/record" -d '{"type":"A","value":"x.x.x.x","ttl":30}'.
- MySQL故障切主:STOP SLAVE; RESET SLAVE ALL; CHANGE MASTER TO MASTER_HOST='new'; START SLAVE; 并验证SHOW SLAVE STATUS\G。
13. 问:多活部署如何保证跨境数据一致性?
- 问题以段落形式提出,下面直接回答。
14. 答:保证一致性的实操要点
- 使用合适的复制方案(同步/半同步/异步),对强一致性数据采用主从同步或分布式事务;对可接受延迟的数据采用异步复制并通过幂等设计降低冲突。
- 关键步骤:1)评估延迟与冲突窗口;2)选定复制技术(Galera/Group Replication/Streaming);3)实现应用幂等与冲突解决策略;4)做全量+增量校验脚本定期比对。
15. 问:如何进行切换演练而不影响线上业务?
- 演练类问题说明。
16. 答:安全演练的具体流程
- 逐步演练:1)在低峰时间先做流量镜像验证;2)使用灰度DNS权重将10%、30%流量切到备用机房;3)验证监控与请求链,修复问题;4)再扩大权重直至全量;5)回滚并记录复盘要点。
- 演练要有回滚点、自动化脚本与人工确认步骤,确保可回退。
17. 问:跨境多活的成本如何控制且能满足RPO/RTO?
- 提出成本控制疑问。
18. 答:成本控制与SLA平衡建议
- 按业务分层(核心/重要/普通),核心走同步多活并备专线,普通走异步备份与对象存储复本。
- 优化点:压缩与去重备份、弹性带宽调度、按需扩容实例、使用轻量化代理做健康切换,结合SLA制定预算与监控成本指标。
来源:越南顶级机房多活容灾设计对跨境业务的实际价值与落地方案