单节点集群(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
我正在将 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