Первинні налаштування процесів Scrubbing та Deep Scrubbing у Ceph-кластері

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

Після встановлення Платформи на OKD-кластер рекомендується виконати первинні налаштування процесів scrubbing та deep scrubbing у Ceph-кластері для забезпечення цілісності даних та стабільної роботи системи.

Ці первинні налаштування призначені для виробничих (production) оточень і рекомендовані до застосування одразу після встановлення Платформи.

1. Загальні відомості

Scrubbing (скрабування) та deep scrubbing — це фонові процеси перевірки даних, що виконуються у Ceph-кластері для виявлення пошкоджених або невідповідних об’єктів:

  • Scrubbing перевіряє контрольні суми об’єктів у Placement Groups (PG) та дозволяє виявити помилки в метаданих.

  • Deep scrubbing виконує глибшу перевірку, порівнюючи реальні дані об’єктів з їхніми хешами, щоб виявити пошкоджені або невідповідні дані.

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

2. Чому важливо контролювати scrubbing

Навантаження, яке створює процес scrubbing, може впливати на продуктивність кластера, тому рекомендується:

  • Запланувати звичайний scrubbing на нічний час або в періоди мінімального навантаження.

  • Запускати deep scrubbing вручну або за чітким розкладом.

  • Обмежувати використання ресурсів для запобігання впливу на продуктивність кластера.

Виконайте такі рекомендовані дії у Ceph-кластері після встановлення Платформи на OKD-кластер:

  • ① Налаштуйте загальні параметри scrubbing.

  • ② Вимкніть автоматичний запуск deep scrubbing.

  • ③ Налаштуйте розклад звичайного scrubbing.

Детальний опис кожного пункту наведено нижче.

3.1. Налаштування загальних параметрів scrubbing

3.1.1. Налаштування пріоритету процесів scrubbing

Рекомендовано понизити пріоритет процесів скрабування, запущених вручну, для однозначного надання переваги запитам користувачів. Наприклад, встановіть значення 10.

Параметр Requested Scrub Priority
osd_requested_scrub_priority 10

Змінити цей параметр можна через UI Ceph Dashboard. Для цього виконайте наступні кроки:

  1. Відкрийте UI Ceph Dashboard.

  2. Перейдіть до Cluster  OSDs  Cluster-wide configuration.

  3. Оберіть PG scrub та розгорніть вкладку Advanced.

  4. Встановіть відповідне значення для Requested Scrub Priority.

    ceph scrubbing 1
    Зображення 1. UI Ceph Dashboard. Requested Scrub Priority

Аналогічні налаштування можна виконати через Ceph CLI з поду rook-operator в OKD-проєкті openshift-storage:

Приклад налаштування Requested Scrub Priority через CLI
ceph config --conf=/var/lib/rook/openshift-storage/openshift-storage.config set osd osd_requested_scrub_priority 10

3.1.2. Налаштування паралельних процесів scrubbing

Рекомендовано виконувати не більше 1 процесу scrubbing одночасно на кожному OSD (Object Storage Daemon). Для цього використовується параметр osd_max_scrubs = 1.

Цей параметр визначає, скільки одночасних процесів скрабування (scrub) може бути запущено на один OSD. Обмеження до одного процесу дозволяє:

  • зменшити навантаження на дискову підсистему та CPU;

  • уникнути впливу на продуктивність обробки клієнтських запитів;

  • забезпечити стабільність роботи кластера у виробничому середовищі.

OSD (Object Storage Daemon) — це основний компонент Ceph, який зберігає дані, обробляє запити читання/запису та виконує скрабування. Кожен OSD працює незалежно, і перевірка цілісності даних (scrub) — це локальна операція для конкретного OSD.

У випадках, коли у кластері накопичилася велика кількість PG (Placement Groups), для яких скрабування давно не проводилось, і які є "простроченими", дозволяється тимчасово збільшити параметр osd_max_scrubs до 4.

Це прискорить виконання "простроченого" скрабування, але може створити підвищене навантаження.

❗Після завершення обов’язково поверніть параметр до значення 1.

➡️ Детальніше про статуси PG див. у документації Ceph: Placement Group States.

Змінити цей параметр можна через UI Ceph Dashboard. Для цього виконайте наступні кроки:

  1. Відкрийте UI Ceph Dashboard.

  2. Перейдіть до Cluster  OSDs  Cluster-wide configuration.

  3. Оберіть PG scrub та встановіть відповідне значення для Max Scrubs.

    ceph scrubbing 2
    Зображення 2. UI Ceph Dashboard. Max Scrubs

Аналогічні налаштування можна виконати через Ceph CLI з поду rook-operator в OKD-проєкті openshift-storage:

Приклад налаштування Max Scrubs через CLI
ceph config --conf=/var/lib/rook/openshift-storage/openshift-storage.config set osd osd_max_scrubs 1

3.2. Вимкнення автоматичного deep scrubbing

У Ceph кластері процес deep scrubbing за замовчуванням виконується автоматично з періодичністю, яка визначається у конфігурації. Хоча ця перевірка є критично важливою для забезпечення цілісності даних, вона також є значно більш ресурсомісткою, ніж звичайний scrubbing, оскільки виконує повну перевірку вмісту об’єктів, а не лише метаданих.

У виробничих середовищах рекомендується запускати deep scrubbing вручну, у визначені вікна обслуговування або періоди низького навантаження на кластер, щоб уникнути:

  • пікових навантажень на OSD-диски;

  • деградації продуктивності інших сервісів Платформи;

  • ризику впливу на критичні транзакції.

Ознайомтеся детальніше із процесом: Ручний запуск та управління процесами Deep Scrubbing.

3.2.1. Як вимкнути автоматичний deep scrubbing

Ceph дозволяє блокувати автоматичний запуск процесу deep scrubbing на рівні кожного пулу (pool). Для цього потрібно встановити відповідні прапорці nodeep-scrub.

Кроки для вимкнення автоматичного запуску:
  1. Визначте шлях до конфігураційного файлу ceph.conf, який використовується у вашому кластері (у прикладі нижче він вказаний явно).

  2. Виконайте наступну команду, щоб додати прапорець nodeep-scrub для всіх пулів:

    for pool in $(ceph --conf=/var/lib/rook/openshift-storage/openshift-storage.config osd pool ls); do
      ceph --conf=/var/lib/rook/openshift-storage/openshift-storage.config osd pool set "$pool" nodeep-scrub true
    done
    Команда переліку пулів osd pool ls повертає всі наявні пули у кластері. Цикл застосовує прапорець nodeep-scrub до кожного з них.

3.2.2. Як перевірити, чи встановлено прапорець

Щоб переконатися, що параметр nodeep-scrub успішно застосовано, перевірте наявність прапорців (flags) на пулах:

ceph --conf=/var/lib/rook/openshift-storage/openshift-storage.config osd pool ls detail

У виводі шукайте ключ flags, де має бути вказано nodeep-scrub.

Рекомендовано запускати deep scrubbing вручну регулярно, щонайменше раз на кілька тижнів, залежно від SLA та обсягу критичних даних.

Запускайте deep scrubbing у ті періоди, коли у вашому середовищі кластер найменше навантажений — наприклад, уночі в будні або на вихідних, якщо дозволяє графік. Формального вікна обслуговування не потрібно, якщо процес не впливає на критичні сервіси.

📌 Важливо — не допускати накопичення черги PG, які тривалий час залишаються без перевірки. У кластері з великою кількістю об’єктів і PG може знадобитися запуск щодня з обмеженою кількістю паралельних процесів (osd_max_scrubs), тоді як у менш навантаженому середовищі достатньо одного запуску на вихідних.

3.3. Налаштування розкладу звичайного scrubbing

Рекомендується запускати звичайний scrubbing щоночі, з 00:00 до 06:00 за київським часом (UTC+2 або UTC+3), забезпечуючи не більше одного одночасного процесу скрабування на кожен OSD (osd_max_scrubs = 1). Такий режим дозволяє регулярно перевіряти цілісність даних без значного впливу на продуктивність кластера (див. Налаштування паралельних процесів scrubbing).

За замовчуванням процес scrubbing уже увімкнено. Для його точного планування можна змінити параметри розкладу.

3.3.1. Як налаштувати розклад через Ceph Dashboard

  1. Відкрийте UI Ceph Dashboard.

  2. Перейдіть до Cluster  OSDs  Cluster-wide configuration.

  3. Оберіть розділ PG scrub та налаштуйте значення параметрів, визначених у таблиці нижче.

    Ці параметри дозволяють задати точний період, у який Ceph має право автоматично запускати звичайний scrubbing. Значення встановлюються в UTC, тому при плануванні за локальним часом (наприклад, за Києвом — UTC+2) слід враховувати зміщення.
    Таблиця 1. UI Ceph Dashboard. Налаштування розкладу PG scrub
    Параметр Значення Опис

    osd_scrub_begin_hour

    22

    Визначає годину початку допустимого вікна для scrubbing.

    22 година за UTC = 00:00 за Києвом. Це означає, що scrubbing може починатися не раніше ніж опівночі за локальним часом.

    osd_scrub_end_hour

    4

    Визначає годину завершення допустимого вікна для scrubbing.

    4 година за UTC = 06:00 за Києвом. Усі автоматичні процеси scrubbing будуть зупинені після 06:00.

    osd_scrub_begin_week_day

    0

    Визначає день тижня, з якого дозволено запуск scrubbing.

    0 = неділя (за Ceph-нумерацією днів тижня, де 0 = неділя, 1 = понеділок, …​, 6 = субота). Якщо begin і end мають однакове значення (0), scrubbing дозволено щодня.

    osd_scrub_end_week_day

    0

    Визначає день тижня, до якого дозволено запуск scrubbing.

    Також 0 = неділя. Якщо begin_week_day = end_week_day = 0, це не обмежує виконання лише одним днем, а навпаки — означає, що scrubbing дозволено кожного дня тижня.

    📌 Як працює логіка днів тижня в Ceph?

    Пара begin_week_day = 0, end_week_day = 0 означає "від неділі до неділі включно", тобто усі дні тижня дозволені.

    Якщо ж встановити, наприклад, begin_week_day = 1 (понеділок), а end_week_day = 5 (п’ятниця), то scrubbing буде запускатися лише з понеділка по п’ятницю.

  4. Натисніть Edit PG scrub options, щоб зберегти зміни.

    ceph scrubbing 3
    Зображення 3. UI Ceph Dashboard. Налаштування розкладу PG scrub

3.3.2. Як налаштувати розклад через Ceph CLI

Аналогічні налаштування можна зробити через Ceph CLI. Для цього виконайте наведені нижче команди з поду rook-operator в OKD-проєкті openshift-storage.

  1. Вкажіть час початку і завершення scrubbing (UTC).

    ceph config set osd --conf=/var/lib/rook/openshift-storage/openshift-storage.config osd_scrub_begin_hour 22
    
    ceph config set osd --conf=/var/lib/rook/openshift-storage/openshift-storage.config osd_scrub_end_hour 4
  2. Вкажіть дні тижня (0 = неділя; встановлюємо запуск щодня).

    ceph config set osd --conf=/var/lib/rook/openshift-storage/openshift-storage.config osd_scrub_begin_week_day 0
    
    ceph config set osd --conf=/var/lib/rook/openshift-storage/openshift-storage.config osd_scrub_end_week_day 0
  3. Перевірте застосовані значення за допомогою команди (замініть <параметр> відповідним параметром):

    ceph config get osd --conf=/var/lib/rook/openshift-storage/openshift-storage.config <параметр>
    Приклад для osd_scrub_begin_hour
    ceph config get osd --conf=/var/lib/rook/openshift-storage/openshift-storage.config osd_scrub_begin_hour