存储容量水位线如何设置?
简化版
容量水位线不能只设一个“磁盘 80% 告警”。通常分预警、高水位和紧急水位:预警触发扩容与迁移,高水位停止向该节点放新副本,紧急水位限制非必要写入或进入只读。阈值必须预留 Compaction、快照、恢复、WAL 和故障重建所需的临时空间,并同时看剩余字节与增长速度。
详细版
百分比对不同容量磁盘含义不同:1 TB 磁盘剩 10% 是 100 GB,20 TB 磁盘剩 10% 是 2 TB。因此判定通常同时使用 used_ratio、free_bytes 和预计耗尽时间。
例如预警 70%、高水位 80%、紧急水位 90% 只是起点。若一次最大 Compaction 需要 800 GB 临时空间,节点即使只用到 75%,但剩余空间不足 800 GB 加安全余量,也不应继续接收数据。
动作要分级:70% 发起容量工单,80% 禁止新分片并加速迁出,90% 停止低优先级后台任务、拒绝会扩大占用的写入。恢复阈值应低于触发阈值,例如降到 75% 才解除 80% 状态,避免抖动。
面试时还要说明容量预测、租户配额、删除滞后、墓碑和快照保留,否则只报一个百分比没有工程意义。
完整版教学
一、水位线保护的不是磁盘告警
磁盘写满可能导致 WAL 无法追加、Compaction 无处输出、节点崩溃甚至文件损坏。水位线的目标是在不可逆故障前逐级减载和腾挪,而不是等操作系统报 ENOSPC 才处理。它属于数据安全机制,也属于容量调度输入。
二、为什么百分比不够
大盘和小盘的同一百分比对应完全不同的绝对空间。系统还需要预留后台任务的峰值临时空间,因此常用组合条件。
effective_free = free_bytes - reserved_bytes - worst_case_temp_bytes
time_to_full = effective_free / max(recent_growth_rate, safety_floor)
| 指标 | 作用 | 单独使用的缺陷 |
|---|---|---|
| 使用率 | 便于统一策略 | 忽略磁盘大小 |
| 剩余字节 | 反映实际余量 | 忽略增长速度 |
| 耗尽时间 | 支持提前扩容 | 预测受突发流量影响 |
| 可回收字节 | 评估清理潜力 | 回收未必能及时完成 |
三、三级水位如何联动
以 10 TB 节点为例,可先设 70% 预警、80% 高水位、90% 紧急水位,再按压测校准。达到 70% 创建扩容和迁移计划;80% 停止放置新副本并提升迁出权重;90% 暂停大快照、批量导入等非必要任务,必要时拒绝写入。
解除状态要有滞回。例如 80% 触发高水位后,降到 75% 才恢复,避免 79.9% 与 80.1% 间反复切换。动作必须幂等,控制面重试不能重复创建无限迁移任务。
四、必须预留哪些空间
Compaction 在新文件原子发布前要保留旧文件,快照上传前可能需要本地临时文件,副本恢复会同时接收大量数据,WAL 也不能因磁盘紧张被挤占。预留量应覆盖最大单任务输出和并发任务数,而非按平均值估算。
删除数据也不等于立即释放空间。LSM 墓碑要经过 Compaction 才回收,对象存储版本和快照可能受保留期约束。容量面板要区分逻辑数据、物理数据、可回收数据和临时数据。
五、容量预测与数字算例
某节点有效剩余 1.2 TB,近 24 小时净增长 P95 为 120 GB/天,则静态估算约 10 天耗尽。如果扩容交付需要 7 天,安全余量只有 3 天,已应触发行动,而不能因为使用率尚未到 80%继续等待。
预测应过滤迁移带来的短期假增长,并分别计算租户、分片和节点。热点租户可能先打满单个分片,即使集群总体使用率只有 55%。
六、故障与降级设计
节点高水位后不应盲目把数据迁到另一个同样接近满载的节点。放置器要读取目标水位、故障域和迁移并发,防止“水位驱赶”造成集群震荡。紧急删除也必须尊重副本数和快照保留,不能用牺牲恢复能力换空间。
监控包括有效剩余空间、time-to-full、增长率、最大临时需求、WAL 保留、Compaction backlog、迁移 ETA、拒写量和每租户配额。演练应覆盖磁盘突然少 20%、Compaction 卡住和扩容延期。
记忆钩子:水位线的本质是给“还没写满但已经来不及扩容”的状态提前定义动作。
七、常见误区与追问
- 误区:统一设置 80% 就够了。 必须结合绝对字节、临时空间和耗尽时间。
- 误区:删除数据马上释放磁盘。 墓碑、快照和版本保留会延迟物理回收。
- 误区:高水位只需要告警。 还应停止新放置、迁出、限制作业并准备拒写策略。
- 追问:为什么需要滞回区间? 防止阈值附近反复进入和退出保护状态。
- 追问:紧急时先停什么? 先停会扩大空间或抢 I/O 的低优先级作业,保住 WAL 和核心写入。
- 追问:如何验证阈值? 用最大 Compaction、恢复和增长速度做容量演练,再回放真实峰值。
八、加强记忆
容量水位要同时回答“还剩多少、多久耗尽、后台最坏还要多少、触发后做什么”。预警负责提前扩容,高水位负责停止新增并迁出,紧急水位负责保护核心数据路径;滞回、防震荡和故障域约束保证保护动作本身不会制造事故。