Назад | Перейти на главную страницу

Репликация ceph основана на узлах или дисках?

В настоящее время я оцениваю системы хранения для xenserver. Поскольку репликация данных важна в случае сбоя, у меня есть вопрос относительно репликации в ceph.

Насколько я знаю, каждый диск в узле сам по себе является osd (диски не входят ни в какую конфигурацию рейда). Знает ли алгоритм репликации ceph тот факт, что 2 OSD находятся на одном узле, поэтому не реплицируют данные на этих OSD?

Минимальный пример: 2 узла по 2 диска в каждом. Из-за настройки без рейда каждый диск представляет собой OSD -> 4 OSD. Узел A: OSD1, OSD2; Узел B: OSD3, OSD4. Я устанавливаю количество репликации на 2 и сохраняю объект в ceph. Будет ли объект сохранен и реплицирован, чтобы в случае отказа узла данные были полностью доступны?

Спасибо за ваши ответы

  1. Да. 2. Вы можете определить политику для репликации по узлам, стойкам, центрам обработки данных и т. Д.

По умолчанию в правиле репликации CRUSH (replicated_ruleset) указано, что репликация выполняется в хозяин уровень. Вы можете проверить это при экспорте карты разрушения:

ceph osd getcrushmap -o /tmp/compiled_crushmap
crushtool -d /tmp/compiled_crushmap -o /tmp/decompiled_crushmap

На карте отобразится следующая информация:

rule replicated_ruleset {
        ruleset 0
        type replicated
        min_size 1
        max_size 10
        step take default
        step chooseleaf firstn 0 type host

Типы репликации перечислены в начале карты:

# types
type 0 osd
type 1 host
type 2 chassis
type 3 rack
type 4 row
type 5 pdu
type 6 pod
type 7 room
type 8 datacenter
type 9 region
type 10 root

Чтобы перейти в состояние HEALTH_OK и реплицировать ваш объект в соответствии с вашими правилами, вы должны изменить тип репликации на OSD в вашем конкретном случае. Карту можно перекомпилировать, запустив:

crushtool -c /tmp/decompiled_crushmap -o /tmp/compiled_crushmap
ceph osd setcrushmap -i /tmp/compiled_crushmap

Вы можете найти больше информации о том, как играть с картой CRUSH, в документации ceph: http://docs.ceph.com/docs/master/rados/operations/crush-map/

Размещение конкретного объекта можно найти с помощью:

ceph osd map {pool-name} {object-name}

Если вы хотите проверить карту всех объектов, вы можете сделать это, посмотрев на дамп группы размещения (считайте, что ваша собственная информация будет отображаться):

ceph pg dump | awk  '{print $1 "\t" $2 "\t" $15 "\t" $16}'

Что касается OSD, вы можете рассматривать OSD любого типа логической физической единицы хранения (папка / раздел / логический том / диск / LUN)