2.7. CRUSH 规则


CRUSH 规则定义 Ceph 客户端如何选择 bucket 和 Primary OSD 来存储对象,以及 Primary OSD 如何选择 bucket 和次要 OSD 来存储副本或编码区块。例如,您可以创建一个规则,为两个对象副本选择由 SSD 支持的一对目标 OSD,以及另一规则为三个副本选择由 SAS 驱动器支持的三个目标 OSD。

规则采用以下格式:

rule <rulename> {

    id <unique number>
    type [replicated | erasure]
    min_size <min-size>
    max_size <max-size>
    step take <bucket-type> [class <class-name>]
    step [choose|chooseleaf] [firstn|indep] <N> <bucket-type>
    step emit
}
Copy to Clipboard Toggle word wrap
id
描述
用于标识规则的唯一整数。
用途
规则掩码的一个组件。
类型
整数
必填
默认
0
type
描述
描述存储驱动器复制或退出代码的规则。
用途
规则掩码的一个组件。
类型
字符串
必需
默认
复制
有效值
目前仅能为 replicated
min_size
描述
如果池制作的副本数少于这个数字,CRUSH 不会选择此规则。
类型
整数
用途
规则掩码的一个组件。
必填
默认
1
max_size
描述
如果池制作的副本数超过这个数字,CRUSH 不会选择此规则。
类型
整数
用途
规则掩码的一个组件。
必填
默认
10
step take <bucket-name> [class <class-name>]
描述
取存储桶名称,并开始迭代树。
用途
规则的一个组件。
必填
示例
step take datastep take data class ssd
step choose firstn <num> type <bucket-type>
描述

选择给定类型的存储桶数量。数字通常是池中副本数量(即池大小)。

  • 如果 <num> == 0,选择 pool-num-replicas bucket(所有可用的)。
  • 如果 < num> > 0 && < pool-num-replicas,请选择多个存储桶。
  • 如果 <num> < 0,这表示 pool-num-replicas - {num}
用途
规则的一个组件。
前提条件
根据 step takestep choose
示例
步骤选择第一n 1 类型行
step chooseleaf firstn <num> type <bucket-type>
描述

选择 {bucket-type} 的存储桶集合,并从 bucket 集合中每个存储桶的子树中选择一个叶节点。集合中的 bucket 数量通常是池中副本数量(即池大小)。

  • 如果 <num> == 0,选择 pool-num-replicas bucket(所有可用的)。
  • 如果 < num> > 0 && < pool-num-replicas,请选择多个存储桶。
  • 如果 & lt;num> < 0,这表示 pool-num-replicas - <num>
用途
规则的一个组件。使用方法不再需要选择使用两个步骤的设备。
前提条件
遵循 step takestep choose
示例
step chooseleaf firstn 0 type row
step emit
描述
输出当前值并清除堆栈。通常在规则末尾使用,但也可能用于从同一规则中的不同树提取。
用途
规则的一个组件。
前提条件
跟随 step choose
示例
step emit
firstn 与dep
描述
控制 CRUSH 在 CRUSH map 中标记为 down 时使用的替换策略。如果此规则与复制池一起使用,则 应首先 将它用于纠删代码池,如果用于纠删代码池,则 应处于dep 状态
示例
您有 PG 存储在 OSD 1、2、3、4、5 上,其中 3 个出现故障。在第一种场景中,使用 firstn 模式,CRUSH 会将其计算调整为选择 1 和 2,然后选择 3,但发现它已关闭,因此它重试并选择 4 和 5,然后进入 以选择新的 OSD 6。最后的 CRUSH 映射更改为从 1, 2, 3, 4, 51, 2, 4, 5, 6。在第二个情景中,在一个纠删代码池中使用 indep 模式,CRUSH 会尝试选择失败的 OSD 3,再次尝试并选择 6 用于从 1, 2, 3, 4, 51, 2, 6, 4, 5 的最终转换。
重要

给定的 CRUSH 规则可以分配给多个池,但单个池无法拥有多个 CRUSH 规则。

2.7.1. 列出 CRUSH 规则

要从命令行列出 CRUSH 规则,请执行以下操作:

语法

ceph osd crush rule list
ceph osd crush rule ls
Copy to Clipboard Toggle word wrap

2.7.2. 转储 CRUSH 规则

要转储特定 CRUSH 规则的内容,请执行以下操作:

语法

ceph osd crush rule dump NAME
Copy to Clipboard Toggle word wrap

2.7.3. 添加 CRUSH 规则

要添加 CRUSH 规则,您必须指定规则名称、要使用的层次结构的根节点、您要复制到的存储桶类型(例如:"rack'、'row' 等等),以及选择存储桶的模式。

语法

ceph osd crush rule create-simple RUENAME ROOT BUCKET_NAME FIRSTN_OR_INDEP
Copy to Clipboard Toggle word wrap

Ceph 创建一个具有 chooseleaf 的规则,以及您指定的类型的一个存储桶。

示例

[ceph: root@host01 /]# ceph osd crush rule create-simple deleteme default host firstn
Copy to Clipboard Toggle word wrap

创建以下规则:

{ "id": 1,
  "rule_name": "deleteme",
  "type": 1,
  "min_size": 1,
  "max_size": 10,
  "steps": [
        { "op": "take",
          "item": -1,
          "item_name": "default"},
        { "op": "chooseleaf_firstn",
          "num": 0,
          "type": "host"},
        { "op": "emit"}]}
Copy to Clipboard Toggle word wrap

2.7.4. 为复制池创建 CRUSH 规则

要为复制池创建 CRUSH 规则,请执行以下操作:

语法

ceph osd crush rule create-replicated NAME ROOT FAILURE_DOMAIN CLASS
Copy to Clipboard Toggle word wrap

其中:

  • <name > : 规则的名称。
  • <root > :CRUSH 层次结构的根。
  • <failure-domain>: 故障域。例如: hostrack
  • <class > : 存储设备类。例如: hddssd

示例

[ceph: root@host01 /]# ceph osd crush rule create-replicated fast default host ssd
Copy to Clipboard Toggle word wrap

2.7.5. 为纠删代码池创建 CRUSH 规则

要添加与纠删代码池一起使用的 CRUSH 规则,您可以指定规则名称和纠删代码 profile。

语法

ceph osd crush rule create-erasure RULE_NAME PROFILE_NAME
Copy to Clipboard Toggle word wrap

示例

[ceph: root@host01 /]# ceph osd crush rule create-erasure default default
Copy to Clipboard Toggle word wrap

2.7.6. 删除 CRUSH 规则

要删除规则,请执行以下内容并指定 CRUSH 规则名称:

语法

ceph osd crush rule rm NAME
Copy to Clipboard Toggle word wrap

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat