Ceph это программно-определяемая распределенная файловая система с открытым исходным кодом. Ceph позволяет создать отказоустойчивое распределенное хранилище данных, работающее по протоколу TCP. Ceph предлагает несколько интерфейсов доступа к хранилищу: объектный, блочный и файловый. В этой статье мы покажем, как установить и настроить кластер ceph на примере релиза Quincy (17).
В минимальной конфигурации рекомендуется использовать для кластера ceph три хоста с 2 CPU и 4 Гб RAM. В моем стенде я использую Rocky Linux 8.
Кластерная система хранения данных ceph состоит из нескольких демонов:
- MON (Ceph monitor) — монитор кластера, который отслеживает его состояние. Все узлы кластера сообщают мониторам информацию о своем состоянии;
- OSD (Object Storage Device) – элемент кластер, который хранит данные и обрабатывает запросы клиентов. Данные в OSD хранятся в виде блоков;
- MDS (Metadata Server Daemon) — сервер метаданных. Используется для работы файловой системы CephFS (в нашем примере мы не будем разворачивать CephFS);
- MGR (Manager Daemon) — сервис мониторинга.
Нужно предварительно подготовить все хосты кластера:
- Обновить операционные систему и пакеты до актуальных версий
- Настроить синхронизацию времени через Chrony
- Создать для хостов записи в DNS. В hostname нужно использовать короткое имя, а не FQDN.
Затем на всех серверах нужно установить Python3 и Podman (службы Ceph запускаются в контейнерах). Допустимо использовать Docker вместо Podman:
# dnf install python39
# python3 --version
Python 3.9.7
# dnf install podman
# podman -v
podman version 4.0.2
Установите утилиту cephadm, которую мы будем использовать для создания и настройки кластера:
# curl --silent --remote-name --location https://github.com/ceph/ceph/raw/quincy/src/cephadm/cephadm
# chmod +x cephadm
# ./cephadm add-repo --release quincy
Writing repo to /etc/yum.repos.d/ceph.repo... Enabling EPEL... Completed adding repo.
# ./cephadm install
Installing packages ['cephadm']...
Для создания кластера ceph используется cephadm bootstrap. Команда запустит сервисы ceph и первый Monitor на указанной ноде, создаст кластер, сгенерирует ключи, конфигурационный файл и т.д.
В продуктивной среде рекомендуется использовать отдельную сеть для трафика репликации данных между OSD. Поэтому нужно предварительно настроить сетевые интерфейсы на хостах для работы в данной сети
# cephadm bootstrap --mon-ip 192.168.10.23 --cluster-network 192.168.10.0/24
Verifying podman|docker is present... Verifying lvm2 is present... Verifying time synchronization is in place... Unit chronyd.service is enabled and running Repeating the final host check... podman (/usr/bin/podman) version 4.0.2 is present systemctl is present lvcreate is present Unit chronyd.service is enabled and running Host looks OK Cluster fsid: GUID Adding host ceph01... Deploying mon service with default placement... Deploying mgr service with default placement... Deploying crash service with default placement... Deploying prometheus service with default placement... Deploying grafana service with default placement... Deploying node-exporter service with default placement... Deploying alertmanager service with default placement... Enabling the dashboard module...
Также будет запущен Ceph Dashboard:
Ceph Dashboard is now available at: URL: https://ceph-01:8443/ User: admin Password: passworfd
Выведите список запущенных контейнеров на хосте:
# podman ps
quay.io/ceph/ceph:v17 quay.io/ceph/ceph@sha256: quay.io/prometheus/node-exporter:v1.3.1 quay.io/ceph/ceph-grafana:8.3.5 quay.io/prometheus/alertmanager:v0.23.0 quay.io/prometheus/prometheus:v2.33.4 quay.io/ceph/ceph:v17
Проверить статус кластера:
# cephadm install ceph-common
# ceph -s
В этом примере мы используем первую ноду для управления, поэтому на остальных нужно установить сертификат для SSH доступа и поместить в /etc/ceph:
# ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph-02
# ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph-03
Добавляем хосты в кластер:
# ceph orch host add ceph-02
# ceph orch host add ceph-03
Вывести список хостов:
# ceph orch host ls
Через некоторое время Ceph запустит службы Monitor и Mgr на определенных хостах согласно своей политике.
Можно принудительно указать хосты, где нужно запустить монитор ceph:
# ceph orch apply mon --placement="2 ceph-01 ceph-02"
Проверьте статус кластер и активные роли:
# ceph -s
Теперь можно запустить службы OSD и указать диски, которые можно использовать для хранения данных в Ceph:
# ceph orch daemon add osd ceph-01:/dev/sdb,/dev/sdc,/dev/sdd
# ceph orch daemon add osd ceph-02:/dev/sdb,/dev/sdc,/dev/sdd
# ceph orch daemon add osd ceph-03:/dev/sdb,/dev/sdc,/dev/sdd
В продуктивной среде рекомендуется выносить DB и WAL (Write-ahead log) на SSD. Используйте для этого команду:
# ceph orch daemon add osd host:data_devices=/dev/sdb,/dev/sdc,db_devices=/dev/sdd,osds_per_device=2
В этом примере data_devices – обычные HDD, а db_devices – SSD устройство.
Проверьте состояние OSD:
# ceph osd tree
Для каждого диска создается отдельная служба OSD.
Если по добавлении OSD появляется предупреждение:
health: HEALTH_WARN 1 stray daemon(s) not managed by cephadm
Перезапустите службу ceph-mgr на данной ноде:
# ceph orch daemon restart mgr.ceph-01.dseows
На этом настройка кластера Сeph завершена, и вы можете предоставить доступ клиентам с помощью протоколов:
- Блочный доступ (RBD, Rados Block Device);
- Файловый (CephFS)
- Объектный S3 (RadosGW)