目标与RTO/RPO设定:明确恢复时间目标(RTO)与数据丢失容忍度(RPO)。
资产清单:列出所有 VPS、浮动 IP、域名、证书、数据库、存储卷与第三方依赖。
权限与联络:确保运维账号、API 密钥、云控制台管理员与应急联系人准备就绪。
快照:在云控制台或使用 API 创建磁盘快照(示例:provider api snapshot create --server-id)。
文件级备份:使用 rsync -aAX --delete /var/www/ user@backup:/backup/www 或 tar czf /backup/www-$(date +%F).tar.gz /var/www。
数据库备份:mysqldump -u root -p --single-transaction --quick --lock-tables=false dbname > db.sql。
配置管理:把 /etc、nginx 配置、systemd 单元、docker-compose.yml 放入 Git 私有仓库。
恢复脚本示例:restore.sh 包含:挂载卷、导入 SQL、恢复证书、启动服务(systemctl start nginx && docker-compose up -d)。
测试脚本:healthcheck.sh 使用 curl -f http://localhost/health || exit 1。
低 TTL:故障前将域名 TTL 降到 60s。
备用节点:准备位于非 CN2 或同区域的备节点,记录其公网 IP。
切换步骤:在 DNS 提供商控制台把 A 记录改为备用 IP,或启用健康检查的负载均衡器做自动切换。
如供应商支持浮动 IP:预先绑定备用 VPS,发生故障时在控制台把浮动 IP 从故障机迁移到备用机。
命令示例(临时):sudo ip addr add <浮动IP>/32 dev eth0 && ip route add default via
验证:curl --resolve your.domain:80:<浮动IP> http://your.domain/health。
1) 登录备用机:ssh root@backup_ip。
2) 挂载快照或恢复文件:rsync -a backup:/backup/www/ /var/www/ && tar xzf /backup/db.sql.tar.gz -C /var/backups。
3) 导入数据库:mysql -u root -p dbname < /var/backups/db.sql。
4) 恢复证书:cp /backup/letsencrypt /etc/letsencrypt && certbot renew --dry-run。
5) 启动服务:systemctl restart php-fpm nginx || docker-compose up -d;检查日志:journalctl -u nginx -n 200。
镜像与卷:docker save myapp:latest > myapp.tar;备份卷:docker run --rm -v vol:/data -v $(pwd):/backup alpine tar czf /backup/vol.tar.gz -C /data .
恢复:docker load < myapp.tar && docker volume create vol && tar xzf vol.tar.gz -C /var/lib/docker/volumes/vol/_data/。
重建:docker-compose pull && docker-compose up -d。
验证项:HTTP 200、数据库读写、关键业务链路(登录、下单)、证书有效。
回滚触发:安全问题、数据不一致或性能未达标时执行回滚脚本并恢复原先快照与 DNS。
记录与审计:记录每步时间戳与操作者,保留日志便于事后演练复盘。
演练启动:通知业务、降低流量(若需),切换至备用节点或浮动 IP。
步骤顺序:切换 DNS/浮动IP → 部署快照/备份 → 恢复数据库 → 启动服务 → 验证 → 公告上线。
时限分配:每步设定最大耗时(如 DNS 切换 5min,数据库导入 20min 等)。
收集日志:集中到 ELK/Prometheus,演练中记录错误率、延迟、带宽。
监控报警:设置关键指标阈值(CPU、连接数、5xx比例),触发自动告警并执行预定义脚本。
后评估:演练结束后 24 小时内完成 RTO 达成度与改进项清单。
网络不可达:ping、traceroute、ip route show;端口被占:ss -tlnp;服务崩溃:systemctl status name && journalctl -u name -n 200。
数据库死锁:SHOW PROCESSLIST;;磁盘满:df -h && du -sh /var/*。
问:越南 CN2 VPS 出现全网丢包,首要动作是什么?
答:先确认是否为本机故障:ssh 登录与否;若无法登录立即在供应商控制台查看实例状态、控制台日志并创建快照;同时在备用机准备好最新备份并开启浮动 IP 或启动 DNS 备用记录切换。
问:数据库恢复时间长怎么办,有无加速方法?
答:可用物理备份恢复(xtrabackup)或启用二进制日志增量恢复,导入时先停止索引(SET FOREIGN_KEY_CHECKS=0;)导入后再重建索引;并使用 pv 管道(pv dump.sql | mysql ...)查看进度,或在更高 I/O 实例上恢复后再切换。
问:如何保证演练不影响生产数据与用户?
答:演练前使用镜像数据或快照做演练环境,DNS 与浮动 IP 切换在低峰进行,设置低 TTL 并通知客户;对写操作敏感的业务可采用只读模式或限流,确保演练期间业务最小化风险。