1.
目标:明确演练要达到的恢复时间目标(RTO)和恢复点目标(RPO),例如RTO=30分钟,RPO=5分钟。
范围:列出本次演练包含哪些系统(web、api、数据库、缓存、文件存储、监控、告警)。排除哪些非关键服务。明确演练为“日本机房完全不可用”的场景。
2.
步骤:导出并整理清单,包括实例ID、私网IP、弹性IP/浮动IP、磁盘快照、备份策略、域名与DNS托管商、负载均衡器、SSL证书、数据库复制信息、外部依赖(第三方API)。
工具建议:使用CSV或CMDB(比如Git仓库+YAML),格式示例:region,instance_id,role,internal_ip,floating_ip,backup_enabled。
3.
多可用区/多区域:在Vultr或其他云(如同一区域内的东京与大阪、或使用新加坡/香港作为异地)准备热备或冷备实例。
数据同步:对数据库使用主从复制(MySQL/MariaDB/Galera),或使用Percona XtraBackup+rsync;文件采用rsync/lsyncd或对象存储跨区复制。确保备库可提升为主库,并定期进行基线恢复演练。
4.
DNS策略:降低主域名TTL到60秒(演练前72小时开始生效),使用支持健康检查与故障切换的DNS提供商(Cloudflare, DNSMadeEasy等)。
浮动IP/弹性IP:在Vultr若支持Floating IP,提前绑定到备用实例;若不支持,准备更新DNS或使用云负载均衡并在备用区域注册后端节点。
5.
Runbook包含步骤序列与命令示例:例如1) 验证故障;2) 切换DNS(示例:通过DNS提供商API将A记录切到备用IP);3) 提升备库(MySQL:STOP SLAVE; RESET SLAVE ALL; SET GLOBAL read_only=OFF;)。
脚本与自动化:准备Terraform/Ansible脚本用于创建备用实例、配置网络与部署应用;准备Bash脚本或CI/CD pipeline用于自动化切换。
6.
明确联系人:SRE/运维、DBA、应用负责人、客户支持、法务与公关。建立电话树与Slack/钉钉应急频道,准备标准通知模板(故障确认、进展更新、恢复完成)。
演练指挥:指定演练总指挥(Incident Commander),并指定记录员(scribe)记录时间线与操作命令以便事后复盘。
7.
检查点:确认备份可用且最近一次备份可恢复;确认备援实例通过SSH;确认DNS API凭据和权限;确认监控、报警与健康检查配置正确。
演练前演练:先做一次桌面演练(桌面彩排),让每个角色熟悉流程与命令,修正Runbook中的不明确项。
8.
步骤示例(按时间线严格执行):1) 触发:模拟日本机房全失联(由SRE下达开始指令);2) 验证:通过外部监控确认服务不可达;3) 启动备用:执行Ansible playbook创建/启动备用实例并挂载最新快照;4) 数据提升:在备用数据库执行提升命令;5) 切换流量:更新DNS记录或绑定Floating IP;6) 验证流量:用curl和业务脚本验证关键路径。
具体命令示例:备份数据库并传输:mysqldump -u root -p --single-transaction --routines dbname > dump.sql; rsync -avz dump.sql user@backup:/root/;在备库执行mysql < dump.sql。
9.
指标收集:记录从故障确认到流量完全切换的时间(实际RTO),以及数据丢失量(RPO)。收集错误率、响应时间、用户影响统计。
复盘会议:48小时内召开复盘,记录成功步骤与失败点,制定改进计划(修补自动化脚本、降低TTL、增加异地容量),并将Runbook更新到版本控制中。
10.
演练频率:对关键服务至少每季度一次全流程演练;对次要服务半年一次。每次演练后更新依赖清单与Runbook。
维护:把脚本、凭证、联系方式存入受控密码库(如Vault),并向团队公开演练结果与改进项,确保演练不是一次性行为。
11.
安全措施:演练中对外通知“正在进行演练(non-production)”以免误触客户告警。使用测试数据或对敏感数据做脱敏处理。
回退计划:始终准备回退步骤(如何把DNS或Floating IP指回原主机),并在每一步操作前确认回退命令可执行。
12.
多场景准备:除了机房断连,还要演练数据库主机崩溃、网络分割、存储故障与配置错误等,针对不同场景准备单独的Runbook。
测试外部依赖:模拟第三方API不可用的降级方案(缓存、限流、后退策略),确保业务在依赖中断时有可用降级路径。
13.
答:先确认TTL已足够低并等待传播完成,同时在旧IP上保留一个响应页或302跳转到新域名(若旧机房还能回应)。若旧机房已完全不可用,使用流量重放或将旧IP映射到透明代理以捕获请求并统计未切换用户群。
14.
答:在提升前先用最近备份做一次恢复演练到临时环境,执行一致性校验(如表行数、主键信息、事务ID),并在提升过程中启用只读标识位,逐步切换写流量并监控应用错误。
15.
答:对比演练前后的RTO与RPO,统计恢复步骤完成时间、自动化覆盖率、人工操作次数与错误率,列出已修复的Runbook差异,并在下一次演练中验证这些改进是否生效。