首页/系统与基础设施/存储速查/CRUSH Map 结构与故障域层级
分布式与对象存储70 条

CRUSH Map 结构与故障域层级

CRUSH Map 由 tunables、设备列表、层级类型、bucket 树与规则五部分组成,规则里 chooseleaf 指定的类型就是副本不会重复的边界。本文说明 Map 结构、故障域层级的宽度约束与安全变更方式。

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌‌​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​​​‌​‌‌​​‌‌‌​‌‌​​‌​‌​​‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌​​‌‌‌​‌​‌​‌‌‌​​‌‌​‌‌​‌​​​​​‌​‌‌​‌​‌‌​‌‌​‌​‌‌​​​​‌​‌‌‌​​​​​​‌​‌‌​‌​‌‌​​‌‌​​‌‌​​​​‌​‌‌​‌​​‌​‌‌​‌‌​​​‌‌‌​‌​‌​‌‌‌​​‌​​‌‌​​‌​‌​​‌​‌‌​‌​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​‌‌​‌​‌‌​​​​‌​‌‌​‌​​‌​‌‌​‌‌‌​​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​

Map 由五部分组成

CRUSH Map 是一份声明式配置:tunables 定义哈希行为,devices 列出所有 OSD,types 定义层级类型(如机房、机架、主机、OSD),buckets 把设备组织成树,rules 规定每个池从根到叶的选择路径。客户端与 OSD 各持一份,因此它们的取值必须一致。

基本信息

组成部分tunables、devices、types、buckets、rules
故障域由规则中 chooseleaf 的类型决定,副本不在同一域内重复
常用层级root 到机架到主机到 OSD,可按机房与房间继续细分
设备类别device class 标记 hdd、ssd、nvme,规则可限定在本类介质内选点
变更入口优先使用 ceph osd crush 系列命令,避免手工改文本
风险操作应用新的 Map 会立即改变全集群的数据分布

典型使用场景

  • 多机架部署:把主机归入机架,规则故障域提升到机架级
  • 介质分离:SSD 承载元数据池、HDD 承载数据池,各用独立规则
  • 故障域评估:确认某一层级的设备数量是否够容纳副本数
  • 排查副本集中:同一 PG 的多个副本落在同一主机,多为故障域设得过低
  • 变更前备份:导出当前 Map 以便快速回退

层级查看与调整

层级查看与调整
ceph osd crush tree                    # 查看 bucket 层级与设备归属
ceph osd crush dump                    # 输出完整 Map
ceph osd crush add-bucket rack01 rack  # 新建机架 bucket
ceph osd crush move host01 rack=rack01 # 把主机挂到机架下
ceph osd getcrushmap -o /tmp/map.bin   # 变更前先导出备份
ceph osd crush rule dump               # 确认规则中的故障域类型

故障域层级取舍

层级适用规模要点
主机级单机架或小规模集群默认设置,副本跨主机即可满足冗余
机架级多机架机房避免整机架断电影响同一 PG 的多个副本
机房或房间级跨机房或跨楼层部署设备数量必须足够,否则选点会回退
设备类别维度介质混装与故障域正交,可叠加使用
OSD 级仅测试环境副本可能落在同一主机,没有真实冗余
某一层级的设备数量少于池的副本数时,CRUSH 选点会回退到更细的层级,出现副本落在同一上层域的情况。设计层级前先数清每层的宽度,层级要与真实冗余边界一致。
调整故障域会触发大范围数据迁移:原本落在同一主机的副本需要迁往其他主机,迁移量可能接近该池的数据总量。变更前评估时间窗口并安排在业务低峰。

先数设备再定层级

层级不是越细越好。只有单机架时把故障域设成机架级,副本选择反而受限并回退;跨机房部署却只设主机级,机房级故障会同时打掉多个副本。设计依据是真实拓扑与每层宽度,而不是照搬他人配置。

易错点

  • 规则故障域低于实际拓扑:机架断电即多个副本同时失效,冗余形同虚设
  • 层级宽度不足仍强设高层级故障域:CRUSH 选点回退,副本可能仍落在同一主机
  • 手工编辑文本 Map 后直接应用:语法错误会导致应用失败,处理不当会中断数据分布
  • 忘记备份当前 Map:需要回退时没有基准可依
  • 调整故障域不留迁移窗口:大规模回填挤占带宽,前端响应明显变差

数据来源与参考

  • Ceph 官方文档《CRUSH Map 与故障域层级》章节
  • Ceph 官方文档《Bucket 类型与 chooseleaf 规则》
  • 论文《CRUSH: Controlled, Scalable, Decentralized Placement of Replicated Data》(SC 2006)

整理校对:其其网ICT文档中心 · 本页地址:docs.qiqicto.com/storage/crush-map-failure-domain.html

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌‌​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​​​‌​‌‌​​‌‌‌​‌‌​​‌​‌​​‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌​​‌‌‌​‌​‌​‌‌‌​​‌‌​‌‌​‌​​​​​‌​‌‌​‌​‌‌​‌‌​‌​‌‌​​​​‌​‌‌‌​​​​​​‌​‌‌​‌​‌‌​​‌‌​​‌‌​​​​‌​‌‌​‌​​‌​‌‌​‌‌​​​‌‌‌​‌​‌​‌‌‌​​‌​​‌‌​​‌​‌​​‌​‌‌​‌​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​‌‌​‌​‌‌​​​​‌​‌‌​‌​​‌​‌‌​‌‌‌​​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​