Налаштування 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