Обслуговування Ceph-кластера та суміжних процесів

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

Платформа містить компонент openshift-storage, що розгортає та керує Ceph-кластером за допомогою rook-operator. У цьому документі зібрано перевірені рекомендації щодо обслуговування Ceph-кластера та пов’язаних процесів для забезпечення стабільної роботи та цілісності даних.

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

Після встановлення Платформи рекомендовано вимкнути автоматичний запуск deep scrubbing для уникнення впливу на продуктивність у пікові години. Однак періодичне виконання глибокого скрабування є критично важливим для контролю цілісності об’єктів. Цей розділ описує, як повторно активувати deep scrubbing, керувати ним вручну та оптимізувати його виконання.

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

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

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

1.1. Розблокування та запуск deep scrubbing

Щоб запустити deep scrubbing вручну, спершу необхідно прибрати прапорці nodeep-scrub з усіх пулів, а потім ініціювати відповідні команди для ceph cli з поду rook-operator в OKD-проєкті openshift-storage.

Зняття прапорців 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 false
done
Перевірка наявності прапорців
ceph --conf=/var/lib/rook/openshift-storage/openshift-storage.config osd pool ls detail
Запуск deep scrubbing на всіх OSD (рекомендовано)
ceph osd --conf=/var/lib/rook/openshift-storage/openshift-storage.config deep-scrub all
Альтернативні варіанти запуску deep скрабування PGs
# Для конкретного OSD
ceph osd --conf=/var/lib/rook/openshift-storage/openshift-storage.config deep-scrub 0

# Для всіх пулів
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 deep-scrub "$pool"
done

1.2. Прискорення deep scrubbing при накопиченні черги

У випадках великої кількості PG, які очікують на deep scrubbing, можна прискорити процес:

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

    АБО

  • Розширити вікно обслуговування, запускаючи deep скрабування вручну на ніч у будні дні.

Збільште кількість процесів скрабування на одному OSD в один момент часу, але не більше 4.

Підвищення кількості процесів до 4
ceph config --conf=/var/lib/rook/openshift-storage/openshift-storage.config set osd osd_max_scrubs 4

Після завершення операції рекомендовано повернути значення osd_max_scrubs до 1.

➡️ Детальніше про це описано у розділі Налаштування паралельних процесів scrubbing.

ceph scrubbing 2

2. Моніторинг статусу Scrubbing

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

2.1. Моніторинг через вебінтерфейс Grafana

Для зручного спостереження за станом scrubbing і продуктивністю OSD можна скористатися Grafana Dashboard, зокрема дашбордом Ceph & PostgreSQL Deep Scrubbing Dashboard.

Цей дашборд візуалізує:

  • Кількість PG у процесі deep scrubbing — за часовою шкалою;

  • Затримки читання/запису на рівні OSD (OSD Read & Write Latency);

  • Поточний стан кластера — панель Cluster Healthy Status.

ceph cluster maintenance 1
Зображення 1. Grafana Dashboard. Ceph Deep Scrubbing Metrics

Перегляд статусу через Ceph CLI

Ви також можете відстежувати процес скрабування за допомогою Ceph CLI. Нижче подано перелік корисних команд:

Перегляд загального стану кластера
ceph -s --conf=/var/lib/rook/openshift-storage/openshift-storage.config
Статус по Placement Groups
ceph --conf=/var/lib/rook/openshift-storage/openshift-storage.config pg stat
Пошук активних scrubbing-процесів
ceph pg --conf=/var/lib/rook/openshift-storage/openshift-storage.config dump pgs | grep -E 'scrub|deep'
Детальний запит по PG
ceph pg 19.11 query --conf=/var/lib/rook/openshift-storage/openshift-storage.config
Мітки останнього deep scrubbing по PG
ceph --conf=/var/lib/rook/openshift-storage/openshift-storage.config pg dump pgs | awk '{print $1, $23}' | sort -k2 | column -t

3. Зупинка процесу Deep Scrubbing

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

3.1. М’яка зупинка (soft stop)

Рекомендований підхід — зменшити кількість одночасних процесів скрабування (osd_max_scrubs), дозволивши поточним завершитись без запуску нових. Мінімальне значення = 1.

Зменшення значення Max Scrubs
ceph config --conf=/var/lib/rook/openshift-storage/openshift-storage.config set osd osd_max_scrubs 1

3.2. Примусова зупинка (force stop)

У разі критичної потреби зупинити процес deep scrubbing негайно — наприклад, через деградацію продуктивності або блокування IO — допускається перезапуск OSD, на яких знаходяться PG у статусі scrubbing+deep. Цей метод є жорстким втручанням і повинен використовуватися лише у виняткових випадках.

  1. Визначте PG, для яких виконується deep scrubbing.

    ceph pg --conf=/var/lib/rook/openshift-storage/openshift-storage.config dump pgs | grep -E 'scrub|deep'
    Приклад результату у виводі команди

    19.11 554 0 0 0 0 72797490 0 0 854 854 active+clean+scrubbing+deep 2025-04-03T07:03:00.295292+0000 2326'7347 2326:18658 [0,2,1] 0 [0,2,1] 0 2263'7328 2025-04-03T07:03:00.295251+0000 2136'4471 2025-03-31T07:38:49.421946+0000 0

    Таблиця 1. Пояснення ключових полів у виводі команди ceph pg dump pgs
    Значення поля Опис

    19.11

    PG ID — унікальний ідентифікатор Placement Group у форматі pool_id.pg_num.

    active+clean+scrubbing+deep

    Статус PG — вказує, що PG активна, цілісна (clean) і наразі перебуває в процесі глибокого скрабування (scrubbing+deep).

    [0,2,1]

    Acting Set — список OSD, які обслуговують дану PG. Перший у списку — це primary OSD.

    0

    Primary OSD index — позиція в Acting Set, яка визначає, який саме OSD є primary. Наприклад, якщо Acting Set — [0,2,1] і індекс — 0, то primary — це OSD 0.

    2025-04-03T07:03:00.295251+0000

    deep_scrub_stamp — дата та час останнього виконання deep scrubbing для PG.

  2. Видаліть відповідний pod OSD через OpenShift UI або CLI.

    oc delete pod rook-ceph-osd-0-example -n openshift-storage
Перезапуск pod призведе до зупинки поточних скрабінг-процесів на відповідному OSD та ініціює recovery/rebalancing PG. Використовуйте лише за відсутності альтернатив.