在单节点集群(minikube)上的rook-ceph中,1 pg尺寸不足的健康警告



我正在将rook-ceph部署到一个minikube集群中。一切似乎都在运转。我向vm添加了3个未格式化的磁盘,并将其连接。我的问题是,当我运行ceph状态时,我收到了一条健康温暖的消息,告诉我";小尺寸1pg";。我到底该如何解决这个问题?

文件(https://docs.ceph.com/docs/mimic/rados/troubleshooting/troubleshooting-pg/)声明">如果您试图在单个节点上创建集群,则在创建监视器和操作系统之前,必须将Ceph配置文件中osd crush chooseleaf类型设置的默认值从1(表示主机或节点(更改为0(表示osd(";我不知道在哪里进行这种配置,但如果有其他方法可以解决这个问题,请告诉我。谢谢

我在使用rook(v1.5.7(安装ceph时遇到了这个问题,该rook带有一个具有多个操作系统的数据承载主机。

安装附带了默认的CRUSH规则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规则,而是选择创建一个新的复制规则,但这次指定了osd(又名device(类型(docs:CRUSH映射类型和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

正如您在问题中提到的,您应该将挤压失败域类型更改为OSD,这意味着它将在操作系统而不是主机之间复制您的数据。默认情况下,它是主机,当你只有一个主机时,它没有任何其他主机来复制你的数据,所以你的pg总是太小了。

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

这将在操作系统和主机之间复制您的数据。

新帐户因此无法添加为注释,我想详细说明@zamnuts的答案,因为我在我的集群中使用rook:v1.7.2,如果想更改rook/Ceph Helm图表或YAML中的默认设备health_metrics,以下文档是相关的

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

最新更新