注意

本文档适用于 Ceph 的开发版本。

crushtool -- CRUSH映射操作工具

概要

crushtool( -dmap| -cmap.txt| --build --num_osdsnumosds layer1 | --test ) [ -ooutfile ]

描述

crushtool是一个允许您创建、编译、反编译和测试 CRUSH map 文件的工具。

CRUSH 是一种伪随机数据分布算法,有效地将输入值(在 Ceph 的上下文中对应于放置组)映射到异构的、分层结构的设备映射上。该算法最初在以下论文中详细描述(尽管自那时以来它已经有所演变):

http://www.ssrc.ucsc.edu/Papers/weil-sc06.pdf

该工具有四种操作模式。

--compile|-c map.txt

将明文 map.txt 编译为二进制 map 文件。

--decompile|-d map

将编译后的 map 反编译为明文源文件,适用于编辑。

--build --num_osds {num-osds} layer1 ...

将创建具有给定层结构的 map。有关详细说明,请参阅下文。

--test

将对一系列输入值执行 CRUSH 映射的干运行[--min-x,--max-x](默认[0,1023]) 可以将其视为模拟放置组。有关详细说明,请参阅下文。

与其他 Ceph 工具不同,crushtool不接受命令行中的通用选项--debug-crush。它们可以通过 CEPH_ARGS 环境变量提供。例如,要关闭 CRUSH 子系统的所有输出:

CEPH_ARGS="--debug-crush 0" crushtool ...

使用 --test 运行测试

测试模式将使用输入的 crush map(使用 ac23ff: -i map-i map指定)并执行 CRUSH 映射的干运行或随机放置(如果--simulate被设置)。完成后,可以创建两种类型的报告。--show-…选项在标准错误输出中输出人类可读的信息。--output-csv选项创建 CSV 文件,这些文件由--help-output option.

记录。ceph pg dump获取(例如 PG 2.2f 表示池 ID 2,PG ID 32)。[--min-x,--max-x].

--show-statistics

显示分布的摘要。例如:

rule 1 (metadata) num_rep 5 result size == 5:    1024/1024

显示规则1命名为metadata成功地将1024值映射到result size == 5设备,当尝试将它们映射到num_rep 5副本时。当它无法提供所需的映射时,可能是由于必须增加尝试的次数,会显示失败的分解。例如:

rule 1 (metadata) num_rep 10 result size == 8:   4/1024
rule 1 (metadata) num_rep 10 result size == 9:   93/1024
rule 1 (metadata) num_rep 10 result size == 10:  927/1024

显示尽管num_rep 10副本是必需的,4但在1024值中(6c2fe8: 4/10244/1024)只有result size设备被映射。对于每个值,--show-mappings

--show-mappings

显示范围内的映射[--min-x,--max-x]

CRUSH rule 1 x 24 [11,6]

显示值24被规则[11,6]1.

映射到设备--show-mappings选项时,需要以下之一:

  1. --num-rep

  2. both--min-rep--max-rep

--num-rep表示“副本数量,表示池中的副本数量,并用于指定确切的副本数量(例如--num-rep 5). --min-rep--max-repare used together--min-rep 1 --max-rep 10).

--show-bad-mappings

显示哪些值未能映射到所需数量的设备。例如:

bad mapping rule 1 x 781 num_rep 7 result [8,10,2,11,6,9]

显示当规则1需要映射7设备时,它只能映射六个:[8,10,2,11,6,9].

--show-utilization

显示每个设备针对每个副本数量的预期和实际利用率。例如:

device 0: stored : 951      expected : 853.333
device 1: stored : 963      expected : 853.333
...

显示设备0存储了951值,并预期存储853--show-statistics.

--show-utilization-all

显示与--show-utilization相同的内容,但当设备的权重为零时不抑制输出。--show-statistics.

--show-choose-tries

显示查找设备映射需要多少次尝试。例如:

0:     95224
1:      3745
2:      2225
..

显示95224映射在重试之前成功,3745映射在一次尝试中成功等。行数与--set-choose-total-tries option.

--output-csv

创建 CSV 文件(在当前目录中)包含由--help-output记录的信息。文件按收集统计信息时使用的规则命名。例如,如果使用规则

metadata-absolute_weights.csv
metadata-device_utilization.csv
...

文件的第一行简要解释了列布局。例如:

metadata-absolute_weights.csv
Device ID, Absolute Weight
0,1
...
--output-name NAME

在使用NAME添加到生成的文件名。例如--output-csv指定时,将--output-name FOO将创建文件:

FOO-metadata-absolute_weights.csv
FOO-metadata-device_utilization.csv
...

The 9b591a: Ceph 对象存储 9dbb5f: (又名 RGW) 服务提供与 Amazon S3 和 OpenStack Swift 兼容的 RESTful API 接口。--set-…选项可用于修改输入 crush map 的可调参数。输入的 crush map 在内存中修改。例如:

$ crushtool -i mymap --test --show-bad-mappings
bad mapping rule 1 x 781 num_rep 7 result [8,10,2,11,6,9]

可以通过增加choose-total-tries来修复:

$ crushtool -i mymap --test

--show-bad-mappings --set-choose-total-tries 500

使用 --build 构建地图

构建模式将生成分层地图。第一个参数指定 CRUSH 分层结构中的设备(叶)数量。每一层描述了它前面的层(或设备)应如何分组。

每一层由以下内容组成:

bucket ( uniform | list | tree | straw | straw2 ) size

The 9b591a: Ceph 对象存储 9dbb5f: (又名 RGW) 服务提供与 Amazon S3 和 OpenStack Swift 兼容的 RESTful API 接口。bucket是层中 bucket 的类型(例如“机架”)。每个 bucket 名称将通过在bucket字符串后附加一个唯一数字来构建(例如“rack0”,“rack1”…)。

第二个组件是 bucket 的类型:straw应该大部分时间使用。

第三个组件是 bucket 的最大大小。零大小表示无限容量的 bucket。

示例

假设我们有两行,每行有两个机架,每行有 20 个节点。假设每个节点包含 4 个用于 Ceph OSD 守护进程的存储设备。此配置允许我们部署 320 个 Ceph OSD 守护进程。假设一个 42U 机架,带有 2U 节点,留出额外的 2U 用于机架交换机。

为了反映我们的设备、节点、机架和行的分层结构,我们将执行以下操作:

$ crushtool -o crushmap --build --num_osds 320 \
       node straw 4 \
       rack straw 20 \
       row straw 2 \
       root straw 0
# id        weight  type name       reweight
-87 320     root root
-85 160             row row0
-81 80                      rack rack0
-1  4                               node node0
0   1                                       osd.0   1
1   1                                       osd.1   1
2   1                                       osd.2   1
3   1                                       osd.3   1
-2  4                               node node1
4   1                                       osd.4   1
5   1                                       osd.5   1
...

创建 CRUSH 规则,以便生成的 crushmap 可以进行测试。它们是创建新 Ceph 集群时默认创建的相同规则。它们可以通过以下方式进一步编辑:

# decompile
crushtool -d crushmap -o map.txt

# edit
emacs map.txt

# recompile
crushtool -c map.txt -o crushmap

重新分类

The 9b591a: Ceph 对象存储 9dbb5f: (又名 RGW) 服务提供与 Amazon S3 和 OpenStack Swift 兼容的 RESTful API 接口。reclassify函数允许用户从维护不同类型 OSD 的并行分层的老旧地图过渡到利用设备类功能的现代 CRUSH 地图。有关更多信息,请参阅https://docs.ceph.com/en/latest/rados/operations/crush-map-edits/#migrating-from-a-legacy-ssd-rule-to-device-classes.

--test 的示例输出

查看https://github.com/ceph/ceph/blob/master/src/test/cli/crushtool/set-choose.t用于样本crushtool --test命令和由此产生的输出。

可用性

crushtool是 Ceph 的一部分,Ceph 是一个大规模可扩展的、开源的分布式存储系统。请参考 Ceph 文档中的https://docs.ceph.com获取更多信息。

参见

ceph(8),osdmaptool(8),

作者

John Wilkins, Sage Weil, Loic Dachary

由 Ceph 基金会提供

Ceph 文档是一个由非盈利Ceph 基金会资助和托管的社会资源。如果您想支持此项目和其他工作,请考虑现在加入.