У меня есть система хранения SSD, которая содержит два узла с 6 дисками SSD. Не идеально, поэтому в какой-то момент я представлю еще один узел. Прямо сейчас я хочу 3-х стороннюю репликацию.
По правилу по умолчанию этого не произойдет, потому что у нас всего два узла. Поэтому я подумал, что попытаюсь изменить карту успеха и установить набор правил для узлов хранилища SSD для размещения данных между двумя узлами, а третий набор может находиться в другом OSD на том же узле.
Будучи новичком и не совсем понимающим, как choose firstn
и chooseleaf firstn
заявления работают Я не уверен, что это будет делать то, что я собираюсь.
Вот что у меня есть на данный момент:
rule ssd-all {
ruleset 1
type replicated
min_size 1
max_size 5
step take ssd
step choose firstn 0 type host
step chooseleaf firstn 2 type osd
step emit
}
Где ssd - это корневой тип, содержащий несколько хостов и те хосты, которые содержат несколько (6) OSD.
Это сработает? Почему-то я не думаю, что это правильно. Я бы хотел лучше понять, когда использовать choose
и где использовать chooseleaf
. И лучшее понимание числа после firstn
. В документации отсутствуют наглядные примеры. Читая Технический документ CRUSH имел некоторый смысл, но псевдокод для меня не так понятен. Может кто поможет?
Оказывается, все нормально.
rule ssd-all {
ruleset 1
type replicated
# These lines mean ssd-all will be used when the replica
# count is between 1 & 5 inclusive
min_size 1
max_size 5
# Take the top level pool named 'ssd'
step take ssd
# Choose all host nodes. In my case, there are only 2.
step choose firstn 0 type host
# Choose up to to 2 leaves of type osd.
step chooseleaf firstn 2 type osd
step emit
}
После запуска
crushtool -t crushmap --test --show-statistics --show-mappings --rule 1 --min-x 1 --max-x 10 --num-rep 3
С различным количеством реплик для --num-rep кажется, что условия выполняются правильно. На двух хостах есть как минимум 3 реплики с двумя репликами на одном хосте на 2 разных OSD.