Заметки администратора Ceph. Часть 1.

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

  1. Монитор
  2. OSD
  3. MDS
  4. Шлюз RADOS

Информационные команды

Отобразить дерево OSD

ceph osd tree

Отобразить черный список клиентов

ceph osd blacklist ls

Отобразить текущие значения PG и PGP

ceph osd pool get <pool-name> pg_num
ceph osd pool get <pool-name> 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 <pool-name> <object-name>

Проверить состояние кластера

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 <rbd-name> --size <size>

Изменить размер устройства RBD

rbd resize <pool-name> --size <size>

Установить новые значения PG и PGP для пула

ceph osd pool set <pool-name> pg_num <size>
ceph osd pool set <pool-name> pgp_num <size>

Создать новый пул

ceph osd pool create <pool-name> <pg-size> <pgp-size>

Создать моментальный снепшот пула

ceph osd pool mksnap <pool-name> <snap-name>

Переименовать пул

ceph osd pool rename <old-name> <new-name>

Установить новый уровень репилкации

ceph osd pool set <pool-name> size <size>

Удалить OSD из карты CRUSH

ceph osd crush remove <name>

Удалить ключ авторизации OSD

ceph auth del <name>

Исключить OSD из кластера

ceph osd out <name>

Полное удаление OSD из кластера

ceph osd rm <name>

В идеале мы хотим, чтобы все OSD были одинаковыми с точки зрения производительности и мощности, но это не всегда возможно. Когда OSD отличаются по своим ключевым атрибутам, используйте ceph osd crush reweight, чтобы изменить их вес в CRUSH карте, чтобы кластер был правильно сбалансирован, а OSD разных типов получили правильно настроенное количество запросов ввода/вывода и данных.

ceph osd crush reweight
Поделиться Комментарии