В настоящее время я оцениваю системы хранения для xenserver. Поскольку репликация данных важна в случае сбоя, у меня есть вопрос относительно репликации в ceph.
Насколько я знаю, каждый диск в узле сам по себе является osd (диски не входят ни в какую конфигурацию рейда). Знает ли алгоритм репликации ceph тот факт, что 2 OSD находятся на одном узле, поэтому не реплицируют данные на этих OSD?
Минимальный пример: 2 узла по 2 диска в каждом. Из-за настройки без рейда каждый диск представляет собой OSD -> 4 OSD. Узел A: OSD1, OSD2; Узел B: OSD3, OSD4. Я устанавливаю количество репликации на 2 и сохраняю объект в ceph. Будет ли объект сохранен и реплицирован, чтобы в случае отказа узла данные были полностью доступны?
Спасибо за ваши ответы
По умолчанию в правиле репликации 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)