1. 概述与准备工作
说明目标与假设:我们以香港高防云服务器(具备DDoS防护、弹性公网IP、快照功能)为例,目标是实现可测量的RPO/RTO并能在故障后快速恢复。
准备清单:管理员账号、API密钥、备份存储(对象存储或另一区域)、SSH密钥、监控告警渠道(PagerDuty/钉钉/邮件)。
分工建议:编写Runbook、指定恢复负责人、指定备份验证负责人。
2. 制定RPO与RTO并量化优先级
步骤:1) 列出所有业务和组件(Web、App、DB、缓存、存储)。2) 为每类定义RPO(数据可容忍丢失时间)与RTO(可接受恢复时间),例如:交易库RPO=5分钟,RTO=30分钟;日志RPO=24小时,RTO=6小时。
结果形成矩阵并纳入SLA。
3. 备份策略总体架构
采用多层备份:本地快照(低RTO)、周期性增量备份到对象存储(低成本异地保留)、长期归档(冷存)。
策略示例:主机快照:每4小时快照(保留7天);数据库增量:每15分钟binlog或增量备份;全量备份:每天00:30上传到对象存储并保留30天。
4. 主机与文件级备份的具体实现
步骤一:使用云提供商快照API(示例:调用curl或SDK)。示例命令(伪示例,用真实API替换):
curl -X POST "https://api.hk-cloud/v1/snapshots" -H "Authorization: Bearer
" -d '{"instance":"i-xxx","name":"auto-`date +%F-%H%M`"}'。
步骤二:文件级增量用rsync,crontab示例:*/30 * * * * rsync -a --delete /var/www/ user@backup-server:/backup/www/`date +\%F`/。
5. 数据库备份(MySQL为例)
方案A(事务一致性,推荐):使用Percona XtraBackup(innobackupex)。操作步骤:1) 安装xtrabackup;2) 执行增量备份并压缩:xtrabackup --backup --target-dir=/data/backup/inc1 --incremental-basedir=/data/backup/full;3) 备份后进行prepare;4) 上传到对象存储(rclone或provider SDK)。
方案B(小库快速):mysqldump --single-transaction --master-data=2 --flush-logs -u root -p'pass' dbname > /backup/dbname-`date +%F_%H%M`.sql。
6. 备份上传与加密
推荐使用对象存储(例如HK区域对象存储),并通过rclone或官方SDK上传。示例rclone命令:rclone copy /backup remote:bucket/hk-backups --backup-dir=remote:bucket/archive --delete-after。
加密措施:使用gpg对备份文件加密(gpg --symmetric --cipher-algo AES256 backup.sql.gz),并妥善保管密钥和使用KMS进行密钥管理。
7. 备份验证与自动化检测
自动化校验流程:1) 每次上传后检查SHA256校验值并记录;2) 周期性(每周)从对象存储下载并恢复到测试环境做完整性与可用性验证。
示例脚本片段:sha256sum backup.tar.gz > backup.sha256 && rclone copy backup.tar.gz remote:bucket && rclone copy backup.sha256 remote:bucket。
8. 故障切换与DNS/负载均衡策略
当主节点故障时采用多级策略:1) 健康检查失效后自动从备用实例接管(LB或反向代理);2) 使用较短的DNS TTL(例如60秒)与预先配置的备用IP或负载均衡池;3) 预置脚本自动更新DNS(调用DNS API)。
操作步骤示例:当主可用性低于阈值,触发Terraform/Ansible脚本:ansible-playbook failover.yml --extra-vars "target=standby"。
9. 恢复实际步骤(演练用Runbook)
恢复数据库示例Runbook:1) 确认最新备份时间与位置(对象存储路径)。2) 在恢复主机上创建临时目录并下载备份:rclone copy remote:bucket/backup.sql.gz /tmp/。3) 解密并解压:gpg --decrypt backup.sql.gz.gpg | gunzip > /tmp/backup.sql。4) 停止数据库服务并恢复:systemctl stop mysql; mysql < /tmp/backup.sql; systemctl start mysql。
恢复主机快照示例:1) 在控制台创建实例快照恢复;2) 启动实例并调整网络安全组;3) 运行健康检查脚本确认服务正常。
10. 自动化脚本与CI集成
建议将备份/恢复脚本纳入CI(GitLab CI/GitHub Actions)。示例GitLab CI job:backup_job: script: - ./scripts/run_backup.sh artifacts: when: on_success。
脚本要包含:日志记录、错误重试、告警触发(失败邮件/钉钉)和上传校验。
11. 安全与访问控制
步骤:1) 使用最小权限的API Key,仅授予备份/快照权限;2) 对备份数据加密并启用KMS;3) 备份存储开启私有访问并限制IP白名单;4) 定期轮换凭证并记录审计日志。
12. 灾难恢复演练与流程优化
演练频率与步骤:每季度进行一次全流程恢复演练(选择非高峰时段)。演练内容:备份恢复时间测量、应用验证、DNS切换测试、数据库完整性校验。
演练后产出改进清单并更新Runbook,记录恢复真实时间并对照RTO进行优化。
13. 成本控制与保留策略
建议:分层保留(短期高频、长期归档),对不常用的全量备份转存到冷存储(可降低成本)。
示例:7天内保留快照+30天对象存储热备份+一年归档(冷存)。按月审计存储费用并清理过期备份。
14. 常见故障案例与处理要点
案例A:快照失败——检查配额、磁盘I/O与API权限,重试并记录错误码;案例B:数据库恢复后主从差异——使用binlog定位并回放缺失事务。
关键点:恢复后执行完整性校验(行数/校验和)并持续监控一段时间。
15. 问:香港高防云服务器发生DDoS导致业务不可用时,优先恢复哪部分?
答:优先恢复边界能力与流量控制层:启用云厂商的高防清洗服务、调整黑白名单、启动备用弹性公网IP与负载均衡器,把非必要流量导入黑洞策略。同时并行恢复应用层备份(数据库只读切换到只读节点),以确保重要交易通道可用。演练要覆盖这一优先序列。
16. 问:如何验证备份可用性与一致性?
答:实现三个验证点:1) 校验和验证(上传时计算SHA256并比对);2) 定期恢复到隔离测试环境并执行应用功能测试;3) 数据库恢复后执行校验脚本(行数、主键完整性、对账脚本)。把验证结果纳入告警与报告。
17. 问:执行全量恢复时常见错误和避免办法是什么?
答:常见错误包括缺少最新binlog、权限不足、密钥丢失或网络带宽不足。避免办法:确保备份策略包含增量/二进制日志、备份密钥离线备份、预留带宽或在对象存储加速点下载、在Runbook中列出所有前提条件并在演练中确认。
来源:香港高防云服务器故障恢复与备份策略实务分享