10.4 快照与备份

一句话

快照是同一份数据的时间点视图(快、省、与源共命运),备份是独立的一份副本(慢、贵、能独立恢复);RPO 决定多久备一次,快照只能加速恢复,不能替代备份。

先分清四个概念

概念 数据在哪 独立性 主要用途 恢复速度 单位成本
快照 与原数据同一存储系统 低(同账号、同区域、同阵列) 短周期恢复点、误删回滚、克隆环境 秒级挂载,数据按需加载 中(块存储单价)
副本(replica) 另一台机器/另一个 AZ 中(同厂商、同账号常见) 高可用、故障切换 秒~分钟 高(全量冗余)
备份 独立介质/独立账号/异地 高(可离线、不可变) 灾难恢复、合规留存、勒索恢复 分钟~小时 低(对象存储/归档)
归档 低频介质 高 合规长期保留 小时级(取回延迟) 最低

三个容易混淆的「快照」也要分清,它们同名但主场不同:

名称 含义 主场
存储快照 云盘/阵列的块级时间点副本 本节
数据库快照 MVCC 下的一致性读视图 44.10 事务与隔离级别的实现
共识快照 Raft 日志压缩后的状态机镜像 21.8 Raft:成员变更与快照
分布式快照 Chandy-Lamport 全局状态 25.5 分布式快照 (Chandy-Lamport)(待补)

快照为什么能「秒级」:COW / ROW / 元数据

机制 做法 写路径代价 典型场景
COW(写时复制) 写之前把旧块复制到快照区,源卷继续服务写 首次写旧块要额外复制一次 → 写放大 快照生命周期短、写少读多
ROW(写时重定向) 新数据写到新位置,快照保留旧位置 正常写路径不变,元数据更新 长期保留、克隆
元数据快照 只记录指针表,数据块共享 几乎为零 文件系统/分布式存储

云盘快照通常是块级增量 + 元数据:第一份全量,之后每次只存变化的块,恢复时按链拼装。

fio 能看到快照对写性能的影响(Linux,需先创建快照):

# 无快照基线
fio --name=w --filename=/data/test.img --size=1G --rw=randwrite --bs=4k --iodepth=32 --runtime=30
# 创建快照后再跑同一条命令,对比 iops / clat

COW 快照保留越久,源卷每次写旧块都要复制一次,写放大越明显——快照不是「免费的时光机」,它把成本转移到了写路径。

一致性:崩溃一致 vs 应用一致

类型 怎么得到 恢复后像什么 适用
崩溃一致(crash-consistent) 直接对运行中的卷打快照 像拔电重启:文件系统可修复,数据库靠 redo/WAL 前滚 无状态数据、能接受重放
应用一致(application-consistent) 冻结写入(fsfreeze)、数据库进入备份模式、刷盘后再快照 事务边界完整,无需恢复 数据库、消息队列、多卷关联数据

数据库要恢复到「任意时间点」,光有快照不够,必须 快照 + WAL/binlog 连续归档:

一致性快照(基线)  +  归档日志(增量)  →  恢复到任意时刻(PITR)

🔑 只打快照不做日志归档,RPO 就是快照间隔;只归档日志不打基线快照,恢复要重放全量历史,RTO 不可控。两者是乘法关系,不是二选一。

多卷一致性:一个业务的数据盘和日志盘分别打快照,两个快照时间点不同 → 恢复后对不上。要么用存储的一致性组快照,要么停写后批量打。

备份的三要素

要素 要求 常见失分
3-2-1 3 份副本、2 种介质、1 份异地/离线 三份都在同一个云账号
不可变 对象锁(WORM)、保留策略、MFA delete 备份账号可被同一把密钥删除
加密与密钥分离 静态加密 + 传输加密;密钥不与备份同库 密钥和备份放同一个 KMS/账号
可验证 定期恢复演练 + checksum 抽样 只看「备份任务成功」
可定位 备份目录/清单可查、版本可追溯 恢复时找不到「上周三那份」

「3-2-1」在云上的现代变体是 3-2-1-1-0:多一份离线/不可变,加「0 错误」——每次备份都要校验,恢复演练零失败。

算一笔账:快照不是免费的

设定:100 块 1 TiB 云盘,日变更率 5%,快照保留 7 天(1 份全量 + 6 份增量),单价按公开价目表量级。

方案 数据量 单价假设 月成本
块存储快照(7 天) 130 TiB $0.05/GB·月 $6,656
同量放对象存储标准层 130 TiB $0.023/GB·月 $3,062
同量放对象存储归档层 130 TiB $0.004/GB·月 $532
每日全量备份保留 30 天 3,000 TiB $0.023/GB·月 $70,656
同上,归档层 3,000 TiB $0.004/GB·月 $12,288

每卷 7 天快照 = 1 TiB × (1 + 6 × 5%) = 1.30 TiB,恢复时要读 1.30 倍数据量。

三个结论:

  1. 每日全量保留 30 天是不可承受的($70,656/月),必须用增量/差异 + 合成全量(策略见 36.2 备份策略);
  2. 快照贵在块存储单价,备份便宜在对象存储单价:同样的字节,对象存储便宜一个数量级,代价是恢复慢、需要下载与解压;
  3. 恢复时间与数据量线性相关:1 TiB @ 200 MB/s ≈ 87.4 分钟,还没算解压、校验、日志重放。RTO 30 分钟的目标,靠单流恢复是做不到的,必须并行流 + 增量恢复 + 预置环境。

RPO / RTO 怎么落到策略

策略 RPO RTO(量级) 成本 防什么
每小时快照,保留 7 天 ≤ 1 小时 分钟级(挂载+按需加载) 中 误删、错误发布、逻辑损坏
每日备份 + binlog 归档 秒~分钟(PITR) 小时级(下载+重放) 低 上述 + 长期留存 + 部分灾难
快照跨区复制 15 分钟~1 小时 小时级 中高 单区域故障
跨账号不可变备份 同备份周期 小时级 中 勒索软件、账号被盗
冷备/温备/热备 由复制方式决定 分钟~小时 高 机房级灾难

公式:

RPO = 备份/复制间隔 + 传输延迟
RTO = 检测 + 决策 + 准备环境 + 恢复数据 + 校验 + 切流

大多数团队只优化「恢复数据」这一段,忽略了检测与决策(谁批准恢复?恢复到哪个点?)和环境准备(集群、网络、密钥、证书)。演练时要给每一段计时。

恢复演练:唯一能证明备份有效的手段

演练项 做法 通过标准
数据完整性 抽样行数、checksum、关键业务查询 与源端一致(或差异可解释)
应用可启动 恢复到隔离环境,跑一遍冒烟 服务能起、依赖能连
配置与密钥 备份里是否含配置、证书、密钥 缺一项就算失败
时长 每段计时,与 RTO 对比 总时长 ≤ RTO × 0.8(留余量)
权限 恢复操作是否只需最小权限 不能依赖「某个人记得」

频率:核心系统每季度一次,非核心每半年一次;每次发布重大变更(库版本、存储引擎)后加一次。

反模式

反模式 后果
把快照当备份 源系统整体消失(账号被盗、区域故障)时快照一起没
备份与生产同账号、同密钥 勒索软件一次拿到删除权限,备份被一起加密/删除
备份不加密,或密钥与备份放一起 备份泄露 = 数据泄露;密钥丢失 = 备份作废
只备数据库,不备对象存储/配置/密钥 恢复后应用起不来,或缺图片/证书
从不演练,只看任务成功 真故障时恢复失败率极高;损坏的备份比没有更危险
增量链从不合成全量 链越长恢复越慢,中间坏一个全链作废
保留策略无限增长 存储成本线性上涨,且没人敢删
跨卷快照不对齐时间点 恢复后数据互相矛盾,业务手工修
备份窗口压在业务高峰 备份抢 IO,延迟上升,然后被「优化」掉

自检

Q1 快照秒级、备份小时级,为什么不能只用快照?

▸ 答案:快照与原数据同存储系统、同账号、同区域,独立性不足:账号被盗可以删快照、区域故障快照一起不可用、存储系统损坏快照也没了。快照防的是逻辑错误(误删、错误发布、批量改坏),恢复快是它的价值;备份防的是源系统整体消失,必须异地/离线/不可变。判断标准一句话:**源系统整体消失后,它还能独立恢复吗?**不能就不是备份。

Q2 崩溃一致性快照 + WAL 能恢复到哪个点?为什么还需要应用一致性快照?

▸ 答案:崩溃一致性快照相当于「拔电瞬间」,配合 WAL 前滚可以恢复到事务一致的状态(已提交的不丢、未提交的回滚),但恢复过程需要时间且依赖日志完整。应用一致性快照在打快照前冻结写入、刷盘、进入备份模式,恢复后不需要崩溃恢复,RTO 更短、风险更低;对多卷/多组件的业务(数据库+搜索索引+消息队列)尤其必要,否则各组件恢复到的时间点不一致。

Q3 100 卷 × 1 TiB、日变更 5%:7 天快照约 $6,656/月,每日全量备份保留 30 天约 $70,656/月。为什么差 10 倍以上?怎么把备份成本压下来?

▸ 答案:快照只存「首份全量 + 每天 5% 增量」,30 天全量则是每天一份 1 TiB × 100 卷 × 30 天 = 3,000 TiB,数据量差 23 倍(130 TiB vs 3,000 TiB),再叠加块存储与对象存储的单价差。压成本:增量/差异备份 + 定期合成全量(把链截断)、压缩与去重、冷数据下沉归档层、按业务分级设定保留期、只对关键数据做高频备份。

Q4 RTO 是 30 分钟,数据 1 TiB,单流恢复 200 MB/s 要 87 分钟。你至少要改哪三件事?

▸ 答案:① 并行恢复:多流/多线程拉取与写入,把有效吞吐提到 1 GB/s 以上(4–8 流);② 增量/块级恢复:只恢复变化块,或先挂载快照按需加载、优先恢复热数据;③ 预置环境:恢复目标集群、网络、密钥、证书提前就绪,把「准备环境」从小时级压到分钟级。另外要把检测与决策流程自动化(谁批准、恢复到哪个点),否则 RTO 卡在人际流程上。

Q5 勒索软件场景下,快照和备份分别能不能救你?还需要什么?

▸ 答案:快照大概率救不了——攻击者拿到权限后通常先删快照/备份再加密数据;同账号、可写的快照是同一个攻击面。备份要能救你,必须满足:不可变(对象锁/WORM)、独立账号与独立凭证、离线或气隙、保留期长于攻击潜伏期。还需要:MFA delete、删除告警、恢复演练、以及「最小权限 + 凭证轮换」防止攻击者再次拿到备份账号。

跨篇相关:全量/增量/差异的成本结构与恢复链见 36.2 备份策略;冷备/温备/热备的形态见 36.3 冷备 / 温备 / 热备;跨机房副本与多活见 36.4 两地三中心与多活;RTO/RPO 的定义见 36.1 RTO / RPO;演练与验证见 36.7 演练与验证;块/文件/对象的语义见 10.1 块存储 / 文件存储 / 对象存储;对象存储的版本与生命周期见 10.2 对象存储语义;云盘 IOPS/吞吐模型见 10.3 云盘性能模型 (IOPS / 吞吐 / 时延);备份数据的长期留存落在归档层,见 39.3 存储分级;WAL 与崩溃恢复见 44.2 存储引擎:WAL 与崩溃恢复。