Ceph: 使用 CLI 管理 CRUSH

shan

开始熟悉 Ceph CLI 和 CRUSH。

为了本次练习的目的,我将

  • 在我的现有基础设施中设置两个新的机架
  • 简单地将我当前的服务器添加到其中
  • 创建一个新的 CRUSH 规则,该规则使用这两个机架

让我们从创建两个新的机架开始

bash $ ceph osd crush add-bucket rack1 添加了 bucket rack1 类型 rack 到 crush map $ ceph osd crush add-bucket rack2 添加了 bucket rack2 类型 rack 到 crush map

如你所见,机架是空的(这是正常的)

```bash $ ceph osd tree

id weight type name up/down reweight

-6 0 rack rack2 -5 0 rack rack1 -1 11.73 root default -2 5.46 host test1 0 1.82 osd.0 up 1 1 1.82 osd.1 up 1 -3 5.46 host test2 2 1.82 osd.2 up 1 3 1.82 osd.3 up 1 ```

现在我们将每个主机分配给一个特定的机架

```bash $ ceph osd crush move test1 rack=rack1 将 item id -2 名称 'test1' 移动到 crush map 中的位置 {rack=rack1}

$ ceph osd crush move test2 rack=rack2 将 item id -3 名称 'test2' 移动到 crush map 中的位置 {rack=rack1} ```

我们将这两个机架移动到默认根

bash $ ceph osd crush move rack2 root=default 将 item id -6 名称 'rack2' 移动到 crush map 中的位置 {root=default} $ ceph osd crush move rack1 root=default 将 item id -5 名称 'rack1' 移动到 crush map 中的位置 {root=default}

检查最终结果

```bash $ ceph osd tree

id weight type name up/down reweight

-1 11.73 root default -6 0.81 rack rack2 2 1.82 osd.2 up 1 3 1.82 osd.3 up 1 -5 10.92 rack rack1 -2 5.46 host os-ci-test10 0 1.82 osd.0 up 1 1 1.82 osd.1 up 1 ```

最终为这种放置创建新的规则

bash $ ceph osd crush rule create-simple racky default rack

{ "rule_id": 3,
  "rule_name": "racky",
  "ruleset": 3,
  "type": 1,
  "min_size": 1,
  "max_size": 10,
  "steps": [
        { "op": "take",
          "item": -1},
        { "op": "chooseleaf_firstn",
          "num": 0,
          "type": "rack"},
        { "op": "emit"}]}]

最后,您可以将一个池分配给此规则集

bash $ ceph osd pool set rbd crush_ruleset 3 设置池 2 crush_ruleset 为 3

Ceph 的 CLI 越来越强大。很高兴看到我们不需要下载 CRUSH map,然后手动编辑它并最终重新提交它 :).