1.
总体策略与目标设定
- 明确RPO(数据可接受丢失时间)与RTO(恢复时间目标)。
- 按站群分级:核心站(RPO≤1小时,RTO≤30分钟),普通站(RPO≤6小时,RTO≤2小时)。
- 确定备份类型:全量+增量+快照+日志归档,并制定保留策略(如7天、30天、90天)。
2.
备份架构与存储规划
- 本地快照(例如LVM/ZFS)用于快速恢复;异地对象存储(S3或腾讯cos)用于容灾。
- 备份数据分离磁盘与主服务,采用加密传输(TLS)和加密存储(AES-256)。
- 设定备份带宽窗口,避免高峰影响业务,使用限速工具(rsync --bwlimit)。
3.
文件与静态内容备份实操
- 每日全量每周一次,增量采用rsync或tar+增量方式。示例:rsync -aH --delete /var/www/ user@backup:/data/site1/。
- 使用硬链接保存历史:rsync到日期目录并用rsync --link-dest实现增量硬链接节省空间。
- 定期校验:tar -tzf backup.tar.gz 或 rsync --checksum 检查一致性。
4.
数据库备份与恢复步骤(MySQL示例)
- 小库可用mysqldump:mysqldump --single-transaction --routines --events -u root -p DBNAME > db.sql。
- 大库推荐Percona XtraBackup:innobackupex --stream=tar /backup | gzip > /obj/db/backup_$(date +%F).tar.gz。
- 恢复命令示例:mysql -u root -p DBNAME < db.sql;Xtrabackup恢复需prepare后copy回数据目录并chown/selinux处理。
5.
快照与云厂商API自动化
- 使用云主机快照(如云硬盘快照)保证一致性:先冻结文件系统或挂载为只读,再触发快照API。
- 编写脚本调用API(示例伪码):curl -X POST https://api.provider/snapshots -d '{"volume":"vol-xx"}'。
- 快照与备份结合:快照导出到对象存储,保留策略自动清理过期快照。
6.
数据传输与加密、校验
- 使用rclone或aws-cli同步到对象存储:rclone sync /backup remote:bucket/site --transfers=8。
- 传输前后计算SHA256校验:sha256sum file > file.sha256,恢复时比对。
- 备份文件上加密:gpg --symmetric --cipher-algo AES256 backup.tar.gz。
7.
恢复演练(故障演练)准备与流程
- 演练前:通知相关团队,准备演练跑本与回滚计划,列出依赖清单(DNS、负载均衡、证书)。
- 演练步骤:1)触发模拟故障(停主机或切断网络);2)按恢复Runbook执行(恢复数据、启动服务、切换DNS);3)验证业务流并计时RTO。
- 记录问题、时间点与改进项,形成演练报告并调整SOP。
8.
自动化Runbook与监控告警集成
- 将常用恢复步骤写成可执行脚本(restore_files.sh, restore_db.sh),并放到版本控制。
- 集成监控告警(Prometheus/Alertmanager)在备份失败或延迟时自动通知运维群组。
- 定期(每月)自动测试恢复脚本并生成结果报告。
9.
权限、审计与合规要点
- 备份账户最小权限原则,使用专用密钥并定期轮换。
- 记录备份/恢复操作审计日志(包含触发人、时间、命令摘要),保存90天以上以备核查。
- 确保个人资料与敏感信息按法规加密与访问控制。
10.
问:演练频率与范围应该如何制定?
- 建议:核心站每季度至少一次全流程演练(包含RTO计时),普通站半年度一次。范围包含数据恢复、应用启动、DNS切换与监控告警验证。
11.
问:如何验证备份数据的可用性?
- 定期从备份实例恢复到隔离环境并做烟雾测试(页面加载、数据库查询、登录),同时做校验(校验和、行数比对)并记录结果。
12.
问:恢复时如何保证最小业务中断?
- 采用分层恢复:先恢复数据库与API服务到临时主机,再逐步切换负载均衡;使用DNS TTL短化、预先准备好备机镜像与自动化脚本可将RTO降到最小。
来源:台湾站群云主机备份恢复策略制定与故障演练实施要点