Ceph: распределённое хранилище для серьёзной корпоративной инфраструктуры
Семёнов Евгений Сергеевич, директор АйТи Фреш. Ceph — единственная система хранения, которая одновременно даёт блочный, файловый и объектный доступ, масштабируется до петабайтов и при этом бесплатна. У меня на практике три собственных кластера в дата-центре МТС Москва: один для клиентских виртуальных машин (RBD), второй под CephFS для инженерных файловых шар, третий под S3-совместимый RGW для бэкапов. За пять лет эксплуатации — ни одной потери данных, и я готов делиться опытом развёртывания.
Архитектура Ceph — ключевые компоненты
| Компонент | Роль | Сколько нужно |
|---|---|---|
| MON (Monitor) | Хранит карту кластера, консенсус через Paxos | 3 или 5 (нечётное) |
| MGR (Manager) | Dashboard, метрики, оркестрация | 2 (active + standby) |
| OSD (Object Storage Daemon) | Хранит данные, один на физический диск | От 6 (по 2 на ноду × 3) |
| MDS (Metadata Server) | Для CephFS | 2+ (active + standby) |
| RGW (RADOS Gateway) | S3/Swift-совместимый API | 2+ за балансировщиком |
Принцип работы: данные делятся на объекты, объекты раскидываются по PG (Placement Groups), PG распределяются по OSD согласно CRUSH-карте. Клиент обращается к MON за актуальной картой и дальше работает напрямую с OSD — нет центрального прокси, нет узкого места.
Подбор железа
Это самый важный этап. Ceph неприхотлив к топологии, но жёсткий к дискам и сети.
- Ноды. Минимум 5 однотипных серверов — так проще балансировать и обслуживать. У меня в основном кластере стоят 5 × Dell Xeon Platinum 8280 с 384 ГБ RAM.
- Диски OSD. Enterprise-NVMe (Intel D7, Samsung PM9A3) или гибрид NVMe+HDD с BlueStore WAL/DB на NVMe.
- Сеть. 2 × 40G Mellanox на ноде (бонд LACP), отдельные VLAN для public и cluster.
- RAM. 1 ГБ на каждый ТБ OSD минимум, рекомендую 2 ГБ.
- CPU. 1-2 ядра на OSD; для NVMe OSD — 2-4 ядра на диск.
Подготовка нод
# На каждой ноде (Debian 12 или Rocky 9)
apt install -y podman lvm2 chrony
# Настройка времени (критично для MON-консенсуса)
systemctl enable --now chrony
# Настройка /etc/hosts (если нет DNS)
cat >> /etc/hosts << 'EOF'
10.10.10.11 ceph01
10.10.10.12 ceph02
10.10.10.13 ceph03
10.10.10.14 ceph04
10.10.10.15 ceph05
EOF
# Отключаем swap (важно для OSD)
swapoff -a
sed -i 's|^/swap|#/swap|' /etc/fstab
# Тюнинг sysctl
cat >> /etc/sysctl.d/99-ceph.conf << 'EOF'
kernel.pid_max = 4194303
fs.file-max = 26234859
vm.swappiness = 1
net.ipv4.tcp_rmem = 4096 87380 33554432
net.ipv4.tcp_wmem = 4096 65536 33554432
EOF
sysctl --system
Развёртывание через cephadm
cephadm — современный способ развёртывания через контейнеры. Ставим на первую ноду:
# Bootstrap на ceph01
apt install -y cephadm
cephadm bootstrap --mon-ip 10.10.10.11 \
--cluster-network 10.20.20.0/24 \
--initial-dashboard-user admin \
--initial-dashboard-password TempPass123
# Вывод — адрес дашборда, пароль, cephadm shell alias
cephadm install ceph-common
ceph -s # HEALTH_WARN пока нет OSD — нормально
Добавляем остальные ноды в оркестратор:
# SSH-ключ cephadm-а раздаём на все хосты
ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph02
ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph03
# ... и так далее
# Добавляем ноды
ceph orch host add ceph02 10.10.10.12
ceph orch host add ceph03 10.10.10.13
ceph orch host add ceph04 10.10.10.14
ceph orch host add ceph05 10.10.10.15
# Проверка
ceph orch host ls
Разворачиваем MON и MGR
# 5 MON с меткой для автопривязки
ceph orch apply mon --placement="5 ceph01 ceph02 ceph03 ceph04 ceph05"
ceph orch apply mgr --placement="2 ceph01 ceph02"
ceph -s
# Должно стать mons: 5 daemons, mgrs: 2 daemons
Добавляем OSD
cephadm сам найдёт неиспользованные диски:
# Посмотреть доступные диски
ceph orch device ls
# Добавить все подходящие автоматически
ceph orch apply osd --all-available-devices
# Или вручную по конкретным дискам
ceph orch daemon add osd ceph01:/dev/nvme0n1
ceph orch daemon add osd ceph01:/dev/nvme1n1
ceph orch daemon add osd ceph02:/dev/nvme0n1
# ...
# Статус
ceph osd tree
ceph df
Пулы и replication
# Replication pool size=3, min_size=2
ceph osd pool create vms 128 128 replicated
ceph osd pool set vms size 3
ceph osd pool set vms min_size 2
rbd pool init vms
# EC pool 4+2 (для холодных данных/бэкапов)
ceph osd erasure-code-profile set ec42 \
k=4 m=2 crush-failure-domain=host
ceph osd pool create cold_backup 128 128 erasure ec42
ceph osd pool set cold_backup allow_ec_overwrites true
RBD — блочное хранилище для гипервизоров
# Создание образа
rbd create --size 100G vms/vm-web01
rbd info vms/vm-web01
# Маппинг на клиенте (Linux)
rbd map vms/vm-web01 --name client.admin
mkfs.xfs /dev/rbd0
mount /dev/rbd0 /mnt/data
# В Proxmox Datacenter -> Storage -> Add -> RBD
# Указываем ID, Pool, Monitor Host, keyring
CephFS — файловая система
# Два пула — под метаданные и данные
ceph osd pool create cephfs_data 64 64
ceph osd pool create cephfs_metadata 32 32
ceph fs new officefs cephfs_metadata cephfs_data
# Разворачиваем MDS
ceph orch apply mds officefs --placement="2 ceph01 ceph02"
# Клиент (Linux)
mount -t ceph 10.10.10.11:6789:/ /mnt/officefs \
-o name=admin,secretfile=/etc/ceph/admin.key
RGW — S3-совместимый API
# Развёртывание RGW
ceph orch apply rgw default --placement="2 ceph03 ceph04"
# Создание пользователя
radosgw-admin user create --uid=backup --display-name="Backup User"
# Сохраняем access_key и secret_key
# Проверка с AWS CLI
aws --endpoint-url http://ceph03:7480 s3 mb s3://bareos-daily
aws --endpoint-url http://ceph03:7480 s3 ls
Реальный кейс: 5-нодовый кластер на 120 ТБ
В июне 2024 запускали кластер для клиента — ИТ-интегратор с собственным облаком. Задача: 120 ТБ usable storage под VMware/Proxmox, S3 для бэкапов собственных клиентов, CephFS для файловой шары разработчиков. SLA — 99.95%, RTO после сбоя одной ноды — не более 30 минут.
Железо — 5 серверов Dell PowerEdge R750 с 10 × 15.36 ТБ NVMe Intel D7, 2 × 40G Mellanox, 384 ГБ RAM. Сеть — выделенные MLAG-свитчи Mellanox SN2410. Размещение в нашем дата-центре МТС Москва, дизель + батареи на 6 часов автономии.
Развёртывание заняло 4 рабочих дня, настройка pool-ов и клиентских шлюзов — ещё 3 дня. Финальная конфигурация:
- Replication pool size=3 для горячих VM-образов — 40 ТБ usable.
- EC 4+2 для бэкапов и холодных данных — 60 ТБ usable.
- CephFS с двумя активными MDS — 20 ТБ для разработчиков.
- RGW за HAProxy, балансирование на 2 инстанса.
Стоимость работ по развёртыванию и интеграции — 420 000 руб. Через три месяца упал один SSD на ноде ceph03 — 45 минут, recovery прошёл автоматически без простоя сервисов. Клиент сейчас использует ёмкость на 68%, продолжаем сопровождение.
Мониторинг и алерты
# Встроенный dashboard
ceph dashboard set-login-credentials admin StrongPass
# Открываем https://ceph01:8443
# Prometheus-модуль
ceph mgr module enable prometheus
# На :9283 метрики, цепляем внешний Prometheus
# Ключевые метрики для алертов
ceph_health_status # 0=OK, 1=WARN, 2=ERR
ceph_osd_up / ceph_osd_in
ceph_pg_active # Должно совпадать с ceph_pg_total
ceph_cluster_total_used_bytes / ceph_cluster_total_bytes
Эксплуатационные правила
- Никогда не запускайте кластер с size=2/min_size=1 в проде — split-brain неизбежен.
- Не занимайте больше 75% ёмкости — после 80% начинается деградация производительности.
- PG count на pool по формуле: (OSDs × 100) / replication_size, округляем до степени 2.
- NTP обязателен: MON-консенсус критичен к skew больше 50 мс.
- Балансировщик: включайте ceph balancer для равномерного распределения PG.
- Бэкап MON-карты:
ceph mon getmap -o monmap.binраз в сутки в отдельное место.
Спроектируем и развернём Ceph под ваши задачи
От подбора железа и сетевой топологии до боевой эксплуатации. У нас свои 8 серверов Dell Xeon Platinum 8280 с 40G Mellanox в дата-центре МТС Москва — можем разместить ваш кластер или сдать мощности в аренду. Проект от 350 000 руб., сопровождение от 45 000 руб./мес. Бесплатная оценка совместимости текущего железа за 1 день.
Телефон: +7 903 729-62-41
Telegram: @ITfresh_Boss
Семёнов Евгений Сергеевич, директор АйТи Фреш
FAQ — частые вопросы о Ceph
- Сколько минимум нод нужно для продакшн Ceph?
- Три ноды — минимум для replication size=3. Для production с erasure coding рекомендую пять нод.
- Какую сеть закладывать под Ceph?
- Минимум 10 GbE, рекомендовано 25-40 GbE для кластерной сети. Боевые кластеры работают на 40G Mellanox — комфортный запас под recovery.
- Replication vs Erasure Coding — что выбрать?
- Replication (size=3) — быстрее, проще в эксплуатации, но 33% usable. EC 4+2 даёт 66% usable, но медленнее на random write. Для горячих данных — replication, для холодных — EC.
- Какие диски ставить под OSD?
- Enterprise-класс с Power Loss Protection. Идеально — NVMe Intel/Samsung DC-серии. Консьюмерские SSD под Ceph НЕ ставить.
- Как подключить Ceph к Proxmox или OpenStack?
- Proxmox имеет встроенную интеграцию RBD. OpenStack — через cinder-volume с RBD backend. VMware — через iSCSI-шлюз.