Установка и создание кластера Ceph на CentOS 7
Ceph — распределённая система хранения для объектов, блоков и файлов. В этом пошаговом руководстве показано, как подготовить 6 узлов CentOS 7, установить ceph-deploy и развернуть кластер с одним монитором и тремя OSD. Включены проверки работоспособности, рекомендации по безопасности и список действий для типичных неисправностей.
Важно: это руководство ориентировано на Ceph Jewel с использованием ceph-deploy на CentOS 7 и предполагает, что у вас есть root-доступ ко всем узлам.
Введение
Ceph — открытая система хранения без единой точки отказа. Она предоставляет интерфейсы для объектного, блочного и файлового доступа. Ключевые компоненты кластера Ceph:
- Ceph OSD (ceph-osd) — отвечает за хранение данных, репликацию и восстановление. Для отказоустойчивости требуется как минимум 2 OSD; в этом примере используется 3 OSD.
- Ceph Monitor (ceph-mon) — хранит состояние кластера, карту OSD и CRUSH-карту.
- Ceph Metadata Server (ceph-mds) — нужен для работы CephFS (если вы планируете монтировать Ceph как файловую систему).
Кратко о топологии, используемой в примере:
hostname IP address
ceph-admin 10.0.15.10 mon1 10.0.15.11 osd1 10.0.15.21 osd2 10.0.15.22 osd3 10.0.15.23 client 10.0.15.15
Все узлы используют CentOS 7. Каждый OSD-узел должен иметь две раздела: один root (/) и один пустой раздел, который будет использован под хранилище Ceph.

Что нужно знать перед началом
Определения в одну строку:
- OSD — демон для работы с дисками и репликации данных.
- Monitor — согласует состояние кластера и хранит критические метаданные.
- ceph-deploy — утилита для автоматизации базовой установки Ceph (подходит для лабораторных и небольших установок).
Рекомендации:
- Делайте резервные копии важных данных перед использованием zap/format.
- Тестируйте все команды в контролируемой среде (виртуалки или тестовые сервера) перед применением в проде.
Содержание руководства
- Подготовка узлов — пользователи, NTP, SELinux, hosts
- Конфигурация SSH для безпарольного доступа
- Настройка Firewalld (порты для ceph-mon и ceph-osd)
- Подготовка дисков OSD (XFS)
- Установка Ceph и развертывание кластера
- Тестирование и базовая проверка состояния
- Критерии приёмки, чек-листы и процедуры
- Безопасность, резервирование и отладка
- Альтернативы и советы по масштабированию
Шаг 1 — Подготовка всех узлов
Этот шаг выполняется на всех 6 узлах. Для каждой команды приведены примеры, которые нужно запускать локально на каждом узле или через ceph-admin.
Создание пользователя Ceph
Создайте пользователя cephuser и задайте ему пароль:
useradd -d /home/cephuser -m cephuser
passwd cephuserДалее даём этому пользователю право sudo без пароля. На всех узлах выполните:
echo "cephuser ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephuser
chmod 0440 /etc/sudoers.d/cephuser
sed -i s'/Defaults requiretty/#Defaults requiretty'/g /etc/sudoersВажно: редактирование /etc/sudoers должно быть корректным, иначе можно потерять доступ к sudo. Используйте tee и chmod, как показано, чтобы избежать синтаксических ошибок при прямом редактировании файла.
Установка и настройка NTP
Синхронизация времени должна быть точной на всех узлах:
yum install -y ntp ntpdate ntp-doc
ntpdate 0.us.pool.ntp.org
hwclock --systohc
systemctl enable ntpd.service
systemctl start ntpd.serviceЕсли ваша инфраструктура в пределах другой страны, замените ntp pool на ближайший региональный пул (например, 0.ru.pool.ntp.org).
Установка Open VM Tools (опционально)
Если узлы развернуты в VMware:
yum install -y open-vm-toolsОтключение SELinux
Для простоты настройки в этом руководстве SELinux отключается. В продакшне лучше работать с SELinux в разрешающем режиме, но это требует дополнительной настройки политик.
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/configПерезагрузка потребуется, чтобы изменение вступило в силу.
Настройка /etc/hosts
Отредактируйте /etc/hosts на каждом узле и добавьте сетевые записи:
10.0.15.10 ceph-admin
10.0.15.11 mon1
10.0.15.21 osd1
10.0.15.22 osd2
10.0.15.23 osd3
10.0.15.15 clientПроверьте доступность имен хостов по ping:
ping -c 5 mon1Шаг 2 — Конфигурация SSH на ceph-admin
Ceph-admin будет выступать как точка управления и должна иметь возможность подключаться к другим узлам без ввода пароля.
Войдите на ceph-admin как root, переключитесь на cephuser:
ssh root@ceph-admin
su - cephuserСоздайте SSH-ключ для cephuser (оставьте passphrase пустым):
ssh-keygenСоздайте конфиг SSH для удобного доступа (файл ~/.ssh/config):
vim ~/.ssh/configВставьте содержимое:
Host ceph-admin
Hostname ceph-admin
User cephuser
Host mon1
Hostname mon1
User cephuser
Host osd1
Hostname osd1
User cephuser
Host osd2
Hostname osd2
User cephuser
Host osd3
Hostname osd3
User cephuser
Host client
Hostname client
User cephuserСделайте файл читаемым:
chmod 644 ~/.ssh/configДобавьте ключи на удалённые узлы:
ssh-keyscan osd1 osd2 osd3 mon1 client >> ~/.ssh/known_hosts
ssh-copy-id osd1
ssh-copy-id osd2
ssh-copy-id osd3
ssh-copy-id mon1
ssh-copy-id clientПроверьте соединение:
ssh osd1
Шаг 3 — Настройка firewalld
Включаем firewalld и открываем порты, необходимые для работы компонентов Ceph.
На ceph-admin:
ssh root@ceph-admin
systemctl start firewalld
systemctl enable firewalldОткройте базовые порты, используемые в интерфейсах мониторинга/администрирования:
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
sudo firewall-cmd --zone=public --add-port=2003/tcp --permanent
sudo firewall-cmd --zone=public --add-port=4505-4506/tcp --permanent
sudo firewall-cmd --reloadНа мониторе (mon1) откройте порт монитора Ceph (6789):
ssh mon1
sudo systemctl start firewalld
sudo systemctl enable firewalld
sudo firewall-cmd --zone=public --add-port=6789/tcp --permanent
sudo firewall-cmd --reloadНа OSD-узлах откройте диапазон портов для OSD (6800–7300):
ssh osd1
sudo systemctl start firewalld
sudo systemctl enable firewalld
sudo firewall-cmd --zone=public --add-port=6800-7300/tcp --permanent
sudo firewall-cmd --reloadПовторите для osd2 и osd3.
Шаг 4 — Подготовка дисков OSD
В примере на каждом OSD-узле:
- /dev/sda — root
- /dev/sdb — пустой раздел для Ceph (в примере 30 ГБ)
Отформатируем /dev/sdb в XFS и создадим GPT-таблицу разделов:
ssh osd1
sudo fdisk -l /dev/sdb
sudo parted -s /dev/sdb mklabel gpt mkpart primary xfs 0% 100%
sudo mkfs.xfs /dev/sdb -f
sudo blkid -o value -s TYPE /dev/sdbУбедитесь, что тип файловой системы xfs возвращается командой blkid.

Шаг 5 — Сборка кластера Ceph
Все команды установки выполняются с ceph-admin под cephuser.
Войдите на ceph-admin и переключитесь на cephuser:
ssh root@ceph-admin
su - cephuserУстановка ceph-deploy
Добавляем репозиторий и устанавливаем ceph-deploy:
sudo rpm -Uhv http://download.ceph.com/rpm-jewel/el7/noarch/ceph-release-1-1.el7.noarch.rpm
sudo yum update -y && sudo yum install ceph-deploy -yСоздаём рабочую директорию для кластера:
mkdir cluster
cd cluster/Создание конфигурации кластера
Определяем узел монитора mon1:
ceph-deploy new mon1Отредактируйте ceph.conf и добавьте сетевые параметры под блок [global]:
# Your network address
public network = 10.0.15.0/24
osd pool default size = 2osd pool default size = 2 означает, что по умолчанию каждый объект будет иметь 2 копии. Для продакшна рекомендуется как минимум 3 копии для выдержки отказов зоны.

Установка Ceph на все узлы
Устанавливаем Ceph на ceph-admin, mon1 и osd узлы одной командой:
ceph-deploy install ceph-admin mon1 osd1 osd2 osd3После установки создаём начальный монитор:
ceph-deploy mon create-initial
ceph-deploy gatherkeys mon1
Добавление OSD в кластер
Проверяем доступные диски:
ceph-deploy disk list osd1 osd2 osd3Если /dev/sdb виден, можно удалить таблицы разделов (zap):
ceph-deploy disk zap osd1:/dev/sdb osd2:/dev/sdb osd3:/dev/sdbПодготовка OSD:
ceph-deploy osd prepare osd1:/dev/sdb osd2:/dev/sdb osd3:/dev/sdbАктивация OSD (после подготовки создаются разделы /dev/sdb1 и /dev/sdb2):
ceph-deploy osd activate osd1:/dev/sdb1 osd2:/dev/sdb1 osd3:/dev/sdb1Проверьте результат:
ceph-deploy disk list osd1 osd2 osd3
На OSD-узлах теперь будет разделение:
- /dev/sdb1 — Ceph Data
- /dev/sdb2 — Ceph Journal
Проверить можно через fdisk:
ssh osd1
sudo fdisk -l /dev/sdb
Развёртывание ключей управления на узлах
ceph-deploy admin ceph-admin mon1 osd1 osd2 osd3
sudo chmod 644 /etc/ceph/ceph.client.admin.keyringПосле этого базовый кластер Ceph создан.
Шаг 6 — Тестирование настроек кластера
Проверим здоровье кластера и общее состояние.
Входим на мониторе:
ssh mon1
sudo ceph health
sudo ceph -sОжидаемые состояния:
- ceph health возвращает OK
- присутствует монитор mon1
- 3 OSD в статусе up
- пул(ы) доступны

Если всё хорошо — поздравляем, кластер создан.
Критерии приёмки
- Ceph health = OK
- Наличие минимум одного монитора (mon1) в списке
- Все OSD в статусе up и in
- Можно выполнить базовые операции ceph (получение статуса, создание пула)
- ceph.client.admin.keyring уже развернут и имеет корректные права
Чек-листы по ролям
Администратор кластера (ceph-admin):
- Создал cephuser на всех узлах
- Настроил безпарольный SSH
- Установил ceph-deploy и необходимые пакеты
- Собрал и развернул монитор и OSD
- Проверил состояние кластера (ceph -s)
Операционный инженер (OSD/хост):
- Убедился в наличии пустого диска для OSD
- Отформатировал /dev/sdb в XFS
- Настроил firewalld на OSD
- Проверил журналы systemd для ceph-osd
Мини-методология развертывания (по шагам)
- Подготовка: пользователи, сеть, NTP, ssh.
- Подготовка дисков: форматирование, проверка.
- Установка ceph-deploy и зависимостей.
- Создание конфигурации и определение монитора.
- Установка пакетов Ceph на все узлы.
- Подготовка/активация OSD.
- Развёртывание ключей и проверка здоровья кластера.
- Тестирование операций (создание пула, запись/чтение).
Как проверять (тестовые команды и критерии)
Создать тестовый пул и записать объекты:
sudo ceph osd pool create testpool 128
rados -p testpool put foo /etc/hosts
rados -p testpool get foo /tmp/foo.copy
diff /etc/hosts /tmp/foo.copyУспех: diff не показывает различий.
Технические заметки и отладка (Runbook)
Типичные проблемы и команды для диагностики:
ceph health WARN/ERR
- sudo ceph -s
- sudo ceph health detail
- проверить журналы: sudo journalctl -u ceph-mon@mon1
OSD не присоединился
- sudo ceph osd tree
- sudo ceph osd status
- проверить логи ceph-osd: sudo journalctl -u ceph-osd@{id}
Сетевые проблемы
- ping/ssh между узлами
- sudo ss -ltnp | grep ceph
Rollback (быстрая оценка):
- Если zap удалил данные по ошибке — восстановление возможно только из резервных копий; гарантировать rollback без резервных копий нельзя.
Безопасность и жёсткие настройки
Рекомендации по безопасности:
- Ограничьте доступ к /etc/ceph и ключевым файлам только узлам, имеющим право управлять кластером (chmod 640/600 при необходимости).
- Используйте отдельные сети для публичного и кластерного трафика (public и cluster network) в ceph.conf, если у вас более сложная сеть.
- В продакшне рекомендуется не отключать SELinux без детальной проверки политик; вместо этого настройте правила SELinux для ceph.
- Ограничьте доступ по SSH по IP-адресу и используйте ключи с passphrase, храня passphrase в защищённом менеджере секретов.
Альтернативные подходы и когда ceph-deploy не подходит
Когда ceph-deploy хорош:
- Быстрая лабораторная установка
- Небольшие кластеры и тестовые среды
Когда NOT использовать ceph-deploy:
- Продакшн с сотнями узлов — лучше ceph-ansible, cephadm (для новых версий Ceph) или интеграция с orchestration (например, Rook + Kubernetes).
- Нужна полная автоматизация с конфигурационным управлением — используйте Ansible/Terraform.
Альтернативы:
- ceph-ansible — полнофункциональный плейбук для автоматизированной установки и обновлений.
- cephadm — современная утилита от upstream для управления контейнеризированным развертыванием Ceph.
- Rook — оператор Ceph для Kubernetes.
Факты и числа (Fact box)
- Минимальное количество OSD в примере: 3
- Типичный размер пула в примере: osd pool default size = 2
- Порт монитора: 6789
- Диапазон портов OSD: 6800–7300
- Формат файловой системы диска OSD в примере: XFS
Советы по масштабированию и миграции
- Для масштабирования добавляйте OSD по несколько штук и давайте системе время для восстановления и rebalancing.
- При добавлении OSD следите за ceph status и не добавляйте слишком много одновременно.
- Для миграции с ceph-deploy на cephadm/ceph-ansible подготовьте инвентарь и сохраните текущие конфигурации/ключи.
Частые ошибки и когда это не сработает
- Неправильная синхронизация времени приводит к ошибкам аутентификации и расхождениям в кворуме мониторов.
- Неправильные права на keyring приведут к отказу в доступе менеджера.
- Использование недостаточного количества реплик (size < 3) в продакшне повышает риск потери данных при отказе хоста.
Пример playbook для быстрой проверки статуса (шаблон)
# Примерный список команд для быстрой проверки
sudo ceph -s
sudo ceph osd tree
sudo ceph osd df
sudo ceph health detailКраткое объявление (для рассылки или документа)
Ceph кластер на CentOS 7 установлен и протестирован: создан монитор и 3 OSD, настроены сетевые порты и синхронизация времени. Руководство включает пошаговые команды, чек‑листы ролей, runbook для отладки и рекомендации по безопасности. Используйте это руководство как шаблон для лабораторных и мелкомасштабных развёртываний; для продакшн‑инфраструктуры рассмотрите ceph-ansible или cephadm.
Итог и дальнейшие шаги
Вы успешно настроили базовый Ceph-кластер. Рекомендуемые следующие шаги:
- Изучите работу с RBD (блочное хранилище) и CephFS (файловая система).
- Настройте мониторинг (Prometheus, Grafana) для отслеживания состояния OSD, latency и throughput.
- Подумайте о политике резервного копирования метаданных и ключей.
Краткие ключевые выводы:
- Ceph предоставляет гибкую и масштабируемую платформу хранения.
- ceph-deploy подходит для быстрой сборки и тестирования кластера.
- В продакшне используйте более зрелые инструменты автоматизации и планирование отказоустойчивости.
Спасибо за внимание. В следующей части руководства будет показано, как использовать Ceph как блочное устройство (RBD) и как смонтировать CephFS.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента