У нас есть только два узла OSD по соображениям стоимости, но я бы хотел использовать 3 реплики, чтобы очистка могла исправить любые ошибки данных, у меня возникли сложности при поиске наилучшего определения правила дробления для этого.
Это Ceph Mimic.
Кластер выглядит так:
$ ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 20.95917 root default
-3 10.47958 host san10
0 ssd 1.74660 osd.0 up 1.00000 1.00000
1 ssd 1.74660 osd.1 up 1.00000 1.00000
2 ssd 1.74660 osd.2 up 1.00000 1.00000
3 ssd 1.74660 osd.3 up 1.00000 1.00000
4 ssd 1.74660 osd.4 up 1.00000 1.00000
5 ssd 1.74660 osd.5 up 1.00000 1.00000
-5 10.47958 host san11
6 ssd 1.74660 osd.6 up 1.00000 1.00000
7 ssd 1.74660 osd.7 up 1.00000 1.00000
8 ssd 1.74660 osd.8 up 1.00000 1.00000
9 ssd 1.74660 osd.9 up 1.00000 1.00000
10 ssd 1.74660 osd.10 up 1.00000 1.00000
11 ssd 1.74660 osd.11 up 1.00000 1.00000
Правило, которое у меня есть:
rule myrule {
id 2
type replicated
min_size 3
max_size 4
step take default
step choose firstn 2 type host
step chooseleaf firstn 2 type osd
step emit
}
Запуск инструмента раздавливания для тестированияправило:
$ crushtool -c map.txt -o map.bin && crushtool -i map.bin --test --show-statistics --show-mappings --rule 2 --min-x 1 --max-x 10 --num-rep 3
rule 2 (myrule), x = 1..10, numrep = 3..3
CRUSH rule 2 x 1 [9,11,5]
CRUSH rule 2 x 2 [1,3,9]
CRUSH rule 2 x 3 [0,4,11]
CRUSH rule 2 x 4 [8,10,5]
CRUSH rule 2 x 5 [3,0,7]
CRUSH rule 2 x 6 [2,4,6]
CRUSH rule 2 x 7 [9,6,1]
CRUSH rule 2 x 8 [2,5,7]
CRUSH rule 2 x 9 [9,8,4]
CRUSH rule 2 x 10 [10,7,4]
rule 2 (myrule) num_rep 3 result size == 3: 10/10
Таким образом, кажется, что OSD выбирается на обоих хостах, но я не уверен, что так будет всегда.Может кто-нибудь, пожалуйста, подтвердите?Или предложить лучший способ добиться этого?