6.3 编辑 CRUSH Map

要编辑现有的 CRUSH Map,总共分如下4步:

  • 获取 CRUSH Map;
  • 反编译 CRUSH 图;
  • 重编译 CRUSH Map;
  • 注入 CRUSH Map。

要激活 CRUSH Map 里某存储池的规则,找到通用规则集编号,然后把它指定到那个规则集。详情参见 1.8 操作 Pool 中调整存储池选项值部分。

1、获取 CRUSH Map

要获取集群的 CRUSH Map,执行命令:

ceph osd getcrushmap -o {compiled-crushmap-filename}

Ceph 将把 CRUSH 输出( -o )到你指定的文件,由于 CRUSH Map 是已编译的,所以编辑前必须先反编译。

2、反编译 CRUSH Map

要反编译 CRUSH Map,执行命令:

crushtool -d {compiled-crushmap-filename} -o {decompiled-crushmap-filename}

Ceph 将反编译( -d )二进制 CRUSH Map,且输出( -o )到你指定的文件。

3、编译 CRUSH Map

要编译 CRUSH Map,执行命令:

crushtool -c {decompiled-crush-map-filename} -o {compiled-crush-map-filename}

Ceph 将把已编译的 CRUSH Map 保存到你指定的文件。

4、注入 CRUSH Map

要把 CRUSH Map 应用到集群,执行命令:

ceph osd setcrushmap -i  {compiled-crushmap-filename}

Ceph 将把你指定的已编译 CRUSH Map 注入到集群。

6.4 增加/移动 OSD

要增加或移动在线集群里 OSD 所对应的 CRUSH Map 条目,执行 ceph osd crush set 命令。

ceph osd crush set {id-or-name} {weight} {bucket-type}={bucket-name} [{bucket-type}={bucket-name} ...]

6.5 调整 OSD 的 CRUSH 权重

要调整在线集群中某个 OSD 的 CRUSH 权重,执行命令:

ceph osd crush reweight {name} {weight}

6.6 删除 OSD

要从在线集群里把某个 OSD 彻底踢出 CRUSH Map,或仅踢出某个指定位置的 OSD,执行命令:

ceph osd crush remove {name} {<ancestor>}

6.7 增加桶

要在运行集群的 CRUSH Map 中新建一个桶,用 ceph osd crush add-bucket 命令:

ceph osd crush add-bucket {bucket-name} {bucket-type}

6.8 移动桶

要把一个桶移动到 CRUSH Map 里的不同位置,执行命令:

ceph osd crush move {bucket-name} {bucket-type}={bucket-name} [{bucket-type}={bucket-name} ...]

6.9 删除桶

要把一个桶从 CRUSH Map 的分级结构中删除,可用此命令:

ceph osd crush remove {bucket-name}

注意:从 CRUSH 分级结构里删除时必须是空桶。

6.10 主亲和性

某个 Ceph 客户端读写数据时,总是连接 acting set 里的主 OSD (如 [2, 3, 4]中, osd.2 是主的)。有时候某个 OSD 与其它的相比并不适合做主 OSD (比如其硬盘慢、或控制器慢)。最大化硬件利用率时为防止性能瓶颈(特别是读操作),你可以调整 OSD 的主亲和性,这样 CRUSH 就尽量不把它用作 acting set 里的主 OSD 了。

ceph osd primary-affinity <osd-id> <weight>

主亲和性默认为 1 (就是说此 OSD 可作为主 OSD )。此值合法范围为 0-1 ,其中 0 意为此 OSD 不能用作主的, 1 意为 OSD 可用作主的。此权重 < 1时, CRUSH 选择主 OSD 时选中它的可能性就较低。

results matching ""

    No results matching ""