为什么要限流
设备增删、权重调整、分布规则变更之后,集群必须把数据搬到新的位置。搬运由后台任务完成,读写的是同一批磁盘与同一张网卡,因此会与前端请求争抢资源,表现为访问变慢、吞吐下降。限流的作用是给这批后台任务设定速度上限,让搬运过程对业务的影响处在可控范围之内。
基本信息
| 适用平台 | 分布式存储集群的设备层参数 |
|---|---|
| 作用对象 | 回填与恢复两类后台任务 |
| 并发类参数 | 每设备并发回填数与并发恢复请求数 |
| 节流类参数 | 任务之间的休眠间隔,可按介质类型分别设置 |
| 优先级参数 | 后台任务与客户端请求的相对权重 |
| 调整方式 | 运行期修改变量,部分版本提供整体调度配置 |
典型使用场景
- 业务高峰期扩容:临时压低并发,把资源留给前端请求
- 夜间窗口搬运数据:适度放开并发,尽快完成迁移
- 设备故障后:优先重建以恢复冗余,接受短时的性能波动
- 混合介质集群:按磁盘类型分别设置节流参数
- 排查持续抖动:先确认是否由后台任务引起,再决定限流方向
查看与调整
查看与调整
ceph config get osd osd_max_backfills # 每设备并发回填上限
ceph config get osd osd_recovery_max_active # 每设备并发恢复请求上限
ceph config set osd osd_recovery_sleep_hdd 0.2 # 按介质设置任务间休眠
ceph config set osd osd_recovery_op_priority 3 # 调整后台任务优先级
ceph config dump | grep -i recovery # 汇总当前生效的相关参数
ceph osd pool stats # 对比各池恢复量与前端流量参数类别与效果
| 类别 | 控制什么 | 调整方向 |
|---|---|---|
| 并发数量 | 同时进行的重建任务数 | 降低可减轻前端压力 |
| 任务休眠 | 两次任务之间的等待间隔 | 加大可显著降速 |
| 操作优先级 | 后台任务与客户端请求的相对权重 | 降低可让客户端优先 |
| 介质区分 | 按磁盘类型分别设定节流值 | 匹配不同介质的性能差异 |
| 整体调度 | 较新版本提供的资源分配方式 | 与并发参数并存,调整前需核对 |
限流只改变搬运速度,不改变最终的数据分布:并发压得很低时重平衡依然会完成,只是耗时更长、冗余暴露的时间更久。参数的具体名称、取值范围与默认值随版本变化,以官方文档为准。
两端极端取值都有代价:并发过大可能让前端请求超时,并发与节流设得过小则会让集群长时间停在降级状态,此期间再损失一块设备就可能丢数据。取值要结合当前冗余水位来定。
选快还是选慢
判断依据是冗余水位而不是主观偏好。冗余充足、业务对延迟敏感时,偏向慢速重平衡;冗余已接近临界时,应优先补回副本,即使前端出现短时抖动也可以接受。也可以在时间维度上切换:白天限流、夜间放开,兼顾业务体验与恢复进度。