1.
概述与准备材料清单
- 目标:把关键业务在机房故障发生后1小时内恢复到可用状态(RTO)并限定可接受的数据丢失量(RPO)。
- 准备清单:机房资产清单(服务器、交换机、IP、VLAN、交叉连接)、应用列表、数据量估算、依赖清单(DNS、外部API、支付网关)、当前SLA与合同条款。
2.
确定关键业务与优先级(分层恢复计划)
- 列出所有服务并按业务影响打分(收入影响、合规影响、客户影响)。
- 制定恢复优先级:P1(必须优先恢复)、P2(次要)、P3(非关键)。每层指定目标RTO/RPO。
3.
网络与IP冗余策略(路由与DNS切换)
- 采用Anycast或多线BGP(若可行):在香港以外再接入至少一条带公网出口的运营商或云提供商。
- DNS策略:将TTL降为短(如60s)并使用支持健康检查的DNS服务(Cloudflare、AWS Route53 Health Checks、NS1)。提前准备备用域名记录与低TTL生效测试。
4.
机房与异地物理/逻辑冗余
- 物理:在香港以外(如新加坡、东京或华东)准备备用机房或云账号,并保证跨区网络带宽与互通。
- 逻辑:使用同构或近同构环境(相同的OS镜像、容器镜像、配置管理)以减少切换复杂度。
5.
存储与数据库的异地复制
- MySQL:启用GTID或基于Semi-sync + 异地从库(建议异步+定期校验)。定期做备份并在目标库做恢复演练。
- PostgreSQL:设置流复制或logical replication,保证WAL归档可跨区传输并验证恢复。
- 文件存储:使用对象存储(S3兼容)或周期性快照并异步复制到异地;对块存储定期快照并传输。
6.
应用层的高可用设计(无状态与有状态分离)
- 将应用拆分为无状态层和有状态层:无状态服务可横向扩展并在任何机房启动。
- 有状态服务(数据库、队列)采用复制/持久化策略并优先保证数据一致性策略的可恢复流程。
7.
配置管理与自动化(保证可重复部署)
- 使用IaC(Terraform/CloudFormation)与配置管理(Ansible/Chef/Puppet)把环境定义化。
- 准备一键部署脚本和镜像,验证在异地能在15-30分钟内部署一套最小可用集群。
8.
负载均衡与会话保持策略
- 使用外部负载均衡(HAProxy、Nginx、云LB)配合健康检查自动移除故障节点。
- 对会话:推荐无状态JWT或集中式会话存储(Redis集群,开启持久化与异地复制)以减少用户中断。
9.
备份策略与数据校验流程
- 3-2-1备份原则:本地+异地+离线。数据库每天全备,增量/二进制日志每小时备份。
- 定期做恢复演练并校验备份完整性(restore-to-temp)。记录恢复步骤与耗时。
10.
监控、告警与自动化故障演练
- 监控项:主机、磁盘、网络带宽、端口可达性、服务响应时间、错误率(5xx)。使用Prometheus+Grafana、Zabbix或云监控。
- 告警通道:短信/电话、企业微信/Slack、PagerDuty。设置分级告警并定义接管责任人。定期(每季度)做桌面演练和半年度实战切换演练。
11.
应急通讯与恢复运行手册(Runbook)
- 编写详细Runbook:故障类型 -> 检查项 -> 快速判断(网络/电力/硬件)-> 快速切换步骤(DNS切换、启动异地服务、数据库切换、回切策略)。
- 联系清单:机房运营联系人、ISP、云厂商、支付/第三方服务支持,包含电话与备用邮件。
12.
具体执行示例:DNS切换实操步骤
- 预先把备用机房的服务健康检查与后端准备好,确保静态资源已同步。
- 切换流程:降低TTL(预先完成) -> 在主故障时将A/AAAA/NS记录指向备用IP/负载均衡 -> 监控流量与错误率 -> 保持短时间内回退通道(保留旧记录并延长TTL为回滚)。
13.
具体执行示例:数据库主从提升步骤(MySQL)
- 准备:确保从库为可提升的候选(binlog、GTID同步、延迟可接受)。
- 提升流程:停止写入到故障主(若有中间层),在从库上执行STOP SLAVE; RESET SLAVE ALL; SET GLOBAL read_only=OFF; 指定应用连接字符串指向新主并验证应用写入。记录时间点与GTID。
14.
测试、演练与持续改进
- 每季度至少一次演练:包括DNS切换、数据库提升、异地部署。记录演练耗时、失败点并更新Runbook。
- 演练后进行事后复盘(含SLA影响、客户影响、改进项),并把改进项纳入下一周期计划。
15.
额外建议:合同与法律、保险
- 审查机房合同和交叉连接SLA,明确赔付条款与资源优先权。
- 评估业务中断保险选项,作为降低损失的经济措施。
16.
常见问题:如何在预算有限下优先实施
- 优先级实施建议:先做关键服务的异地备份与DNS短TTL+备用域名,再做数据库异地从库,最后做全环境冷备或热备。
- 使用云资源做弹性备援(按需付费),避免高昂的长期专线与机房租赁。
17.
问:香港机房突发大面积断电时,首要的应对步骤是什么?
- 答:立即启动Runbook:确认故障范围(通过监控/机房通知)、切换DNS到备用机房或启动Anycast策略、在备用环境启动应用与数据库从库提升、通过预设通信渠道通知客户并开启故障处置会议。优先保证P1服务并记录每一步时间。
18.
问:怎么保障数据切换时最低的数据丢失?
- 答:采用同步或半同步复制(若延迟可接受)并配置短周期的二进制日志/增量备份;在切换时记录最后确认的binlog或GTID位置,按该位置进行回放或恢复,演练确保流程可靠。
19.
问:长期维护这些预案需要哪些常规工作?
- 答:定期(每月/每季度)校验备份并做恢复演练、更新Runbook与联系人清单、保持镜像与配置管理库最新、监控告警策略与演练结果的持续改进、审查SLA与合同。保持演练频率并把改进项纳入运维日程。
来源:如何提前规划以降低香港机房出问题后的业务损失