Ручной перевод на стойки
Спроектируйте CRUSH-иерархию кластеров Ceph (подробнее — в документе Руководство по проектированию VK Private Cloud в разделе Основные принципы проектирования новой инсталляции → Размещение данных при проектировании SDS Ceph).
При обновлении Платформы перестройте карту CRUSH вручную:
-
Получите текущую карту CRUSH:
$ ceph osd crush treeПример ожидаемого результатаID CLASS WEIGHT TYPE NAME-1 2.69989 root default-9 0.29999 host csn0016 hdd 0.14999 osd.67 hdd 0.14999 osd.7-3 0.29999 host csn0020 hdd 0.14999 osd.01 hdd 0.14999 osd.1-11 0.29999 host csn0038 hdd 0.14999 osd.89 hdd 0.14999 osd.9-5 0.29999 host csn0042 hdd 0.14999 osd.23 hdd 0.14999 osd.3-7 0.29999 host csn0054 hdd 0.14999 osd.45 hdd 0.14999 osd.5-13 0.29999 host csn00610 hdd 0.14999 osd.1011 hdd 0.14999 osd.11-15 0.29999 host csn00712 hdd 0.14999 osd.1213 hdd 0.14999 osd.13-17 0.29999 host csn00814 hdd 0.14999 osd.1415 hdd 0.14999 osd.15-19 0.29999 host csn00916 hdd 0.14999 osd.1617 hdd 0.14999 osd.17 -
Добавьте стойки в карту:
$ ceph osd crush add-bucket <СТОЙКА> rackЗдесь
<СТОЙКА>— имя добавляемой стойки. Пример:rack_01.Пример ожидаемого результатаadded bucket rack_01 type rack to crush map -
Переместите каждую стойку в корень карты (
root):$ ceph osd crush move <СТОЙКА> root=defaultЗдесь
<СТОЙКА>— имя перемещаемой стойки. Пример:rack_01.Пример ожидаемого результатаmoved item id -19 name 'rack_01' to location {root=default} in crush map -
Последовательно переместите узлы на созданные стойки:
-
Переместите узел в стойку:
$ ceph osd crush move <УЗЕЛ> rack=<СТОЙКА>Здесь:
<УЗЕЛ>— имя перемещаемого узла с OSD. Пример:csn001.<СТОЙКА>— имя стойки, в которую перемещаем узел. Пример:rack_01.
Пример ожидаемого результатаmoved item id -7 name 'csn001' to location {rack=rack_01} in crush map -
Получите информацию по процессу ребалансинга:
$ watch ceph -sПример ожидаемого результата во время ребалансингаEvery 2,0s: ceph -scluster:id: c77b05b1-98de-471f-b259-f6a51b8897e5health: HEALTH_WARNDegraded data redundancy: 45385/379941 objects degraded (11.945%), 43 pgs degradedservices:mon: 3 daemons, quorum csn002,csn004,csn005 (age 2d)mgr: csn002(active, since 2d), standbys: csn004, csn005mds: 3 up:standbyosd: 18 osds: 18 up (since 2d), 18 in (since 2d); 54 remapped pgsdata:pools: 3 pools, 193 pgsobjects: 126.65k objects, 494 GiBusage: 1.5 TiB used, 4.7 TiB / 6.1 TiB availpgs: 45385/379941 objects degraded (11.945%)16130/379941 objects misplaced (4.245%)139 active+clean43 active+recovery_wait+undersized+degraded+remapped4 active+recovering+undersized+remapped4 active+recovery_wait+remapped3 active+remapped+backfill_waitio:client: 0 B/s rd, 255 B/s wr, 0 op/s rd, 0 op/s wrПример ожидаемого результата после завершения ребалансингаEvery 2,0s: ceph -scluster:id: 1c67f605-f3d0-4770-9f88-d1d45b5c4bd3health: HEALTH_OKservices:mon: 3 daemons, quorum csn002,csn004,csn005 (age 13h)mgr: csn002(active, since 13h), standbys: csn004, csn005mds: 3 up:standbyosd: 18 osds: 18 up (since 13h), 18 in (since 13h)data:pools: 4 pools, 129 pgsobjects: 1.35k objects, 5.0 GiBusage: 34 GiB used, 6.1 TiB / 6.1 TiB availpgs: 129 active+clean
-
-
После завершения ребалансинга повторите действия из шага 4 для перемещения следующего узла.
-
После перемещения узлов примените правила репликации к пулам:
-
Получите существующие правила:
$ ceph osd crush rule dumpПример ожидаемого результата[{"rule_id": 0,"rule_name": "replicated_rule","ruleset": 0,"type": 1,"min_size": 1,"max_size": 10,"steps": [{"op": "take","item": -1,"item_name": "default"},{"op": "chooseleaf_firstn","num": 0,"type": "host"},{"op": "emit"}]}]В примере приведено правило репликации, распределяющее копии данных между узлами. В этом случае все копии данных могут быть распределены на узлы, находящиеся в одной стойке. В результате отказа стойки все копии данных окажутся недоступны.
-
Проверьте, к каким пулам уже применено правило:
$ ceph osd pool ls detailПример ожидаемого результатаpool 1 'cinder-volumes' replicated size 3 min_size 1 crush_rule 0 object_hash rjenkins pg_num 32 pgp_num 32 autoscale_mode on last_change 563 lfor 0/505/503 flags hashpspool stripe_width 0 application rbdpool 2 'vms' replicated size 3 min_size 1 crush_rule 0 object_hash rjenkins pg_num 64 pgp_num 64 autoscale_mode on last_change 572 flags hashpspool,selfmanaged_snaps stripe_width 0 application rbdpool 3 'manila-volumes' replicated size 3 min_size 1 crush_rule 0 object_hash rjenkins pg_num 32 pgp_num 32 autoscale_mode on last_change 567 lfor 0/505/503 flags hashpspool stripe_width 0 application rbdpool 4 'device_health_metrics' replicated size 3 min_size 1 crush_rule 0 object_hash rjenkins pg_num 1 pgp_num 1 autoscale_mode on last_change 569 flags hashpspool stripe_width 0 pg_num_min 1 application mgr_devicehealthВ примере подстрока
crush_rule 0означает, что правило с порядковым номером0из вывода командыceph osd crush rule dumpуже применено к существующим пулам. -
Создайте правило репликации данных по стойкам:
$ ceph osd crush rule create-replicated <ПРАВИЛО> default rack --cluster <КЛАСТЕР>Здесь:
<ПРАВИЛО>— имя правила. Пример:replicated_rack_rule.<КЛАСТЕР>— имя кластера. Пример:ceph.
-
Получите информацию по созданному правилу:
$ ceph osd crush rule dump <ПРАВИЛО>Здесь
<ПРАВИЛО>— имя правила. Пример:replicated_rack_rule.Пример ожидаемого результата{"rule_id": 1,"rule_name": "replicated_rack_rule","ruleset": 1,"type": 1,"min_size": 1,"max_size": 10,"steps": [{"op": "take","item": -1,"item_name": "default"},{"op": "chooseleaf_firstn","num": 0,"type": "rack"},{"op": "emit"}]} -
Примените созданное правило репликации данных по стойкам к существующим пулам, чтобы данные перераспределились между стойками:
$ ceph osd pool set cinder-volumes crush_rule <ПРАВИЛО> --cluster cephЗдесь
<ПРАВИЛО>— имя правила. Пример:replicated_rack_rule.Пример ожидаемого результатаset pool 1 crush_rule to replicated_rack_ruleПосле запуска процесса начнется ребалансинг:
Пример ребалансингаhealth: HEALTH_WARNDegraded data redundancy: 40/4062 objects degraded (0.985%), 2 pgs degradedservices:mon: 3 daemons, quorum csn002,csn004,csn005 (age 14h)mgr: csn002(active, since 14h), standbys: csn004, csn005mds: 3 up:standbyosd: 18 osds: 18 up (since 14h), 18 in (since 14h); 40 remapped pgsdata:pools: 4 pools, 129 pgsobjects: 1.35k objects, 5.0 GiBusage: 35 GiB used, 6.1 TiB / 6.1 TiB availpgs: 40/4062 objects degraded (0.985%)648/4062 objects misplaced (15.953%)85 active+clean39 active+clean+remapped3 active+recovering1 active+recovery_wait+degraded1 active+recovery_wait+degraded+remappedio:recovery: 75 MiB/s, 7 keys/s, 20 objects/s -
После окончания ребалансинга примените новое правило к следующему пулу.
-
Чтобы созданное правило репликации назначалось автоматически новым пулам, удалите старое правило.
Если старое правило используется пулами:
-
Назначьте пулам новое правило.
-
Удалите старое правило:
$ ceph osd crush rule rm <ПРАВИЛО>Здесь
<ПРАВИЛО>— имя правила. Пример:replicated_rule