Понимание механизма правила раздавливания в ceph

Я хотел бы знать разницу между этими двумя правилами:

# rules
rule rack_rule{
 ruleset 0
 type replicated
 min_size 1
 max_size 10
 step take default
 step chooseleaf firstn 0 type rack
 step emit
}

а также

rule 2rack_2host{
 ruleset 0
 type replicated
 min_size 1
 max_size 10
 step take default
 step choose firstn 2 type rack
 step chooseleaf firstn 2 type host
 step emit
}

В моем понимании, первое правило race_rule будет принимать стойку как домен отказа, в результате в каждой PG у нас будут osds из разных стоек. Так, например, если у меня есть 2 стойки и размер репликации = 2, у меня будет PG [osd.1,osd.2], и эти 2 osd должны быть из разных стоек.

Во втором правиле, я думаю, должно быть выбрано 2 разных стойки и для каждой стойки будет выбрано 2 разных хоста. Итак, также, если у меня есть 2 стойки и размер репликации = 2, у меня будет PG [osd.1,osd.2], и эти 2 osd должны быть из разных стоек.

Это теоретически то, что я понял, но на практике я не вижу этих ожидаемых результатов. С этими двумя правилами у меня есть osds в одной стойке для PG внутри пула с размером репликации 2


person USR    schedule 19.03.2021    source источник


Ответы (1)


Ваш вывод не совсем правильный. Первое правило

step take default
step chooseleaf firstn 0 type rack

вы правильно поняли. Ceph выберет столько стоек (под корнем по умолчанию в дереве разбивки), сколько определяет ваш параметр size для пула. Второе правило работает немного иначе:

step take default
step choose firstn 2 type rack
step chooseleaf firstn 2 type host

Ceph выберет ровно 2 стойки под root по умолчанию, затем в каждой стойке он выберет 2 хоста. Но это правило предназначено для size = 4, а не для 2. Кстати, не используйте size = 2! Если вы используете это правило с размером 2, вы получите именно то, что уже написали, два хоста в одной стойке будут иметь обе группы размещения. Таким образом, если одна стойка выйдет из строя, ваши PG станут неактивными, и клиенты будут сталкиваться с ошибками ввода-вывода, пока это не будет устранено.

Существует инструмент под названием crushtool для проверки ваших изменений перед их реализацией. , это очень полезно, попробуйте!

person eblock    schedule 30.03.2021
comment
Эй, большое спасибо за ваш ответ, теперь я вернулся с лучшим знанием ceph, я поэкспериментировал с инструментом, создал множество правил и увидел, как они работают в реальном кластере. Точно так же, как вы сказали со вторым правилом, будут выбраны 2 стойки и 2 хоста из каждой стойки. И это будет работать для размера репликации 4 или даже 3, потому что ceph будет игнорировать 4-й хост. - person USR; 30.03.2021
comment
Если у вас две стойки и отказоустойчивый домен также является стойкой, не используйте size = 3. Подумайте о том, что в одной стойке есть одна реплика, а в другой — две. Если стойка с двумя репликами выйдет из строя, у вас останется только одна исправная копия. Когда отказавшая стойка возвращается, у нее есть две старые копии PG и только одна текущая версия, это может привести к повреждению данных, поскольку правильная версия может быть перезаписана. Это также причина не использовать size = 2. - person eblock; 01.04.2021