2.3. CRUSH 中的 Ceph OSD
具有 OSD 的 CRUSH 层次结构后,请将 OSD 添加到 CRUSH 层次结构中。您也可以从现有层次结构移动或移除 OSD。Ceph CLI 使用有以下值:
- id
- 描述
- OSD 的数字 ID。
- 类型
- 整数
- 必需
- 是
- 示例
-
0
- name
- 描述
- OSD 的全名。
- 类型
- 字符串
- 必填
- 是
- 示例
-
osd.0
- weight
- 描述
- OSD 的 CRUSH 权重。
- 类型
- 双
- 必填
- 是
- 示例
-
2.0
- root
- 描述
- OSD 所在的层次结构或树的根 bucket 的名称。
- 类型
- 键-值对。
- 必填
- 是
- 示例
-
root=default、root=replicated_rule等等
- bucket-type
- 描述
- 一个或多个 name-value 对,其中 name 是存储桶类型,值是存储桶的名称。您可以在 CRUSH 层次结构中指定 OSD 的 CRUSH 位置。
- 类型
- 健值对。
- 必填
- 否
- 示例
-
datacenter=dc1 room=room1 row=foo rack=bar host=foo-bar-1
2.3.1. 在 CRUSH 中查看 OSD 复制链接链接已复制到粘贴板!
ceph osd crush tree 命令在树视图中打印 CRUSH bucket 和项目。使用此命令来确定特定 bucket 中的 OSD 列表。它将打印与 ceph osd tree 类似的输出。
要返回附加详情,请执行以下操作:
ceph osd crush tree -f json-pretty
# ceph osd crush tree -f json-pretty
该命令会返回类似如下的输出:
2.3.2. 将 OSD 添加到 CRUSH 复制链接链接已复制到粘贴板!
在可以启动一个 OSD(为 up 和 in)且 Ceph 为 OSD 分配放置组前,将一个 Ceph OSD 添加到 CRUSH 层次结构中是最终的步骤。
Red Hat Ceph Storage 5 及更新的版本使用 Ceph 编排器在 CRUSH 层次结构中部署 OSD。有关更多信息,请参阅在所有可用设备上部署 Ceph OSD。
若要手动添加 OSD,您必须先准备 Ceph OSD,然后才能将其添加到 CRUSH 层次结构中。例如,在单一节点上创建 Ceph OSD:
ceph orch daemon add osd {host}:{device},[{device}]
ceph orch daemon add osd {host}:{device},[{device}]
CRUSH 层次结构不重要,因此 ceph osd crush add 命令允许您根据需要将 OSD 添加到 CRUSH 层次结构中。您指定的位置应反映其实际位置。如果您至少指定了一个存储桶,命令会将 OSD 放入您指定的最具体的存储桶中,并 将它移到您指定的任何其他 bucket 下。
将 OSD 添加到 CRUSH 层次结构中:
ceph osd crush add {id-or-name} {weight} [{bucket-type}={bucket-name} ...]
ceph osd crush add {id-or-name} {weight} [{bucket-type}={bucket-name} ...]
如果您仅指定根存储桶,该命令会直接将 OSD 附加到 root。但是,虽然 CRUSH 规则应该位于主机或机箱内,host 或 chassis 则 应当位于 反映您的集群拓扑的其他 bucket 中。
以下示例将 osd.0 添加到层次结构中:
ceph osd crush add osd.0 1.0 root=default datacenter=dc1 room=room1 row=foo rack=bar host=foo-bar-1
ceph osd crush add osd.0 1.0 root=default datacenter=dc1 room=room1 row=foo rack=bar host=foo-bar-1
您还可以使用 ceph osd crush set 或 ceph osd crush create-or-move 将 OSD 添加到 CRUSH 层次结构中。
2.3.3. 在 CRUSH 层次结构内移动 OSD 复制链接链接已复制到粘贴板!
对于 Red Hat Ceph Storage 5 及更新的版本,您可以使用 Ceph 编排器为主机设置初始 CRUSH 位置。如需更多信息,请参阅设置主机的初始 CRUSH 位置。
要替换 OSD,请参阅使用 Ceph 编排器替换 OSD
如果存储集群拓扑更改,您可以手动移动 CRUSH 层次结构中的 OSD,以反映其实际位置。
在 CRUSH 层次结构中移动 OSD 意味着 Ceph 会重新计算将哪些放置组分配到 OSD,这可能会导致大量重新分发数据。
要在 CRUSH 层次结构中移动 OSD:
ceph osd crush set {id-or-name} {weight} root={pool-name} [{bucket-type}={bucket-name} ...]
ceph osd crush set {id-or-name} {weight} root={pool-name} [{bucket-type}={bucket-name} ...]
您还可以使用 ceph osd crush create-or-move 将 OSD 移到 CRUSH 层次结构中。
2.3.4. 从 CRUSH 层次结构移除 OSD 复制链接链接已复制到粘贴板!
从 CRUSH 层次结构中移除 OSD 是您要从集群中移除 OSD 的第一步。从 CRUSH map 移除 OSD 时,OSD 会重新计算哪些 OSD 相应获取放置组和数据重新平衡。如需了解更多详细信息,请参阅添加/删除 OSD。
对于 Red Hat Ceph Storage 5 及更新的版本,您可以使用 Ceph 编排器从存储集群中移除 OSD。有关更多信息,请参阅使用 Ceph 编排器删除 OSD 守护进程。
要从正在运行的集群的 CRUSH map 中手动删除 OSD,请执行以下操作:
ceph osd crush remove {name}
ceph osd crush remove {name}