目标:建立从“数据备份 → 灾备拓扑 → 切换/回滚演练 → 监控与度量”的完整闭环,覆盖 RPO/RTO 目标制定、冷/温/热备架构、数据库与文件/块级备份、对象存储与不可变备份(防勒索)、演练流程与脚本化样例。
一、核心指标与策略选择
RPO(恢复点目标):允许数据丢失的上限时间(如 ≤ 5 分钟)。
RTO(恢复时间目标):从故障到恢复可用的时间(如 ≤ 15 分钟)。
策略匹配:
冷备(低成本):RPO 小时级,RTO 小时级,适合低频业务。
温备(均衡):RPO 分钟级(日志/增量),RTO 分钟~十几分钟。
热备(高可用):RPO 秒级(同步),RTO 秒~分钟,成本最高。
二、备份类型与落地手段
逻辑备份:mysqldump/pg_dump;跨版本/跨平台兼容,速度较慢,适合小中数据量与“结构备份”。
物理备份:XtraBackup(MySQL/InnoDB)、pg_basebackup/文件系统快照;速度快、PITR 支持友好。
增量与日志:binlog/WAL/redo 日志;用于时间点恢复(PITR)。
快照:LVM/ZFS/云盘/CSI 快照;一致性需“应用感知”(fsfreeze、pre-stop hooks)。
存储:本地/NAS/对象存储(S3 兼容),建议启用版本化与不可变(Object Lock/WORM)。
三、数据库实战方案
3.1 MySQL(XtraBackup + Binlog PITR)
全量(每日)+ 增量(小时)+ Binlog(实时):
# 全量(停写窗或使用 --safe-slave-backup)innobackupex --user=backup --password=*** /backup/full/$(date +%F)# 增量(基于最近一次备份)innobackupex --incremental /backup/inc/$(date +%F-%H) \--incremental-basedir=/backup/full/2025-10-01# 备份 binlog(建议同步到对象存储)mysqlbinlog --read-from-remote-server --raw \--host=127.0.0.1 --user=rep --password=*** \--stop-never mysql-bin.* -r /backup/binlog/
# 准备全量+增量innobackupex --prepare --apply-log-only /backup/full/2025-10-01innobackupex --prepare --apply-log-only /backup/full/2025-10-01 \--incremental-dir=/backup/inc/2025-10-01-12innobackupex --copy-back /backup/full/2025-10-01# 回放 binlog 到目标时间mysqlbinlog --stop-datetime="2025-10-01 12:34:00" /backup/binlog/mysql-bin.* | mysql -u root -p
3.2 PostgreSQL(BaseBackup + WAL)
# 基础备份pg_basebackup -h 127.0.0.1 -U repl -D /backup/base/$(date +%F) -Ft -z -P# 开启归档(postgresql.conf)archive_mode=onarchive_command='test ! -f /backup/wal/%f && cp %p /backup/wal/%f'
recovery.signal 与 restore_command,回放到 recovery_target_time。
四、文件/块级与快照
文件级:
rsync(Linux)/robocopy(Windows)按目录策略同步。
rsync -aHAX --delete /data/ backup@nas:/backup/data/
LVM 快照:适合快速一致性快照(配合
fsfreeze)。
fsfreeze -f /data && lvcreate -L 10G -s -n data_snap /dev/vg0/data && fsfreeze -u /data
ZFS:原生快照与发送/接收(send/recv)。
zfs snapshot pool/data@$(date +%F-%H)zfs send -v pool/data@2025-10-01-12 | zfs recv backup/data
五、对象存储与不可变备份
S3 版本化 + 生命周期:冷热分层、自动过期;敏感数据启用 SSE-KMS。
不可变(Object Lock/WORM):防勒索/误删;配合多账号/多钥匙与最小权限策略(IAM)。
传输加密:TLS;端到端校验(ETag/MD5);清单与抽样还原验证。
六、灾备拓扑设计
单 AZ 冷/温备:同城同机房或异机房异地;定期/准实时复制。
跨 AZ 热备:同步复制,主备切换秒级;成本与复杂度高。
跨 Region 异地多活:双向复制(冲突解决)、全局流量调度(DNS/GSLB)。
典型分层:数据库层(主从/半同步/逻辑复制)+ 存储层(快照/复制)+ 应用层(无状态多点部署)。
七、切换与回滚演练(Runbook + 脚本)
演练基本流程:
宣布演练窗口与影响面、冻结变更;
降级读/只读模式(必要时);
触发切换(VIP/DNS/网关权重/主从角色);
验证读写、关键链路与观测;
业务侧确认;
结束演练并复盘;如异常,按回滚流程恢复。
示例:DNS 切换(权重 10% → 100%)
cli dns weight set web.example.com A 10.0.0.1 10 # DR 10%sleep 300cli dns weight set web.example.com A 10.0.0.1 100 # DR 100%
systemctl stop haproxy && systemctl restart keepalived # 触发 VIP 迁移
# 原主只读,防双写mysql -e 'SET GLOBAL read_only=ON;'# 提升从库为主mysql -h dr -e 'RESET SLAVE ALL; SET GLOBAL read_only=OFF;'
回滚原则:
切换失败立刻回滚到原路径;
严格“数据新旧优先级”——避免新写入丢失;
回滚脚本与切换脚本同级维护、同样频率演练。
八、Kubernetes 状态数据灾备
etcd 快照:控制面关键数据定期快照与异地复制。
ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \--cacert=/etc/kubernetes/pki/etcd/ca.crt \--cert=/etc/kubernetes/pki/etcd/server.crt \--key=/etc/kubernetes/pki/etcd/server.key \snapshot save /backup/etcd-$(date +%F).db
应用数据:Velero 备份/还原命名空间级别对象与卷(CSI 快照或 Restic)。
velero backup create ns-prod --include-namespaces prod --ttl 168hvelero restore create --from-backup ns-prod
跨集群演练:目标集群预建 StorageClass/IngressClass;先小范围命名空间验证。
九、监控、审计与度量
备份作业状态:定时任务成功率、时长、吞吐;失败告警与重试。
恢复演练:按季度覆盖“全链路还原”抽样;形成演练记录与问题整改单。
指标化:RPO 实际达成、RTO 实际达成、恢复成功率、校验一致率、存储成本。
审计:备份/恢复操作留痕(仓库/对象存储访问日志)与最小权限访问控制。
十、保留策略与成本优化
3-2-1 原则:至少 3 份、跨 2 种介质、1 份异地/离线;关键数据 + 不可变副本。
保留:日/周/月/年分层,冷归档至低频/冷存储;到期自动清理。
成本:压缩与去重(重复数据删除)、分层存储、按访问频率选择存储类别。
结语
备份只是手段,能“稳定且可重复地恢复”才是目标。以明确的 RPO/RTO 为锚,结合分层备份、对象不可变与定期演练,用脚本化与可观测闭环把灾备纳入日常运维常规,才能在关键时刻“按下按钮,放心切换”。

