Thank you for reading this post, don't forget to subscribe!
Основные термины
OSD (Object Storage Daemon) - устройство хранения объектов в Ceph. Обрабатывает такие состояния PG как replication, recovery, backfilling, rebalancing. Так же предоставляет информацию для мониторинга Ceph. Как правило, один демон OSD соответствует одному физическому диску.
Mon (Monitor) - отслеживает состояние всего кластера путём хранения карты состояния кластера, включая карты OSD, PG и CRUSH.
CRUSH Map - содержит список OSD и buckets для объединения OSD, а так же список правил, которые говорят CRUSH, как он должен реплицировать данные в пулах кластера Ceph.
Primary OSD - OSD устройство, которое обрабатывает запросы от клиентов.
Replica OSD - OSD устройство, которое используется только для создания реплик от Primary OSD.
CRUSH (Controlled Replication Under Scalable Hashing) - алгоритм, использующий хэширование для расчёта хранения и извлечения данных в распределенных системах на основе кластерного типа хранения. CRUSH распределяет данные по запоминающим устройствам равномерно, но псевдослучайным образом. Распределение контролируется иерархической картой кластера. Карта, которую настраивает администратор, информирует кластер о структуре и емкости узлов в сети хранения данных. CRUSH был разработан для Ceph, распределенного сетевого хранилища.
PG (Placement Groups) - группа размещения или логическая коллекция объектов в Ceph, которые реплицируются в OSD. Одна группа может сохранять данные на несколько OSD, в зависимости уровня сложности системы. Формула для вычисления групп размещения для Ceph следующая:
YAML
1
2
3
<spanclass="line">(кол-воOSD*100)</span>
<spanclass="line">Кол-воPG=---------------</span>
<spanclass="line">кол-вореплик</span>
При этом результат должен быть округлён до ближайшей степени двойки (например, по формуле = 700, после округления = 512).
PGP (Placement Group for Placement purpose) - группы размещения для целей расположения. Количество должно быть равным общему числу групп размещения.
Pool - логический раздел для хранения объектов. Каждый пул содержит определённое количество групп размещения, которые содержат объекты кластеризованные на OSD. Концепция пула обеспечивает устойчивость. При создании пула можно выбрать только один тип доступности данных - репликации или коды удаления. Пул при записи данных руководствуется наборами правил CRUSH.
RADOS (Reliable Autonomic Distributed Object Store) - безотказное автономное распределённое хранилище объектов. Имеет возможность масштабирования до одной тысячи устройств путем использования программного обеспечения на каждом из отдельных узлов хранения.
RBD (RADOS Block Device) - программное обеспечение с открытым исходным кодом для хранения данных на основе блочного устройства в распределенных системах хранения.
CephFS (Ceph File System) - файловая система, совместимая с POSIX (Portable Operating System Interface), использующая для хранения данных кластер Ceph. CephFS использует для хранения блочные устройства CBD (Ceph Block Device) основанные на RBD.
Состояния Placement Groups
Active - в этом состоянии Ceph может обрабатывать запросы к этой группе.
Backfill - сканирование и синхронизация всего содержимого PG без использования журнала операций. Это частный случай восстановления.
Backfill-toofull - состояние backfill в ожидании, потому что OSD назначения имеет высокий коэффициент заполнения.
Clean - данные группы размещения реплицировались нужное количество раз.
чтобы конфигурация применилась, необходимо поправить конфиг файл на ноде откуда производилась установка: /var/ceph-admin/ceph.conf добавив строку: osd pool default size = 2 после чего выполнить команду:
[ceph@node1 ceph-admin]$ ceph-deploy --overwrite-conf config push node1 node2 node3
и выполним следующие команды:
[root@node1 ceph-admin]# ceph osd pool set ИМЯ_ПУЛА size 2 [root@node1 ceph-admin]# ceph osd pool set ИМЯ_ПУЛА min_size 1
после чего перезапускаем все сервисы на нодах: systemctl restart ceph\*.service systemctl restart ceph\*.target
В идеале мы хотим, чтобы все OSD были одинаковыми с точки зрения производительности и мощности, но это не всегда возможно. Когда OSD отличаются по своим ключевым атрибутам, используйте ceph osd crush reweight, чтобы изменить их вес в CRUSH карте, чтобы кластер был правильно сбалансирован, а OSD разных типов получили правильно настроенное количество запросов ввода/вывода и данных.
YAML
1
<spanclass="line">cephosdcrushreweight</span>
Распределение места на ceph:
Имеется кластер, мы делим его пополам с правилами дробления(crush map), 116/2 = 58, с репликой 4, 58/4 = 14,5. Таким образом, у вас остаётся 13 для данных.