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.
ceph osd tree
ceph osd blacklist ls
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
ceph osd map <pool-name> <object-name>
ceph -s
ceph health detail
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
ceph osd crush dump
ceph pg stat
ceph pg dump
ceph mds stat
ceph mds dump
rbd create <rbd-name> --size <size>
rbd resize <pool-name> --size <size>
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>
ceph osd crush remove <name>
ceph auth del <name>
ceph osd out <name>
ceph osd rm <name>
В идеале мы хотим, чтобы все OSD были одинаковыми с точки зрения производительности и мощности, но это не всегда возможно. Когда OSD отличаются по своим ключевым атрибутам, используйте ceph osd crush reweight
, чтобы изменить их вес в CRUSH карте, чтобы кластер был правильно сбалансирован, а OSD разных типов получили правильно настроенное количество запросов ввода/вывода и данных.
ceph osd crush reweight