ceph高可用分布式存储集群10-osdmaptool详解与实战– ceph osd 运行图操作工具

提纲
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'。这是打印选项的替代方法。
--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,则初始归置组计数将设置为每个 OSD 的 bitsperosd 位。也就是说,pg_num 映射属性将设置为 numosd,由 bitsperosd 移位。如果指定了 –pgp-bits,则 pgp_num 映射属性将设置为 numosd 位移位。
--create-from-conf
使用默认配置创建一个 osd 映射。
--test-map-pgs [--pool poolid] [--range-first <first> --range-last <last>]
将打印出从归置组到 OSD 的映射。如果指定了范围,则它会在 osdmaptool 的参数指定的目录中从第一个到最后一个迭代。例如: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 的参数指定的目录中从第一个到最后一个迭代。例如: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 的参数指定的目录中从第一个到最后一个迭代。例如: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 的参数指定的目录中从第一个到最后一个迭代。例如:osdmaptool –test-crush –range-first 0 –range-last 2 osdmap_dir。这将遍历 osdmap_dir 中名为 0,1,2 的文件。
--mark-up-in
标记 osds up and 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> [默认:- 用于 stdout]
--upmap-max <max-optimizations>
设置最大 upmap 条目来计算 [默认:10]
--upmap-deviation <max-deviation>
与目标的最大偏差 [默认值:5]
--upmap-pool <poolname>
将 upmap 平衡限制为 1 个池,或者可以为多个池重复该选项
--upmap-active
像一个主动的平衡器一样,不断应用变化直到平衡
--adjust-crush-weight <osdid:weight>[,<osdid:weight>,<...>]
更改 <osdid> 的 CRUSH 权重
--save
使用 upmap 或 crash-adjust 更改编写修改后的 osdmap
 
实例
要创建个有 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
 
生产环境实际操作命令:
ceph osd getmap -o osdmap.bin
osdmaptool osdmap.bin --upmap afterosdmap.txt --upmap-active --upmap-pool default.rgw.buckets.data  --upmap-max 10 --upmap-deviation 3
osdmaptool: osdmap file 'osdmap.bin'
writing upmap command output to: afterosdmap.txt
checking for upmap cleanups
upmap, max-count 10, max deviation 3
limiting to pools default.rgw.buckets.data ([6])
pools default.rgw.buckets.data
prepared 10/10 changes
Time elapsed 0.076436 secs
pools default.rgw.buckets.data
prepared 10/10 changes
Time elapsed 0.0749774 secs
pools default.rgw.buckets.data
prepared 10/10 changes
Time elapsed 0.0752506 secs
pools default.rgw.buckets.data
prepared 10/10 changes
Time elapsed 0.0748528 secs
pools default.rgw.buckets.data
prepared 10/10 changes
Time elapsed 0.0755334 secs
pools default.rgw.buckets.data
prepared 10/10 changes
Time elapsed 0.0925288 secs
pools default.rgw.buckets.data
prepared 10/10 changes
Time elapsed 0.0924468 secs
pools default.rgw.buckets.data
prepared 10/10 changes
Time elapsed 0.0745339 secs
pools default.rgw.buckets.data
prepared 10/10 changes
Time elapsed 0.0750492 secs
pools default.rgw.buckets.data
prepared 10/10 changes
Time elapsed 0.0871084 secs
pools default.rgw.buckets.data
prepared 10/10 changes
Time elapsed 0.108964 secs
pools default.rgw.buckets.data
prepared 10/10 changes
Time elapsed 0.0765064 secs
pools default.rgw.buckets.data
prepared 10/10 changes
Time elapsed 0.0753739 secs
pools default.rgw.buckets.data
prepared 10/10 changes
Time elapsed 0.0758705 secs
pools default.rgw.buckets.data
prepared 10/10 changes
Time elapsed 0.0748681 secs
pools default.rgw.buckets.data
prepared 10/10 changes
Time elapsed 0.0774396 secs
pools default.rgw.buckets.data
prepared 10/10 changes
Time elapsed 0.0788097 secs
pools default.rgw.buckets.data
prepared 10/10 changes
Time elapsed 0.0996727 secs
pools default.rgw.buckets.data
prepared 10/10 changes
Time elapsed 0.265296 secs
pools default.rgw.buckets.data
prepared 10/10 changes
Time elapsed 1.06738 secs
pools default.rgw.buckets.data
prepared 10/10 changes
Time elapsed 2.29387 secs
pools default.rgw.buckets.data
prepared 10/10 changes
Time elapsed 2.20727 secs
pools default.rgw.buckets.data
prepared 10/10 changes
Time elapsed 3.18508 secs
pools default.rgw.buckets.data
prepared 10/10 changes
Time elapsed 5.79051 secs
pools default.rgw.buckets.data
prepared 10/10 changes
Time elapsed 13.4537 secs
pools default.rgw.buckets.data
prepared 9/10 changes
Time elapsed 215.485 secs
pools default.rgw.buckets.data
prepared 9/10 changes
Time elapsed 40.737 secs
pools default.rgw.buckets.data
prepared 8/10 changes
Time elapsed 158.041 secs
pools default.rgw.buckets.data
prepared 4/10 changes
Time elapsed 281.47 secs
pools default.rgw.buckets.data
prepared 0/10 changes
Time elapsed 214.633 secs
Unable to find further optimization, or distribution is already perfect
osd.1 pgs 44
osd.2 pgs 44
osd.3 pgs 81
osd.5 pgs 65
osd.6 pgs 58
osd.7 pgs 56
osd.9 pgs 25
osd.10 pgs 52
osd.11 pgs 67
osd.13 pgs 64
osd.14 pgs 58
osd.15 pgs 44
osd.17 pgs 49
osd.18 pgs 17
osd.19 pgs 81
osd.21 pgs 63
osd.22 pgs 55
osd.23 pgs 51
osd.25 pgs 39
osd.26 pgs 59
osd.27 pgs 80
osd.28 pgs 81
osd.29 pgs 43
osd.30 pgs 64
osd.31 pgs 64
osd.32 pgs 64
osd.33 pgs 43
osd.34 pgs 86
osd.35 pgs 57
osd.36 pgs 65
osd.37 pgs 65
osd.38 pgs 59
osd.39 pgs 81
osd.40 pgs 81
osd.41 pgs 64
osd.42 pgs 52
osd.43 pgs 81
osd.44 pgs 64
osd.45 pgs 92
osd.46 pgs 80
osd.47 pgs 81
osd.48 pgs 64
osd.49 pgs 58
osd.50 pgs 64
osd.51 pgs 42
osd.52 pgs 64
osd.53 pgs 81
osd.54 pgs 48
osd.55 pgs 49
osd.56 pgs 48
osd.57 pgs 69
osd.58 pgs 64
osd.59 pgs 81
osd.60 pgs 81
osd.61 pgs 64
osd.62 pgs 80
osd.63 pgs 50
osd.64 pgs 70
osd.65 pgs 80
osd.66 pgs 60
osd.67 pgs 57
osd.68 pgs 81
osd.69 pgs 59
osd.77 pgs 88
osd.78 pgs 95
osd.79 pgs 75
osd.80 pgs 75
osd.81 pgs 77
osd.82 pgs 88
osd.83 pgs 89
osd.84 pgs 75
osd.85 pgs 75
osd.86 pgs 78
osd.87 pgs 75
osd.88 pgs 75
osd.89 pgs 75
osd.90 pgs 75
osd.91 pgs 94
osd.92 pgs 99
osd.93 pgs 96
osd.94 pgs 75
osd.95 pgs 88
osd.96 pgs 75
osd.97 pgs 75
osd.98 pgs 75
osd.99 pgs 88
osd.100 pgs 104
osd.101 pgs 89
osd.102 pgs 75
osd.103 pgs 62
osd.104 pgs 77
osd.105 pgs 70
osd.106 pgs 92
osd.107 pgs 84
osd.108 pgs 90
osd.109 pgs 80
osd.110 pgs 97
osd.111 pgs 92
osd.112 pgs 75
osd.113 pgs 75
osd.114 pgs 92
osd.115 pgs 75
osd.116 pgs 79
osd.117 pgs 87
osd.118 pgs 94
osd.119 pgs 75
osd.120 pgs 75
osd.121 pgs 75
osd.122 pgs 103
osd.123 pgs 81
osd.124 pgs 75
osd.125 pgs 75
osd.126 pgs 70
osd.127 pgs 75
osd.128 pgs 76
osd.129 pgs 77
osd.130 pgs 95
osd.131 pgs 94
osd.132 pgs 75
osd.133 pgs 75
osd.134 pgs 75
osd.135 pgs 89
osd.136 pgs 82
osd.137 pgs 77
osd.138 pgs 64
osd.139 pgs 75
osd.140 pgs 80
osd.141 pgs 64
osd.142 pgs 54
osd.143 pgs 80
osd.144 pgs 86
osd.145 pgs 18
osd.146 pgs 80
osd.147 pgs 75
osd.148 pgs 75
osd.149 pgs 91
osd.150 pgs 89
osd.151 pgs 92
osd.152 pgs 80
osd.153 pgs 75
osd.154 pgs 64
osd.155 pgs 80
osd.156 pgs 51
osd.157 pgs 58
osd.158 pgs 80
osd.159 pgs 49
osd.160 pgs 39
osd.161 pgs 64
osd.162 pgs 43
osd.163 pgs 64
osd.164 pgs 80
osd.165 pgs 75
osd.166 pgs 53
osd.167 pgs 75
osd.168 pgs 75
osd.169 pgs 98
osd.170 pgs 75
osd.171 pgs 95
osd.172 pgs 75
osd.173 pgs 94
osd.174 pgs 75
osd.175 pgs 75
osd.176 pgs 75
osd.177 pgs 89
osd.178 pgs 94
osd.179 pgs 80
osd.180 pgs 86
osd.181 pgs 83
osd.182 pgs 32
osd.183 pgs 92
osd.184 pgs 95
osd.185 pgs 95
osd.186 pgs 95
osd.187 pgs 91
osd.188 pgs 75
osd.189 pgs 75
osd.190 pgs 92
osd.191 pgs 75
osd.192 pgs 93
osd.193 pgs 95
osd.194 pgs 91
osd.195 pgs 75
osd.196 pgs 91
osd.197 pgs 80
osd.198 pgs 75
osd.199 pgs 75
osd.200 pgs 75
osd.201 pgs 75
osd.202 pgs 75
osd.203 pgs 81
osd.204 pgs 75
osd.205 pgs 75
osd.206 pgs 75
osd.207 pgs 95
osd.208 pgs 75
Total time elapsed 940.102 secs, 29 rounds
 
扩展:使用 PG-UPMAP
从 Luminous v12.2.z 开始,OSDMap 中有一个新的pg-upmap异常表,允许集群显式地将特定 PG 映射到特定 OSD。这允许集群对数据分布进行微调,在大多数情况下,可以在 OSD 之间完美分布 PG。
这种新机制的关键警告是它要求所有客户端都理解OSDMap 中的新pg-upmap结构。
启用
默认情况下,新集群将启用此模块。集群必须只有发光的(和更新的)客户端。您可以通过以下方式关闭平衡器:
ceph balancer off
要允许在现有集群上使用该功能,您必须告诉集群它只需要通过以下方式支持发光(和更新)客户端:
ceph osd set-require-min-compat-client luminous
如果任何 pre-luminous 客户端或守护程序连接到监视器,此命令将失败。您可以查看正在使用的客户端版本:
ceph features
平衡器模块
ceph-mgr的平衡器模块会自动平衡每个 OSD 的 PG 数量。见平衡器
离线优化
Upmap 条目使用内置于osdmaptool.
1. 获取 osdmap 的最新副本:
ceph osd getmap -o osdmap.bin
2. 运行优化器:
osdmaptool osdmap.bin --upmap out.txt [--upmap-pool <pool>]
         [--upmap-max <max-optimizations>] [--upmap-deviation <max-deviation>]
         [--upmap-active]
强烈建议对每个池单独进行优化,或对类似使用的池集进行优化。您可以--upmap-pool多次指定该选项。“相似池”是指映射到相同设备并存储相同类型数据的池(例如,RBD 图像池,是;RGW 索引池和 RGW 数据池,否)。
该max-optimizations值是要在运行中识别的最大上行映射条目数。与 ceph-mgr 平衡器模块一样,默认值为10,但如果您正在进行离线优化,则应使用更大的数字。如果它找不到任何额外的更改,它将提前停止(即,当池分布完美时)。
该max-deviation值默认为5。如果 OSD PG 计数与计算的目标数量相差小于或等于此数量,则将被视为完美。
该--upmap-active选项模拟主动平衡器在 upmap 模式下的行为。它一直循环直到 OSD 平衡并报告多少轮以及每轮需要多长时间。循环所用的时间表示 ceph-mgr 在尝试计算下一个优化计划时将消耗的 CPU 负载。
3. 应用更改:
source out.txt
建议的更改写入out.txt上述示例中的输出文件。这些是普通的 ceph CLI 命令,可以运行这些命令将更改应用到集群。
上述步骤可以根据需要重复多次,以实现每组池的完美 PG 分布。
你可以看到有关该工具是通过传递做一些参数查看细节更改。--debug-osd 10 and even more with --debug-crush 10 to osdmaptool 
 
 作者:Dexter_Wang   工作岗位:某互联网公司资深云计算与存储工程师  联系邮箱:993852246@qq.com
原文地址:https://www.cnblogs.com/dexter-wang/p/14962439.html