【问题标题】:1 pg undersized health warn in rook ceph on single node cluster(minikube)单节点集群(minikube)上的 rook ceph 中出现 1 pg 过小健康警告
【发布时间】:2020-08-17 18:23:01
【问题描述】:

我正在将 rook-ceph 部署到 minikube 集群中。一切似乎都在工作。我在 vm 中添加了 3 个未格式化的磁盘并连接了它。我遇到的问题是,当我运行 ceph status 时,我收到一条健康温暖的消息,告诉我“1 pg 过小”。我该如何解决这个问题?

文档(https://docs.ceph.com/docs/mimic/rados/troubleshooting/troubleshooting-pg/) 声明“如果您尝试在单个节点上创建集群,您必须将 osd crushchooseleaf 类型设置的默认值从 1(表示主机或节点)更改为 0 (意思是 osd)在创建监视器和 OSD 之前在 Ceph 配置文件中。知道。谢谢!

【问题讨论】:

  • 我建议您查看归置组计算器:ceph.io/pgcalc 基本上您的警告是说:归置组的副本少于配置的池复制级别。因此,我们需要有关您的设置的更多信息才能给出正确的答案。
  • 嘿,感谢您的回复,我应该提到我是这个大声笑的新手。由于我不使用 Openstack,因此我选择了 AIO。我有 3 个 OSD,这是我附加到 VM 的虚拟硬盘。我将 %Data 和 OSD 保留为默认值 100。因此,总 pg 数为 128。
  • 链接已损坏,请更新

标签: kubernetes minikube ceph rook-storage kubernetes-rook


【解决方案1】:

正如您在问题中提到的,您应该将您的粉碎故障域类型更改为 OSD,这意味着它将在 OSD 而非主机之间复制您的数据。默认情况下它是主机,当您只有一个主机时,它没有任何其他主机来复制您的数据,因此您的 pg 总是会过小。

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

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

【讨论】:

    【解决方案2】:

    我在使用 rook (v1.5.7) 和具有多个 OSD 的单个数据承载主机安装 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,但这次指定了osd(又名device类型docs: CRUSH map Types and Buckets),也假设为默认值default 的 CRUSH 根:

    # 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
    

    【讨论】:

    • 非常感谢,我不知道它怎么还没有任何赞成票!它对我来说非常有效:)
    【解决方案3】:

    新帐户因此无法添加为评论,想说明@zamnuts 的答案,因为我在集群中使用 rook:v1.7.2 遇到了相同问题,如果想更改 Rook/Ceph Helm 图表中的默认 device_health_metrics 或在 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-03
      • 2021-04-12
      • 1970-01-01
      • 2021-04-24
      • 2021-03-18
      • 2021-04-11
      • 2021-05-29
      • 1970-01-01
      相关资源
      最近更新 更多