注意

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

osdmaptool -- ceph osd cluster map manipulation tool

概要

osdmaptool mapfilename [--print] [--createsimple numosd [--pgbits bitsperosd ] ] [--clobber]
osdmaptool mapfilename [--import-crush crushmap]
osdmaptool mapfilename [--export-crush crushmap]
osdmaptool mapfilename [--upmap file] [--upmap-max max-optimizations] [--upmap-deviation max-deviation] [--upmap-pool poolname] [--save] [--upmap-active]
osdmaptool mapfilename [--upmap-cleanup] [--upmap file]

描述

osdmaptool 是一个工具,允许您从 Ceph 分布式存储系统创建、查看和操作 OSD 集群映射。值得注意的是,它允许您提取嵌入式 CRUSH 映射或导入新的 CRUSH 映射。它还可以模拟 upmap 均衡器模式,以便您可以了解平衡 PG 所需的操作。

选项

--print

将使该工具在进行任何修改后简单地打印映射的纯文本转储。

--dump <format>

当 <format> 为 'plain' 时,以纯文本格式显示映射;如果指定格式不支持,则显示 'json'。这是 print 选项的替代方案。

--clobber

如果进行了更改,将允许 osdmaptool 覆盖 mapfilename。

--import-crush mapfile

将从 mapfile 加载 CRUSH 映射并将其嵌入到 OSD 映射中。

--export-crush mapfile

将从 OSD 映射中提取 CRUSH 映射并将其写入 mapfile。

--createsimple numosd [--pg-bits bitsperosd] [--pgp-bits bits]

将创建一个具有 numosd 设备的相对通用的 OSD 映射。如果指定了 --pg-bits,则初始放置组计数将设置为 bitsperosd 位每 OSD。也就是说,pg_num 映射属性将设置为 numosd 左移 bitsperosd 位。如果指定了 --pgp-bits,则 pgp_num 映射属性将设置为 numosd 左移 bits 位。

--create-from-conf

使用默认配置创建 OSD 映射。

--test-map-pgs [--pool poolid] [--range-first <first> --range-last <last>]

将打印放置组到 OSD 的映射。如果指定了范围,则它将迭代 osdmaptool 参数指定的目录中的 first 到 last。例如:osdmaptool --test-map-pgs --range-first 0 --range-last 2 osdmap_dir。这将迭代 osdmap_dir 中名为 0,1,2 的文件。

--test-map-pgs-dump [--pool poolid] [--range-first <first> --range-last <last>]

将打印所有放置组的摘要以及它们到映射 OSD 的映射。如果指定了范围,则它将迭代 osdmaptool 参数指定的目录中的 first 到 last。例如:osdmaptool --test-map-pgs-dump --range-first 0 --range-last 2 osdmap_dir。这将迭代 osdmap_dir 中名为 0,1,2 的文件。

--test-map-pgs-dump-all [--pool poolid] [--range-first <first> --range-last <last>]

将打印所有放置组的摘要以及它们到所有 OSD 的映射。如果指定了范围,则它将迭代 osdmaptool 参数指定的目录中的 first 到 last。例如:osdmaptool --test-map-pgs-dump-all --range-first 0 --range-last 2 osdmap_dir。这将迭代 osdmap_dir 中名为 0,1,2 的文件。

--test-random

执行放置组到 OSD 的随机映射。

--test-map-pg <pgid>

将特定的放置组(由 pgid 指定)映射到 OSD。

--test-map-object <objectname> [--pool <poolid>]

将特定的放置组(由 objectname 指定)映射到 OSD。

--test-crush [--range-first <first> --range-last <last>]

将放置组映射到活动 OSD。如果指定了范围,则它将迭代 osdmaptool 参数指定的目录中的 first 到 last。例如:osdmaptool --test-crush --range-first 0 --range-last 2 osdmap_dir。这将迭代 osdmap_dir 中名为 0,1,2 的文件。

--mark-up-in

将 osd 标记为 up 和 in(但不持久化)。

--mark-out

将 osd 标记为 out(但不持久化)

--mark-up <osdid>

将 osd 标记为 up(但不持久化)

--mark-in <osdid>

将 osd 标记为 in(但不持久化)

--tree

显示映射的分层树。

--clear-temp

清除 pg_temp 和 primary_temp 变量。

--clean-temps

清理 pg_temps。

--health

转储健康检查

--with-default-pool

创建映射时包含默认池

--upmap-cleanup <file>

清理 pg_upmap[_items] 条目,将命令写入 <file> [默认值:- 表示标准输出]

--upmap <file>

计算 pg upmap 条目以平衡 pg 布局,将命令写入 <file> [默认值:- 表示标准输出]

--upmap-max <max-optimizations>

设置要计算的最大 upmap 条目数 [默认值:10]

--upmap-deviation <max-deviation>

与目标的Deviation最大值 [默认值:5]

--upmap-pool <poolname>

将 upmap 平衡限制为 1 个池,或可以重复该选项以用于多个池

--upmap-active

表现得像一个活跃的均衡器,不断应用更改直到平衡

--adjust-crush-weight <osdid:weight>[,<osdid:weight>,<...>]

更改 <osdid> 的 CRUSH 权重

--save

写入修改后的 osdmap,包含 upmap 或 crush-adjust 更改

--read <file>

计算 pg upmap 条目以平衡 pg 主副本

--read-pool <poolname>

指定读取均衡器应调整哪个池

--vstart

将 upmap 和 read 输出加上 ‘./bin/’ 前缀

示例

创建一个具有 16 个设备的简单映射

osdmaptool --createsimple 16 osdmap --clobber

查看结果

osdmaptool --print osdmap

查看池 1 的放置组映射

osdmaptool osdmap --test-map-pgs-dump --pool 1

pool 1 pg_num 8
1.0     [0,2,1] 0
1.1     [2,0,1] 2
1.2     [0,1,2] 0
1.3     [2,0,1] 2
1.4     [0,2,1] 0
1.5     [0,2,1] 0
1.6     [0,1,2] 0
1.7     [1,0,2] 1
#osd    count   first   primary c wt    wt
osd.0   8       5       5       1       1
osd.1   8       1       1       1       1
osd.2   8       2       2       1       1
 in 3
 avg 8 stddev 0 (0x) (expected 2.3094 0.288675x))
 min osd.0 8
 max osd.0 8
size 0  0
size 1  0
size 2  0
size 3  8
其中,
  1. 池 1 有 8 个放置组。随后是两个表格

  2. 一个放置组表格。每行代表一个放置组。包含以下列:

    • 放置组 ID,

    • 活动集,以及

    • 主 OSD。

  3. 一个所有 OSD 的表格。每行代表一个 OSD。包含以下列:

    • 映射到此 OSD 的放置组计数,

    • 此 OSD 在其活动集中排在第一位的放置组计数,

    • 此 OSD 作为其主副本的放置组计数,

    • 此 OSD 的 CRUSH 权重,以及

    • 此 OSD 的权重。

  4. 查看 3 个 OSD 持有的放置组数量。我们有

    • 平均值、标准差、标准差/平均值、预期标准差、预期标准差/平均值

    • 最小值和最大值

  5. 映射到 n 个 OSD 的放置组数量。在这种情况下,所有 8 个放置组都映射到 3 个不同的 OSD。

在一个不太平衡的集群中,我们可能会得到以下放置组分布统计数据输出,其标准差为 1.41421

#osd    count   first   primary c wt    wt
osd.0   8       5       5       1       1
osd.1   8       1       1       1       1
osd.2   8       2       2       1       1

#osd    count   first    primary c wt    wt
osd.0   33      9        9       0.0145874     1
osd.1   34      14       14      0.0145874     1
osd.2   31      7        7       0.0145874     1
osd.3   31      13       13      0.0145874     1
osd.4   30      14       14      0.0145874     1
osd.5   33      7        7       0.0145874     1
 in 6
 avg 32 stddev 1.41421 (0.0441942x) (expected 5.16398 0.161374x))
 min osd.4 30
 max osd.1 34
size 00
size 10
size 20
size 364

模拟 upmap 模式下的活跃均衡器

     osdmaptool --upmap upmaps.out --upmap-active --upmap-deviation 6 --upmap-max 11 osdmap

osdmaptool: osdmap file 'osdmap'
writing upmap command output to: upmaps.out
checking for upmap cleanups
upmap, max-count 11, max deviation 6
pools movies photos metadata data
prepared 11/11 changes
Time elapsed 0.00310404 secs
pools movies photos metadata data
prepared 11/11 changes
Time elapsed 0.00283402 secs
pools data metadata movies photos
prepared 11/11 changes
Time elapsed 0.003122 secs
pools photos metadata data movies
prepared 11/11 changes
Time elapsed 0.00324372 secs
pools movies metadata data photos
prepared 1/11 changes
Time elapsed 0.00222609 secs
pools data movies photos metadata
prepared 0/11 changes
Time elapsed 0.00209916 secs
Unable to find further optimization, or distribution is already perfect
osd.0 pgs 41
osd.1 pgs 42
osd.2 pgs 42
osd.3 pgs 41
osd.4 pgs 46
osd.5 pgs 39
osd.6 pgs 39
osd.7 pgs 43
osd.8 pgs 41
osd.9 pgs 46
osd.10 pgs 46
osd.11 pgs 46
osd.12 pgs 46
osd.13 pgs 41
osd.14 pgs 40
osd.15 pgs 40
osd.16 pgs 39
osd.17 pgs 46
osd.18 pgs 46
osd.19 pgs 39
osd.20 pgs 42
Total time elapsed 0.0167765 secs, 5 rounds

模拟 read 模式下的活跃均衡器,首先通过以 upmap 模式运行均衡器来确保容量平衡。然后,使用以下命令平衡复制池上的读取:

     osdmaptool osdmap --read read.out --read-pool <pool name>

./bin/osdmaptool: osdmap file 'om'
writing upmap command output to: read.out

---------- BEFORE ------------
osd.0 | primary affinity: 1 | number of prims: 3
osd.1 | primary affinity: 1 | number of prims: 10
osd.2 | primary affinity: 1 | number of prims: 3

read_balance_score of 'cephfs.a.meta': 1.88


---------- AFTER ------------
osd.0 | primary affinity: 1 | number of prims: 5
osd.1 | primary affinity: 1 | number of prims: 5
osd.2 | primary affinity: 1 | number of prims: 6

read_balance_score of 'cephfs.a.meta': 1.13


num changes: 5

可用性

osdmaptool 是 Ceph 的一部分,Ceph 是一个可大规模扩展的开源分布式存储系统。请参阅 Ceph 文档(网址为 https://docs.ceph.net.cn)了解更多信息。

另请参阅

ceph(8), crushtool(8),

由 Ceph 基金会为您呈现

Ceph 文档是由非营利性 Ceph 基金会 资助和托管的社区资源。如果您希望支持这项工作和我们的其他努力,请考虑 立即加入