Предупреждение о низком уровне работоспособности 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

Другие вопросы по тегам