单节点集群(minikube)上的 rook ceph 中出现 1 pg 尺寸过小的健康警告

1 pg undersized health warn in rook ceph on single node cluster(minikube)

我正在将 rook-ceph 部署到 minikube 集群中。一切似乎都在运作。我向虚拟机添加了 3 个未格式化的磁盘并将其连接。我遇到的问题是当我 运行 ceph 状态时,我收到一条健康提示消息,告诉我“1 pg 尺寸过小”。我该如何解决这个问题?

文档 (https://docs.ceph.com/docs/mimic/rados/troubleshooting/troubleshooting-pg/) 指出“如果您尝试在单个节点上创建集群,则必须将 osd crush chooseleaf 类型设置的默认值从 1 更改(意思是在创建监视器和 OSD 之前,将 Ceph 配置文件中的主机或节点)更改为 0(表示 osd)。”我不知道在哪里进行此配置,但如果有任何其他方法可以解决这个问题,我应该知道的,请告诉我。谢谢!

正如你在问题中提到的那样,你应该将你的迷恋 failure-domain-type 更改为 OSD,这意味着它将在 OSD 而不是主机之间复制你的数据。默认情况下它是主机,当你只有一个主机时,它没有任何其他主机来复制你的数据,所以你的 pg 总是不够大。

在创建监视器和 OSD 之前,您应该在 ceph.conf 中设置 osd crush chooseleaf type = 0

这将在 OSD 而不是主机之间复制您的数据。

我在使用具有多个 OSD 的单个数据承载主机使用 rook (v1.5.7) 安装 ceph 时遇到了这个问题。

安装附带默认 CRUSH rule replicated_rule,其中 host 作为默认故障域:

$ ceph osd crush rule dump replicated_rule    
{
    "rule_id": 0,
    "rule_name": "replicated_rule",
    "ruleset": 0,
    "type": 1,
    "min_size": 1,
    "max_size": 10,
    "steps": [
        {
            "op": "take",
            "item": -1,
            "item_name": "default"
        },
        {
            "op": "chooseleaf_firstn",
            "num": 0,
            "type": "host"
        },
        {
            "op": "emit"
        }
    ]
}

我必须找出与 pg 1 关联的池名称“过小”,幸运的是在默认的 rook-ceph 安装中,只有一个:

$ ceph osd pool ls
device_health_metrics

$ ceph pg ls-by-pool device_health_metrics
PG   OBJECTS  DEGRADED  ...  STATE
1.0        0         0  ...  active+undersized+remapped

并确认 pg 正在使用默认规则:

$ ceph osd pool get device_health_metrics crush_rule
crush_rule: replicated_rule

我没有修改默认的 CRUSH 规则,而是选择 create a new replicated rule, but this time specifying the osd (aka device) type (docs: CRUSH map Types and Buckets),同时假设默认的 CRUSH 根目录为 default:

# osd crush rule create-replicated <name> <root> <type> [<class>]
$ ceph osd crush rule create-replicated replicated_rule_osd default osd

$ ceph osd crush rule dump replicated_rule_osd
{
    "rule_id": 1,
    "rule_name": "replicated_rule_osd",
    "ruleset": 1,
    "type": 1,
    "min_size": 1,
    "max_size": 10,
    "steps": [
        {
            "op": "take",
            "item": -1,
            "item_name": "default"
        },
        {
            "op": "choose_firstn",
            "num": 0,
            "type": "osd"
        },
        {
            "op": "emit"
        }
    ]
}

然后将新规则分配给现有池:

$ ceph osd pool set device_health_metrics crush_rule replicated_rule_osd
set pool 1 crush_rule to replicated_rule_osd

$ ceph osd pool get device_health_metrics crush_rule
crush_rule: replicated_rule_osd

终于确认 pg 状态:

$ ceph pg ls-by-pool device_health_metrics
PG   OBJECTS  DEGRADED  ...  STATE
1.0        0         0  ...  active+clean

新帐户因此无法添加为评论,想详细说明@zamnuts 的回答,因为我在我的集​​群中使用 rook:v1.7.2 进行了相同的回答,如果想更改默认值 device_health_metrics在 Rook/Ceph Helm chart 或 YAML 中,以下文档是相关的

https://github.com/rook/rook/blob/master/deploy/examples/pool-device-health-metrics.yaml

https://github.com/rook/rook/blob/master/Documentation/helm-ceph-cluster.md