Product SiteDocumentation Site

26.6.7. Ceph CRUSH и классы устройств

CRUSH (Controlled Replication Under Scalable Hashing) — алгоритм, определяющий размещение данных в кластере. Он позволяет однозначно вычислить местоположение объекта на основе хеша его имени и карты CRUSH, сформированной с учётом физической и логической структуры кластера.
Карта CRUSH не содержит информации о фактическом расположении данных. Каждый клиент самостоятельно вычисляет путь к объекту, используя CRUSH-алгоритм и актуальную карту, полученную от монитора. При добавлении дисков или выходе узлов из строя карта автоматически обновляется.
Карта CRUSH
Карту CRUSH можно модифицировать, чтобы отражать различные иерархии репликации, например домены отказов, при сохранении равномерного распределения данных.
Ceph автоматически определяет классы устройств (SSD, NVMe) и создаёт для них отдельные теневые деревья. Эти классы можно увидеть в выводе дерева OSD:
# ceph osd crush tree --show-shadow
ID   CLASS  WEIGHT   TYPE NAME
 -6   nvme  0.09760  root default~nvme
 -5   nvme        0      host pve01~nvme
 -9   nvme  0.04880      host pve02~nvme
  1   nvme  0.04880          osd.1
-12   nvme  0.04880      host pve03~nvme
  2   nvme  0.04880          osd.2
 -2    ssd  0.04880  root default~ssd
 -4    ssd  0.04880      host pve01~ssd
  0    ssd  0.04880          osd.0
 -8    ssd        0      host pve02~ssd
-11    ssd        0      host pve03~ssd
 -1         0.14639  root default
 -3         0.04880      host pve01
  0    ssd  0.04880          osd.0
 -7         0.04880      host pve02
  1   nvme  0.04880          osd.1
-10         0.04880      host pve03
  2   nvme  0.04880          osd.2
Чтобы ограничить размещение данных пула определённым классом устройств, необходимо создать соответствующее CRUSH-правило:
# ceph osd crush rule create-replicated <rule-name> <root> <failure-domain> <class>
Где:
  • rule-name — имя правила;
  • root — корень дерева (значение default — корень Ceph);
  • failure-domain — домен отказа, на котором должны распределяться объекты (как правило, host);
  • class — класс устройств (например, nvme, ssd).
Пример создания правила для NVMe-дисков:
# ceph osd crush rule create-replicated my_rule default host nvme
Просмотр существующих правил:
# ceph osd crush rule dump
Назначение правила пулу:
# ceph osd pool set <pool-name> crush_rule <rule-name>

Примечание

Изменение CRUSH-правила для существующего пула приводит к перемещению данных и создаёт дополнительную нагрузку на кластер.