Предупреждение о низком уровне работоспособности 1 pg в ладей-цеф-пове в кластере с одним узлом (minikube)
Я разворачиваю ладью-цеф в кластер миникуб. Вроде все работает. Я добавил 3 неформатированных диска в виртуальную машину и подключил ее. Проблема, с которой я сталкиваюсь, заключается в том, что когда я запускаю ceph status, я получаю теплое сообщение о работоспособности, в котором говорится: "1 pg меньше размера". Как именно это исправить?
В документации (https://docs.ceph.com/docs/mimic/rados/troubleshooting/troubleshooting-pg/) указано: "Если вы пытаетесь создать кластер на одном узле, вы должны изменить значение по умолчанию для osd crush. выберите параметр типа от 1 (означает хост или узел) до 0 (означает OSD) в вашем файле конфигурации Ceph, прежде чем вы создадите свои мониторы и OSD."Я не знаю, где сделать эту конфигурацию, но есть ли другой способ исправить это что я должен знать, пожалуйста, дайте мне знать. Благодарность!
3 ответа
Как вы упомянули в своем вопросе, вам следует изменить тип домена отказа crush на OSD, что означает, что он будет реплицировать ваши данные между OSD, а не хостами. По умолчанию это хост, и когда у вас только один хост, у него нет других хостов для репликации ваших данных, поэтому ваш pg всегда будет меньше размера.
Вы должны установить osd crush chooseleaf type = 0
в вашем ceph.conf
прежде, чем вы создадите свои мониторы и OSD.
Это будет реплицировать ваши данные между OSD, а не хостами.
Я столкнулся с этой проблемой при установке ceph с использованием rook (v1.5.7) с одним хостом, несущим данные, с несколькими OSD.
Установка поставляется с правилом 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
) 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 или в 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