Ceph: использование и эксплуатация [363.2, часть 2]

Рейтинг: 64.6% · 7 голосов
Специализация LPIC-3 306 (v3.0): кластеры HA (Pacemaker/Corosync), балансировка (LVS, keepalived, HAProxy), DRBD, кластерные и распределённые ФС (GFS2, OCFS2, GlusterFS, Ceph), iSCSI/multipath, advanced RAID/LVM.
Ответить
Аватара пользователя
Sergey_Sysadmin
Сообщения: 134
Зарегистрирован: 11 май 2026, 05:31

Ceph: использование и эксплуатация [363.2, часть 2]

Сообщение Sergey_Sysadmin »

Оглавление курса (14)
  1. Введение в LPIC-3 306: высокая доступность и хранилища
  2. Концепции и теория высокой доступности [361.1]
  3. Кластеры с балансировкой нагрузки [361.2]
  4. Failover-кластеры: Corosync и Pacemaker [361.3, часть 1]
  5. Pacemaker: ресурсы, ограничения, fencing [361.3, часть 2]
  6. DRBD [362.1]
  7. Доступ к кластерному хранилищу [362.2]
  8. Кластерные файловые системы [362.3]
  9. Распределённое хранилище GlusterFS [363.1]
  10. Ceph: архитектура [363.2, часть 1]
  11. Ceph: использование и эксплуатация [363.2, часть 2] (вы здесь)
  12. Отказоустойчивость узла: железо и сервисы [364.1]
  13. Продвинутый RAID
  14. Продвинутый LVM и сетевая отказоустойчивость [364.3 + 364.4]
Урок 10. Ceph: использование и эксплуатация [363.2, часть 2]

В прошлой части вы собрали кластер и поняли, что снизу всё держится на RADOS - объектном хранилище с OSD, мониторами и алгоритмом CRUSH. Теперь задача администратора - выдать это хранилище потребителям в привычном им виде и научиться кластер обслуживать. В этом уроке разберём три интерфейса доступа: RBD (блочные устройства для виртуалок и баз), CephFS (POSIX файловая система с метаданными) и RADOS Gateway (S3 и Swift поверх RADOS). Дальше - как cephadm разворачивает и масштабирует кластер контейнерами, как добавить OSD на новый диск, как читать ceph status и health, и как работают балансировка размещения и восстановление после потери диска. Актуально на лето 2026: текущий стабильный релиз - Tentacle (20.x), предыдущий - Squid (19.x), оба ставятся через cephadm на systemd и контейнеры (podman или docker).

Изображение

Как это работает

RADOS хранит объекты, но приложениям нужны блоки, файлы и бакеты. Поэтому над RADOS живут три библиотеки-трансляторы, и все три по сути нарезают данные на объекты внутри пулов.

RBD режет виртуальный диск на куски (по умолчанию 4 МБ) и раскладывает их объектами по PG, которые CRUSH распределяет по OSD. Образ - это просто набор объектов плюс заголовок. Снапшоты и клоны делаются через copy-on-write: клон ссылается на родителя и пишет только изменённые объекты. Отсюда мгновенное создание тысячи виртуалок из одного золотого образа.

CephFS добавляет к данным слой метаданных. Содержимое файлов лежит в пуле данных как объекты, а дерево каталогов, права и имена обслуживает отдельный демон MDS, который держит горячие метаданные в памяти и журналирует их в свой пул. MDS может масштабироваться: несколько активных демонов делят дерево на поддеревья. Клиент монтирует ФС родным модулем ядра или через FUSE и держит capabilities - что-то вроде распределённых блокировок на чтение и запись.

RADOS Gateway (RGW, демон radosgw) - это HTTP-сервер, говорящий на диалектах S3 и Swift. Он раскладывает пользователей, бакеты и объекты по служебным пулам, а большие объекты бьёт на части. Поверх можно строить мультисайт - асинхронную репликацию бакетов между географически разнесёнными зонами.

Связывает всё cephadm. Это менеджер-оркестратор внутри демона MGR: он по SSH ходит на хосты, тянет образ контейнера и поднимает каждый демон как отдельный systemd-юнит. Вы описываете желаемое состояние через сервис-спеки, а cephadm приводит кластер к нему. Это и есть современный путь развёртывания в 2026 - ручная раскладка через ceph-deploy осталась в прошлом и для экзамена упоминается как легаси.

Команды и примеры

Bootstrap первого узла. Пакет cephadm ставится из репозитория дистрибутива или curl-ом с adddistro:

Код: Выделить всё

# Debian 13 / Ubuntu 24.04
apt install -y cephadm ceph-common

# RHEL 10 / Fedora 41+
dnf install -y cephadm ceph-common

cephadm bootstrap --mon-ip 10.0.0.11
# поднимает MON, MGR, дашборд и выдаёт логин; дальше работаем через ceph orch
Добавление хостов и дисков под OSD:

Код: Выделить всё

ceph orch host add ceph-node2 10.0.0.12
ceph orch device ls                 # какие диски видит оркестратор
ceph orch daemon add osd ceph-node2:/dev/sdb   # один диск явно
ceph orch apply osd --all-available-devices    # забрать все чистые диски автоматом
RBD - создаём пул, образ, мапим как блочное устройство:

Код: Выделить всё

ceph osd pool create rbdpool 128
rbd pool init rbdpool
rbd create rbdpool/disk1 --size 20G
rbd ls -l rbdpool
rbd map rbdpool/disk1            # появится /dev/rbd0
mkfs.ext4 /dev/rbd0 && mount /dev/rbd0 /mnt/vol
rbd snap create rbdpool/disk1@before-upgrade
CephFS - один командой создаём ФС с пулами и MDS, монтируем:

Код: Выделить всё

ceph fs volume create shared      # создаст пулы cephfs.shared.data/.meta и MDS
ceph fs status shared
mount -t ceph admin@.shared=/ /mnt/cephfs -o secret=AQ...   # ядерный клиент
# или: ceph-fuse /mnt/cephfs --client_mds_namespace=shared
RADOS Gateway - разворачиваем сервис и заводим S3-пользователя:

Код: Выделить всё

ceph orch apply rgw mysite --placement="2 ceph-node1 ceph-node2"
radosgw-admin user create --uid=alice --display-name="Alice" \
  --access-key=AKIA... --secret-key=secret...
radosgw-admin bucket list
Мониторинг и обслуживание:

Код: Выделить всё

ceph status                 # сводка: health, мониторы, OSD, PG, ёмкость
ceph health detail          # расшифровка каждого WARN/ERR
ceph osd tree               # дерево CRUSH: какие OSD на каких хостах, веса
ceph osd df                 # заполнение по OSD, перекосы
ceph -w                     # живой поток событий кластера
ceph balancer status        # режим автобалансировки размещения PG
ceph balancer mode upmap    # точечный режим (по умолчанию в Tentacle/Squid)
В выводе ceph status держите в голове три состояния PG: active+clean - всё хорошо; degraded/recovering - идёт восстановление недостающих копий; remapped/backfilling - данные переезжают на новые OSD после изменения карты. HEALTH_WARN сам по себе не авария - это сигнал прочитать health detail.

Частые грабли
  • ceph osd pool create без расчёта PG. Слишком мало PG - перекос заполнения OSD, слишком много - лишняя нагрузка на память и CPU мониторов. В современных релизах включайте autoscaler (ceph osd pool set pool pg_autoscale_mode on) и задавайте target_size, а не подбирайте число руками.
  • rbd map старого образа на свежем ядре падает на feature mismatch. Ядерный клиент не тянет некоторые фичи RBD (например object-map). Либо отключите их при создании, либо мапьте через rbd-nbd или krbd новее.
  • CephFS с одним MDS без standby. Упал активный MDS - ФС встала. Всегда держите хотя бы один standby (ceph orch apply mds shared 2) или standby-replay.
  • nearfull/full. Когда OSD доходит до full_ratio, кластер блокирует запись целиком, а не только на переполненном диске - это защита от потери данных. Реагируйте уже на nearfull, не дожидаясь stop.
  • Убрать OSD выдёргиванием диска. Правильно - ceph orch osd rm с дренажом, чтобы данные ушли заранее. Резкое out на нескольких OSD сразу запускает массовый бэкфилл и может уронить производительность.
  • Дисбаланс из-за разных весов. После добавления диска другого объёма CRUSH-веса разъезжаются. Проверяйте ceph osd df и доверяйте балансировщику в режиме upmap, а не правьте reweight вручную без нужды.
  • Перепутать пулы реплик и erasure coding. EC экономит место, но дороже по CPU и хуже на мелких случайных записях - под базы и RBD чаще берут реплику 3, под холодные бакеты RGW - EC.
Мини-лаба
  • На собранном в прошлом уроке кластере добавьте второй хост через ceph orch host add и заберите его чистый диск под OSD командой ceph orch daemon add osd.
  • Проверьте, что новый OSD виден в ceph osd tree, и понаблюдайте через ceph -w, как кластер ребалансит PG (состояния backfilling/remapped).
  • Создайте пул rbdpool, в нём образ на 10G, смапьте его, сделайте ext4, смонтируйте и запишите файл; затем снимите снапшот rbd snap create.
  • Создайте CephFS через ceph fs volume create, поднимите второй MDS как standby и смонтируйте ФС ядерным клиентом.
  • Разверните RGW через ceph orch apply rgw, заведите S3-пользователя radosgw-admin и проверьте доступ любым S3-клиентом (s3cmd или aws cli с endpoint-url).
  • Сымитируйте отказ: остановите один OSD (ceph orch daemon stop osd.N), посмотрите HEALTH_WARN и ceph health detail, дождитесь recovery, затем верните демон и убедитесь в active+clean.
Контрольные вопросы
  • Чем принципиально отличается путь данных RBD, CephFS и RGW, если все они в итоге пишут объекты в один и тот же RADOS?
  • Зачем CephFS нужен отдельный демон MDS и почему его метаданные хранятся в собственном пуле, а не вместе с данными файлов?
  • Как cephadm понимает, какие демоны должны работать на хостах, и через какой механизм он их запускает на каждом узле?
  • Что показывают состояния PG active+clean, degraded и backfilling, и какое из них означает идущее восстановление, а какое - переезд данных?
  • Почему достижение full_ratio на одном OSD блокирует запись во весь кластер, и как этого избежать заранее?
  • В каких сценариях вы выберете пул с erasure coding, а в каких - реплику 3, и какой ценой даётся экономия места у EC?
👍3 ❤️2 🔥1 😄 🤔3
Аватара пользователя
arch5
Сообщения: 1
Зарегистрирован: 12 май 2026, 08:09

Re: Ceph: использование и эксплуатация [363.2, часть 2]

Сообщение arch5 »

Поднял CephFS через fs volume create, всё ок, но смонтировать ядерным клиентом не дало - feature mismatch на старом ядре стенда. Через ceph-fuse завелось сразу. Это нормально или я что-то накрутил с фичами пула?
👍2 ❤️1 🔥 😄 🤔1
Аватара пользователя
r23jr
Сообщения: 1
Зарегистрирован: 30 май 2026, 17:14

Re: Ceph: использование и эксплуатация [363.2, часть 2]

Сообщение r23jr »

Добавил OSD на диск вдвое больше остальных и заполнение поехало. ceph osd df показал перекос, балансировщик в режиме upmap за ночь выровнял сам, руками reweight трогать не стал - спасибо за предупреждение про это в граблях.
👍2 ❤️ 🔥1 😄 🤔
Ответить
← Предыдущая глава
Ceph: архитектура [363.2, часть 1]
Следующая глава →
Отказоустойчивость узла: железо и сервисы [364.1]

Все главы курса «LPIC-3 306: высокая доступность и хранилища»

Поделиться темой: ✈ Telegram VK

Вернуться в «LPIC-3 306: высокая доступность и хранилища»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей