Розширення кількості OSD та налаштування ребалансування в Ceph

🌐 Цей документ доступний українською та англійською мовами. Використовуйте перемикач у правому верхньому куті, щоб змінити версію.

Цей документ охоплює сценарії масштабування Ceph-кластера шляхом додавання нових OSD (Object Storage Daemon) та оптимізацію процесу ребалансування для запобігання деградації продуктивності системи.

Рекомендовано налаштувати Grafana-алерт на спрацювання при заповненні понад 75% дискового простору, щоб завчасно масштабувати кластер.

1. Розширення кількості OSD

У разі нестачі дискового простору у Ceph-кластері необхідно додати нові PVC та відповідно розширити кількість OSD (Object Storage Daemon) шляхом оновлення ресурсу StorageCluster CR.

1.1. Додавання нових OSD через StorageCluster CR

  1. Перейдіть до редагування ресурсу StorageCluster CR у просторі імен openshift-storage.

    Редагування ресурсу StorageCluster CR
    oc edit StorageCluster -n openshift-storage ocs-storagecluster
  2. Знайдіть секцію storage.storageClassDeviceSets та змініть конфігурацію, щоб додати нові OSD. Для цього збільште параметр count на +1 групу OSD або більше, враховуючи залежність на кількість реплік (replica) та розмір сховища (storage). У прикладі нижче додається одна група з трьома репліками розміром 512Gi.

    Ресурс StorageCluster. Конфігурація storage.storageClassDeviceSets
    storage:
      storageClassDeviceSets:
        - name: ocs-deviceset-gp3-csi
          count: 2  # було 1 — збільшуємо на +1 (1)
          replica: 3 (2)
          resources:
            limits:
              cpu: "4"
              memory: 16Gi
            requests:
              cpu: "2"
              memory: 8Gi
          volumeClaimTemplates:
            - metadata:
                name: data
              spec:
                resources:
                  requests:
                    storage: 512Gi (3)
                storageClassName: gp3-csi
                volumeMode: Block
                accessModes:
                  - ReadWriteOnce
1 count — кількість груп OSD, що буде розгорнута. Збільшення count на +1 додає нову групу з OSD, відповідно до вказаної кількості реплік.
2 replica — кількість OSD у кожній групі. Наприклад, replica: 3 означає, що кожна група складається з трьох OSD.
3 storage — розмір кожного PVC у складі OSD. У прикладі використовується 512Gi для кожної репліки.
Перед масштабуванням обов’язково перевірте актуальні значення Capacity наявних PVC. Усі нові OSD повинні мати такий самий розмір, щоб уникнути дисбалансу в Ceph-кластері.
ceph osd scaling and rebalancing 1

1.2. Перевірка результату

Перевірте результат за допомогою наступних команд:

  1. Перевірте статус Ceph-кластера:

    ceph -s --conf=/var/lib/rook/openshift-storage/openshift-storage.config

    Ця команда виводить загальний стан Ceph-кластера, включно з кількістю OSD, станом моніторів, PG та станом реплікації.

  2. Переконайтеся, що нові OSD додано:

    ceph osd tree --conf=/var/lib/rook/openshift-storage/openshift-storage.config

    Ця команда показує ієрархію OSD у кластері. Тут можна побачити нові OSD, що були додані, а також їхній статус та приналежність до хостів.

2. Налаштування та оптимізація ребалансування

Після додавання або видалення OSD у Ceph автоматично запускається процес ребалансування (rebalancing) — перенесення об’єктів між OSD для рівномірного розподілу навантаження.

Цей процес може бути ресурсомістким і вплинути на загальну продуктивність кластера. Нижче наведено параметри для налаштування цього процесу — для сценаріїв зменшення навантаження, або пришвидшення.

2.1. Зменшення навантаження при ребалансуванні

Цей варіант підходить для сценаріїв, коли важливо зберегти стабільну продуктивність під час робочого часу.

  1. Обмежте кількість паралельних потоків (backfills).

    ceph config set osd osd_max_backfills 1 --conf=/var/lib/rook/openshift-storage/openshift-storage.config
    
    ceph config set osd osd_recovery_max_active 1 --conf=/var/lib/rook/openshift-storage/openshift-storage.config

    Ці параметри зменшують кількість одночасних потоків перенесення даних (backfills/recovery), що знижує навантаження на OSD під час ребалансування.

  2. Зменште швидкість бекапів шляхом додавання пауз між ними.

    ceph config set osd osd_recovery_sleep 0.1 --conf=/var/lib/rook/openshift-storage/openshift-storage.config

    Цей параметр додає паузу (sleep) у 0.1 секунди між операціями recovery, зменшуючи навантаження на диск і CPU.

2.2. Прискорення ребалансування (рекомендовано у вікно обслуговування)

У періоди мінімального навантаження (наприклад, уночі або на вихідних) можна прискорити процес розподілу, дозволивши більше одночасних потоків backfills.

ceph config set osd osd_max_backfills 4 --conf=/var/lib/rook/openshift-storage/openshift-storage.config

ceph config set osd osd_recovery_max_active 4 --conf=/var/lib/rook/openshift-storage/openshift-storage.config

Ці параметри дозволяють запускати більше паралельних потоків backfills і recovery, прискорюючи ребалансування даних. Застосовуйте лише у періоди низького навантаження, наприклад уночі або під час вікна обслуговування.

2.3. Моніторинг процесу ребалансування

Використовуйте наведені нижче команди для контролю прогресу ребалансування та поточного стану PG.

ceph -s --conf=/var/lib/rook/openshift-storage/openshift-storage.config

Виводить поточний стан Ceph, включаючи статус recovery, backfill, degraded PG тощо.

ceph pg stat --conf=/var/lib/rook/openshift-storage/openshift-storage.config

Показує деталізовану статистику по Placement Groups, включаючи статуси active, clean, backfilling, recovering.

Якщо після масштабування або видалення OSD кластер довго перебуває у стані degraded, перевірте наявність неактивних PG або дискових помилок у логах Ceph.