====== Администрирование Ceph. ======
Ceph — это программно определяемая распределенная файловая система с открытым исходным кодом, лишенная узких мест и единых точек отказа, которая представляет из себя легко масштабируемый до петабайтных размеров кластер узлов, выполняющих различные функции, обеспечивая хранение и репликацию данных, а также распределение нагрузки, что гарантирует высокую доступность и надежность.
==== Основные термины ====
**OSD** (//Object Storage Daemon//) - устройство хранения объектов в **Ceph**. Обрабатывает такие состояния **PG** как //replication//, //recovery//, //backfilling//, //rebalancing//. Так же предоставляет информацию для мониторинга **Ceph**. Как правило, один демон **OSD** соответствует одному физическому диску.
**Mon** (//Monitor//) - отслеживает состояние всего кластера путём хранения карты состояния кластера, включая карты **OSD**, **PG** и **CRUSH**.
**MDS** (//Metadata Server//) - хранит метаданные файловой системы **CephFS**. **MDS** делает возможным обрабатывать запросы пользователей **POSIX**-файловой системы, не нагружая кластер.
**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** следующая:
(кол-во OSD * 100)
Кол-во PG = ---------------
кол-во реплик
При этом результат должен быть округлён до ближайшей степени двойки (//например, по формуле = 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** - данные группы размещения реплицировались нужное количество раз.
* **Creating** - состояние создания группы.
* **Degraded** - **PG** имеет нереплицированные данные.
* **Down** - отсутствует реплика с необходимыми данными.
* **Incomplete** - состояние в котором **Ceph** обнаружил в **PG** отсутствующую информацию о записи или “больные” копии объекта.
* **Inconsistent** - обнаружены несоответствия в одной или нескольких репликах объекта в **PG**.
* **Recovering** - синхронизация объектов и их реплик.
* **Repair** - проверка группы на несоответствия и восстановление найденных несоответствий, если это возможно.
* **Replay** - группа ждёт клиентов, чтобы повторить операции после крэша **OSD**.
* **Peered** - состояние, в котором **PG** не может обработать запросы клиента, так как не имеет достаточно реплик объект.
* **Peering** - процесс приведения всех **OSD** одной группы размещения в соглашение о состоянии всех объектов и их метаданных в этой **PG**.
* **Remapped** - **PG** временно отображается в другие **OSD**, в отличие от тех, что указаны в карту **CRUSH**.
* **Scrubbing** - **PG** проверяется на несоответствия.
* **Splitting** - состояние расщепления одной **PG** на несколько **PG**.
* **Stale** - **PG** находится в неизвестном состоянии, так как мониторы не получили обновления от неё и её отображение изменилось.
* **Undersized** - **PG** содержит меньше копий, чем установленный размер пула.
* **Wait-backfill** - в очереди на состояние **backfill**.
==== Порядок обновления Ceph ====
- Монитор
- OSD
- MDS
- Шлюз RADOS
==== Информационные команды ====
=== Отобразить дерево OSD ===
ceph osd tree
=== Отобразить черный список клиентов ===
ceph osd blacklist ls
=== Отобразить текущие значения PG и PGP ===
ceph osd pool get pg_num
ceph osd pool get pgp_num
=== Отобразить информацию о размере реплики ===
$ ceph osd dump grep size
pool 1 'one' replicated size 3 min_size 2 crush_ruleset 0 object_hash rjenkins pg_num 512 pgp_num 512 last_change 435 flags hashpspool stripe_width 0
=== Отобразить существующие пулы ===
ceph osd lspools
=== Показать карту OSD для объектов пула ===
ceph osd map
=== Проверить состояние кластера ===
ceph -s
ceph health detail
=== Проверить состояние кластера (live-режим) ===
ceph -w
=== Проверить статус мониторов ===
ceph mon stat
=== Проверить статус мониторов ===
ceph osd stat
=== Отобразить список дисков ===
ceph-disk list
=== Отобразить статистику кластера ===
ceph df
=== Отобразить список ключей авторизации ===
ceph auth list
=== Отобразить состояние мониторов ===
ceph mon stat
ceph mon dump
=== Отобразить состояние кворума ===
ceph quorum_status
=== Отобразить карту CRUSH ===
ceph osd crush dump
=== Отобразить состояние PG ===
ceph pg stat
ceph pg dump
=== Отобразить состояние MDS ===
ceph mds stat
ceph mds dump
==== Команды модификации кластера ====
=== Создать блочное устройство RADOS ===
rbd create --size
=== Изменить размер устройства RBD ===
rbd resize --size
=== Установить новые значения PG и PGP для пула ===
ceph osd pool set pg_num
ceph osd pool set pgp_num
=== Создать новый пул ===
ceph osd pool create
=== Создать моментальный снепшот пула ===
ceph osd pool mksnap
=== Переименовать пул ===
ceph osd pool rename
=== Установить новый уровень репилкации ===
ceph osd pool set size
=== Удалить OSD из карты CRUSH ===
ceph osd crush remove
=== Удалить ключ авторизации OSD ===
ceph auth del
=== Исключить OSD из кластера ===
ceph osd out
=== Полное удаление OSD из кластера ===
ceph osd rm
В идеале мы хотим, чтобы все **OSD** были одинаковыми с точки зрения производительности и мощности, но это не всегда возможно. Когда **OSD** отличаются по своим ключевым атрибутам, используйте ''ceph osd crush reweight'', чтобы изменить их вес в **CRUSH** карте, чтобы кластер был правильно сбалансирован, а **OSD** разных типов получили правильно настроенное количество запросов ввода/вывода и данных.
ceph osd crush reweight