Настройка CephFS для распределённой файловой системы под ключ

Когда сотни серверов одновременно работают с общими файлами, а стандартные блочные хранилища не справляются с нагрузкой, нужна распределённая файловая система с мгновенной консистентностью данных. Мы настраиваем CephFS под ключ — от развёртывания MDS до интеграции с Kubernetes и мониторинга. Наша команда берёт на себя весь цикл работ, обеспечивая стабильную работу и последующую поддержку вашего хранилища.
Часто задаваемые вопросы

Развёртывание 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: 100Gi

CSI-драйвер создаёт 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 = 60

Multi-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+ лет опыта помогут реализовать отказоустойчивое хранилище с гарантией.

Наши компетенции:

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1393
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1368
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    815
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1139