Настройка кластера Ceph на Ubuntu: OSD, CephFS, S3 и Dashboard
Ceph — распределённое программно-определяемое хранилище: объектное (S3), блочное (RBD) и файловое (CephFS). В этой инструкции — сборка кластера из трёх серверов через cephadm, веб-Dashboard, Erasure Coding, CephFS и доступ по S3 с проксированием через NGINX.
Работаем на Ubuntu 24.04; большинство команд подойдут и для Debian.
Требования к инфраструктуре
1. Диски
lsblk
Для OSD выделяется диск целиком — без разделов и файловых систем.
2. Docker
Актуальный метод развёртывания — контейнеры через cephadm, поэтому Docker будет установлен и настроен.
3. Роли серверов
В продакшене роли управления, мониторинга и хранения разносят по узлам; для кворума нужно минимум 3 сервера. В примере — 3 сервера со всеми ролями.
Предварительная настройка
1. Установка lvm2
apt update
apt install lvm2
2. Очистка диска
lsblk
Для каждого диска под кластер:
wipefs -a /dev/sdX
Меняйте X на букву вашего диска. Команда удаляет сигнатуры ФС, RAID и таблиц разделов — не перепутайте диск, данные будут потеряны.
Установка и настройка Docker
apt install docker.io
mkdir -p /etc/docker
vi /etc/docker/daemon.json
{
"storage-driver": "overlay2",
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"default-ulimits": {
"nofile": {
"Name": "nofile",
"Hard": 262144,
"Soft": 262144
}
},
"default-address-pools": [
{
"base": "172.17.0.0/16",
"size": 24
}
]
}
Задаём лимиты nofile и пул адресов для контейнеров: диапазон 172.17.0.0/16, маска 24 (по умолчанию 16 — слишком много).
systemctl restart docker
Сборка кластера
Пример: три сервера.
ceph01(192.168.1.201) — mon + osd;ceph02(192.168.1.202) — mon + osd;ceph03(192.168.1.203) — mon + osd.
Роль монитора и датастора объединены; в больших средах роли разделяют.
Инициализация монитора
На одной ноде (192.168.1.201):
apt install cephadm
cephadm — оркестратор управления жизненным циклом кластера; ставится на любой узел сети, не обязательно на ноду кластера.
cephadm bootstrap --mon-ip 192.168.1.201
Создаёт одноузловой кластер с указанным mon-ip.
Ceph Dashboard is now available at:
URL: https://ceph01:8443/
User: admin
Password: 99b5bho4uw
...
You can access the Ceph CLI as following ...:
sudo /usr/sbin/cephadm shell --fsid 3668ff92-... -c /etc/ceph/ceph.conf -k /etc/ceph/ceph.client.admin.keyring
Зафиксируйте логин/пароль Dashboard и команду подключения.
Создаём алиас:
echo 'alias cs="/usr/sbin/cephadm shell --fsid 3668ff92-cb6b-11f0-a214-00155d016513 -c /etc/ceph/ceph.conf -k /etc/ceph/ceph.client.admin.keyring"' >> ~/.bashrc
source ~/.bashrc
cs — сокращение для подключения к управляющему контейнеру.
cs
ceph -s
ceph orch host ls
HOST ADDR LABELS STATUS
ceph01 192.168.1.201 _admin
1 hosts in cluster
Один хост ceph01 с лейблом _admin.
ceph orch host label add ceph01 mon
ceph orch host ls
Лейблы — только для удобства; реальная роль от них не зависит.
exit
Добавление серверов
Читаем публичный ключ кластера:
cs -- ceph cephadm get-pub-key 2>/dev/null
ssh-rsa AAAAB3NzaC...0155d016513
На каждой добавляемой ноде добавляем ключ в /root/.ssh/authorized_keys:
vi /root/.ssh/authorized_keys
Возвращаемся на управляющий узел:
cs
ceph orch host add ceph02 192.168.1.202
ceph orch host add ceph03 192.168.1.203
ceph orch host label add ceph01 osd1
ceph orch host label add ceph02 osd2
ceph orch host label add ceph03 osd3
ceph orch host ls
Добавление дисков
Планируем использовать /dev/sdb и /dev/sdc на каждой ноде.
ceph osd tree
Пока пусто — диски не добавлены.
ceph orch daemon add osd ceph01:/dev/sdb
ceph orch daemon add osd ceph01:/dev/sdc
ceph orch daemon add osd ceph02:/dev/sdb
ceph orch daemon add osd ceph02:/dev/sdc
ceph orch daemon add osd ceph03:/dev/sdb
ceph orch daemon add osd ceph03:/dev/sdc
ceph osd tree
ceph -s
ceph df
ceph health detail
HEALTH_OK
Кластер собран и готов к работе.
Erasure Coding
Erasure Coding разбивает файл на фрагменты, добавляет избыточные данные и распределяет их по узлам. По умолчанию пулы Replicated требуют больше дисков: 3 диска по 1 Тб → 1 Тб полезного пространства. Схема 2+1 даёт 2 Тб.
Минус: больше нагрузки на CPU и RAM.
cs
ceph osd erasure-code-profile set myprofile k=2 m=1 crush-failure-domain=host
где:
myprofile— имя профиля;k=2— 2 фрагмента данных;m=1— 1 избыточный фрагмент;crush-failure-domain=host— фрагменты не будут лежать на одном хосте.
ceph osd pool create ec_data_pool erasure myprofile
Создан пул ec_data_pool.
Пулы Erasure по умолчанию поддерживают только полную запись объектов (S3/RGW). Для RBD и CephFS разрешаем частичную запись:
ceph osd pool set ec_data_pool allow_ec_overwrites true
ceph df
Ceph Web Dashboard
Панель работает сразу после cephadm bootstrap; данные подключения показаны в его выводе.
Сброс пароля:
cs
echo "my_strong_password" > /tmp/pwd
ceph dashboard ac-user-set-password admin -i /tmp/pwd
rm -f /tmp/pwd
Вход: https://<IP-адрес>:8443/.
CephFS
Порядок: развернуть MDS → создать пулы → создать файловую систему → примонтировать на клиенте.
Создание файловой системы
cs
ceph orch ps | grep mds
Пусто — сервис метаданных ещё не создан.
ceph orch apply mds my_data --placement="ceph01 ceph02 ceph03"
где my_data — имя сервиса метаданных, ceph01 ceph02 ceph03 — узлы.
ceph orch ps | grep mds
mds.my_data.ceph01.ajvdrs ceph01 running (50s) 42s ago 50s 16.5M - 16.2.15 ...
mds.my_data.ceph02.xcxqmz ceph02 running (49s) 43s ago 49s 12.0M - 16.2.15 ...
mds.my_data.ceph03.bjkjux ceph03 running (48s) 43s ago 48s 16.6M - 16.2.15 ...
ceph osd pool create cephfs_my_data 64
ceph osd pool create cephfs_my_metadata 64
ceph fs new my_data cephfs_my_metadata cephfs_my_data
ceph fs ls
где 64 — количество групп размещения (PG), my_data — имя CephFS.
Подключение на клиенте
apt install ceph-common
На сервере Ceph читаем:
cat /etc/ceph/ceph.client.admin.keyring
cat /etc/ceph/ceph.conf
На клиенте создаём файлы с этим содержимым:
vi /etc/ceph/ceph.keyring
vi /etc/ceph/ceph.conf
vi /etc/ceph/admin.secret
В admin.secret — только значение после key = из ceph.client.admin.keyring.
mkdir -p /mnt/cephfs
mount -t ceph 192.168.1.201:6789,192.168.1.202:6789,192.168.1.203:6789:/ /mnt/cephfs -o name=admin,secretfile=/etc/ceph/admin.secret,fs=my_data
Автомонтирование — в /etc/fstab:
192.168.1.201:6789,192.168.1.202:6789,192.168.1.203:6789:/ /mnt/cephfs ceph name=admin,secretfile=/etc/ceph/admin.secret,fs=my_data,_netdev 0 0
Доступ по S3 (RADOS Gateway)
apt install radosgw
На узлах-шлюзах задаём имя:
RGWDN=s3.imaxis.ru
Добавляем в /etc/ceph/ceph.conf:
cat >> /etc/ceph/ceph.conf <<EOF
[client.radosgw.gateway]
host = `hostname -f`
keyring = /etc/ceph/keyring.radosgw.gateway
rgw socket path = /var/run/ceph/ceph.radosgw.gateway.fastcgi.sock
log file = /var/log/ceph/client.radosgw.gateway.log
rgw dns name = ${RGWDN}
rgw frontends = "fastcgi socket=/var/run/ceph/ceph.radosgw.gateway.fastcgi.sock port=7480"
EOF
cs
ceph auth get-or-create client.radosgw.gateway mon 'allow rw' osd 'allow *' -o /etc/ceph/keyring.radosgw.gateway
chown root:ceph /etc/ceph/keyring.radosgw.gateway
chmod 640 /etc/ceph/keyring.radosgw.gateway
ceph orch host ls
Копируем keyring на остальные узлы S3:
scp /etc/ceph/keyring.radosgw.gateway 192.168.1.202:/etc/ceph/keyring.radosgw.gateway
scp /etc/ceph/keyring.radosgw.gateway 192.168.1.203:/etc/ceph/keyring.radosgw.gateway
Разворачиваем RGW:
ceph orch apply rgw gwfors3 --placement="ceph01 ceph02 ceph03"
ceph orch ps
rgw.gwfors3.ceph01.uwjhqi ... *:80 running (86s) ...
Создаём пользователя S3:
radosgw-admin user create --uid="s3user" --display-name="User For S3"
"keys": [
{
"user": "s3user",
"access_key": "43T4A41OQCODJZD7IK7M",
"secret_key": "errOM3viKUXQng8DyvOnAggZIXkgUUSrwruX8NwV"
}
],
Зафиксируйте access_key и secret_key.
radosgw-admin bucket list
Бакет удобнее создавать через сторонний S3-клиент (например, s3cmd или aws-cli) — встроенной утилиты для этого нет.
NGINX-прокси для S3
Для отказоустойчивости ставим NGINX перед узлами RGW:
upstream ceph {
server 192.168.1.201:80;
server 192.168.1.202:80;
server 192.168.1.203:80;
}
server {
listen 80;
server_name s3.imaxis.ru;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name s3.imaxis.ru;
ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/cert.key;
location / {
proxy_pass http://ceph;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 600s;
proxy_send_timeout 600s;
proxy_read_timeout 600s;
client_max_body_size 0;
}
}
client_max_body_size 0 — без ограничения размера загружаемых объектов.
nginx -t && nginx -s reload
Добавление нового сервера
lsblk
wipefs -a /dev/sdX
apt install docker.io
mkdir -p /etc/docker
vi /etc/docker/daemon.json
Содержимое daemon.json — как выше.
systemctl restart docker
На управляющем сервере:
cs -- ceph cephadm get-pub-key 2>/dev/null
Копируем ключ в /root/.ssh/authorized_keys на новой ноде, затем:
cs
ceph orch host add ceph04 192.168.1.204
ceph orch host label add ceph04 osd4
ceph orch daemon add osd ceph04:/dev/sdb
ceph orch daemon add osd ceph04:/dev/sdc
Тонкости и подводные камни
wipefs -aнеобратима — перепроверяйте букву диска.- Кворум MON — минимум 3 монитора для отказоустойчивости.
- Replicated vs Erasure — EC экономит место, но требует CPU/RAM и
allow_ec_overwritesдля RBD/CephFS. cephadm shell— большинство команд выполняются внутри контейнера через алиасcs.- Dashboard 8443 — не забудьте сертификат и ограничение доступа.
- CephFS secret — в
admin.secretтолько значение послеkey =. - S3 доступ —
access_key/secret_keyпоказываются один раз; храните их. - RGW fastcgi — в новых версиях Ceph больше используется
beastfrontend; сверяйтесь с версией. - NGINX и S3 — обязателен проброс
Host, иначе имя бакета в поддомене не распознается.
Шпаргалка
apt install lvm2 docker.io cephadm
wipefs -a /dev/sdb
cephadm bootstrap --mon-ip 192.168.1.201
# alias cs -> cephadm shell ...
ceph orch host add ceph02 192.168.1.202
ceph orch daemon add osd ceph01:/dev/sdb
ceph osd erasure-code-profile set myprofile k=2 m=1 crush-failure-domain=host
ceph fs new my_data cephfs_my_metadata cephfs_my_data
ceph orch apply rgw gwfors3 --placement="ceph01 ceph02 ceph03"
radosgw-admin user create --uid="s3user" --display-name="User For S3"
Проверено на: Ubuntu 24.04 + Ceph (cephadm, Reef/Squid).
Дата: Сентябрь 2026.