Развёртывание CephFS для распределённой файловой системы
Представьте: сотня серверов одновременно пишет и читает файлы с единого хранилища, а консистентность данных — мгновенная. RBD тут не подходит: он даёт блочное устройство только одному клиенту. Нужна POSIX-файловая система поверх Ceph, и она существует — CephFS. В этой статье — наш опыт развёртывания CephFS под ключ: от настройки MDS до интеграции с Kubernetes и мониторинга. За 5+ лет мы выполнили 30+ проектов, и 70% клиентов выбирают CephFS для shared storage.
Типичные сценарии: shared storage для Kubernetes (ReadWriteMany PVC), общее хранилище для CI/CD runner-кэшей, медиа-активы для нескольких серверов приложений, Home-директории пользователей на сотнях хостов. У каждого сценария — свои требования к квотам, производительности и отказоустойчивости.
Как устроена файловая система CephFS и почему это важно для консистентности?
CephFS требует MDS (MetaData Server) — сервис, управляющий метаданными (директории, права, inode). Данные файлов хранятся в RADOS, только метаданные проходят через MDS. Активный MDS обрабатывает запросы, standby ждёт отказа. Для продакшена минимум 1 активный + 1 standby.
# Разворачиваем MDS через cephadm ceph orch apply mds cephfs --placement="3 ceph-node1 ceph-node2 ceph-node3" ceph fs volume create cephfs создаёт пулы для данных и метаданных и запускает MDS одной командой. Но важна деталь: пул метаданных должен быть на самых быстрых дисках. MDS кэширует метаданные в RAM, но при cache miss обращается к пулу. Медленный пул метаданных = медленный ls в директории с тысячами файлов. Используйте device class для размещения на NVMe: ceph osd pool set cephfs_metadata crush_rule nvme_replicated.
Практика развёртывания: от ручного создания пулов до автоматизации
Если нужен полный контроль над параметрами пулов, создаём вручную:
# Пул для метаданных — небольшой, критичен по производительности
ceph osd pool create cephfs_metadata 32 32
ceph osd pool set cephfs_metadata size 3
ceph osd pool set cephfs_metadata pg_autoscale_mode on
# Пул для данных — основной объём
ceph osd pool create cephfs_data 0 0 replicated
ceph osd pool set cephfs_data size 3
ceph osd pool set cephfs_data pg_autoscale_mode on
# Создаём файловую систему
ceph fs new cephfs cephfs_metadata cephfs_data
Для автоматизации используем Ansible или Terraform. После создания — монтирование на клиентах. Ядерный клиент (быстрее): в /etc/fstab укажите MON-адреса и секрет. Для контролируемого доступа создайте минимально привилегированного пользователя:
ceph auth get-or-create client.cephfs-ro mon 'allow r' mds 'allow r' osd 'allow r pool=cephfs_data' -o /etc/ceph/ceph.client.cephfs-ro.keyring Что входит в работу?
В рамках развёртывания CephFS под ключ мы предоставляем:
- Аудит текущей инфраструктуры и проектирование кластера
- Развёртывание MDS с multi-active по необходимости
- Настройку пулов данных и метаданных с учётом device class
- Интеграцию с Kubernetes через ceph-csi-cephfs (ReadWriteMany PVC)
- Создание subvolumes и квот для проектов
- Tuning производительности MDS и пула метаданных
- Мониторинг через Prometheus/Grafana с готовыми дашбордами и алертами
- Документацию и обучение команды
- Техническую поддержку на старте
Как интегрировать CephFS с Kubernetes? ReadWriteMany PVC через ceph-csi-cephfs
Для ReadWriteMany PVC используем ceph-csi-cephfs. Helm-чарт создаёт StorageClass, секрет и CSI-драйвер. PVC с accessModes: ReadWriteMany — то, что невозможно с RBD:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: shared-cache
spec:
accessModes:
- ReadWriteMany
storageClassName: ceph-cephfs
resources:
requests:
storage: 100GiCSI-драйвер создаёт subvolume — изолированное пространство с квотой.
Subvolumes и квоты: изоляция проектов и контроль ресурсов
CephFS поддерживает квоты на уровне директорий. Для изолированных проектов удобны subvolumes:
# Создаём subvolumegroup
ceph fs subvolumegroup create cephfs kubernetes
# Subvolume с квотой
ceph fs subvolume create cephfs pvc-build-cache kubernetes --size 50GiBКвоты работают через атрибуты ceph.quota.max_bytes и ceph.quota.max_files. Для Kubernetes PVC квоты настраиваются в StorageClass через параметры.
Производительность и tuning MDS: как избежать узких мест
Настройка кэша MDS критична при большом количестве файлов. Типичный конфиг для workload с мелкими файлами:
[mds]
mds_cache_memory_limit = 8589934592 # 8 GB
mds_log_max_segments = 128
mds_tick_interval = 5
mds_dir_max_commit_size = 10485760 # 10 MB
mds_session_timeout = 60Multi-active MDS (2 и более) разделяет пространство имён по директориям — помогает при hot-spots, но не линейно масштабирует производительность. Важно следить за latency: ceph_mds_request_latency_sum — если >100 мс, нужно расширять MDS или оптимизировать пул метаданных.
Мониторинг CephFS: ключевые метрики и дашборды
Для продуктивной эксплуатации используем Prometheus + Grafana. Основные метрики:
| Метрика | Описание | Порог срабатывания |
|---|---|---|
| ceph_mds_request_latency_sum | Латенция операций с метаданными | >100 мс |
| ceph_mds_server_handle_client_request | Количество запросов в секунду | >10000 req/s |
| ceph_pool_used_bytes | Занятое место в пуле данных | <80% ёмкости |
Настраиваем алерты в Alertmanager, создаём дашборды с SLO/SLI.
Типичные проблемы и их решение (postmortem)
-
df -hпоказывает неверное свободное место? CephFS отдаёт общую ёмкость кластера. Используйте атрибутыceph.dir.rbytesс квотами. - NFS-клиент не видит изменения? Отключите кэш директорий
dcache_timeout=0при монтировании, но учтите снижение производительности на 15-20%. - MDS не переключается на standby? Проверьте
ceph health detail— часто проблема в недоступности MON для standby.
Ориентировочные сроки и стоимость
| Сценарий | Сроки |
|---|---|
| CephFS на существующем кластере (MDS, пулы, клиенты) | 2–3 дня |
| + Kubernetes CSI, subvolumes, квоты | 3–5 дней |
| + Multi-active MDS, tuning, мониторинг | 5–7 дней |
Стоимость рассчитывается индивидуально после аудита. Свяжитесь с нами — получите консультацию и оценку проекта. Закажите развёртывание CephFS под ключ для вашей инфраструктуры. Наши инженеры с 5+ лет опыта помогут реализовать отказоустойчивое хранилище с гарантией.







