Вводные ¶
Имеется такой кластер
- Ceph 15.2.1 установленный с cephadm
- 14 OSD
- 3 MON
- 3 RGW
- 3 MDS
- 3 CRUSH
Вышла версия 15.2.4, хотим обновиться.
Запускаемся ¶
Cephadm предоставляет механизм для обновления, но с ходу у меня он не завёлся, пришлось его сопровождать. Давайте посмотрим что вообще нужно обновить.
1
| ceph orch upgrade check ceph/ceph 15.2.4
|
Перед глазами JSON со списком демонов, которые уже обновлены и те, которые ещё отличаются от запрошенной версии, то есть все, на данный момент. Пора запускаться.
Так, процедура запущена, теперь есть насколько команд, которые стоит выполнять для получения сводки.
ceph status
- для получения обобщённой информации о состоянии кластера. Можно в отдельном терминале запустить так: watch -n 10 ceph status
ceph status -W cephadm
- вот эту команду точно стоит запустить в терминале, чтобы смотреть именно лог оркестратора.
Временные трудности ¶
Вызываем ceph orch ps
и видим, что все мониторы и менеджеры обновлены, хорошо, но теперь мы в HEALTH_ERROR с ошибкой, что я привёл ниже.
1
| module 'cephadm' has failed: auth get failed: failed to find client.crash.01 in keyring retval: -2
|
Оказывается, не хватает ключей. Создать нужно по одному для каждого crash-a и перезапустить оркестрацию.
1
2
3
4
5
6
7
| for i in $(ceph orch ps | grep -oE 'crash.[0-9]+'); do
ceph auth get-or-create "client.$i" mgr "profile crash" mon "profile crash"
done
ceph orch upgrade stop
ceph mgr module disable cephadm
ceph mgr module enable cephadm
ceph orch upgrade start ceph/ceph 15.2.4
|
И вот мы видим, что crash-ы тоже готовы, хорошо, но дальше что-то всё висит. Да, HEALTH_OK, но ceph orch ps
показывает, что все OSD ещё на старой версии. В логах видим следующее.
1
| Upgrade: It is NOT safe to stop osd.0
|
Ага, оркестратор боится останавливать демоны osd с данными. Поможем. У меня ситуация обстоит так.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| # ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 14.00000 root default
-3 5.00000 host 01
0 hdd 1.00000 osd.0 up 1.00000 1.00000
1 hdd 1.00000 osd.1 up 1.00000 1.00000
2 hdd 1.00000 osd.2 up 1.00000 1.00000
3 hdd 1.00000 osd.3 up 1.00000 1.00000
4 hdd 1.00000 osd.4 up 1.00000 1.00000
-5 5.00000 host 02
5 hdd 1.00000 osd.5 up 1.00000 1.00000
6 hdd 1.00000 osd.6 up 1.00000 1.00000
7 hdd 1.00000 osd.7 up 1.00000 1.00000
8 hdd 1.00000 osd.8 up 1.00000 1.00000
9 hdd 1.00000 osd.9 up 1.00000 1.00000
-7 4.00000 host 03
10 hdd 1.00000 osd.10 up 1.00000 1.00000
11 hdd 1.00000 osd.11 up 1.00000 1.00000
12 hdd 1.00000 osd.12 up 1.00000 1.00000
13 hdd 1.00000 osd.13 up 1.00000 1.00000
|
Сначала я останавливал osd по одному.
Потом расслабился и стал выбрасывать по очереди целый сервер. Когда мы выводим из оборота osd.0, через время, когда балансировка заканчивается, ceph status -W cephadm
жалуется уже на osd.1, а ceph orch ps
показывает, что osd.0 обновлён. Мысль ясна, главное назад не забыть ввести.
Короче говоря, выводим osd первого сервера, ждём пока cephadm жалуется на следующие и вводим обратно. Дальше, стоит дождаться HEALTH_OK, прежде чем выводить osd следующего сервера, а то так и без данных не долго остаться…
Опираясь на свой osd tree, план, если делать начисто, таков:
- out 0, 1, 2, 3, 4
- ждём жалобу на 5
- in 0, 1, 2, 3, 4
- ждём HEALTH_OK
- out 5, 6, 7, 8, 9
- ждём жалобу на 10
- in 5, 6, 7, 8, 9
- ждём HEALTH_OK
- out 10, 11, 12, 13
- смотрим, что всё обновилось
ceph orch ps
- in 10, 11, 12, 13
- ждём HEALTH_OK
1
2
3
| ╔═╗╔═╗╔═╗╦ ╦ ╦ ╦╔═╗╔═╗╦═╗╔═╗╔╦╗╔═╗╔╦╗┬
║ ║╣ ╠═╝╠═╣ ║ ║╠═╝║ ╦╠╦╝╠═╣ ║║║╣ ║║│
╚═╝╚═╝╩ ╩ ╩ ╚═╝╩ ╚═╝╩╚═╩ ╩═╩╝╚═╝═╩╝o
|
Заметки ¶
Кластер полупустой, по этому было быстро. Будь оно иначе, заняло бы дни…
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| % sudo ceph osd df [22]
ID CLASS WEIGHT REWEIGHT SIZE RAW USE DATA OMAP META AVAIL %USE VAR PGS STATUS
0 hdd 1.00000 1.00000 5.5 TiB 1.4 GiB 438 MiB 39 KiB 1024 MiB 5.5 TiB 0.03 1.11 37 up
1 hdd 1.00000 1.00000 5.5 TiB 1.4 GiB 454 MiB 2.2 MiB 1022 MiB 5.5 TiB 0.03 1.12 46 up
2 hdd 1.00000 1.00000 5.5 TiB 1.3 GiB 314 MiB 1.0 MiB 1023 MiB 5.5 TiB 0.02 1.01 24 up
3 hdd 1.00000 1.00000 5.5 TiB 1.2 GiB 161 MiB 2.5 MiB 1022 MiB 5.5 TiB 0.02 0.90 34 up
4 hdd 1.00000 1.00000 5.5 TiB 1.2 GiB 242 MiB 21 KiB 1024 MiB 5.5 TiB 0.02 0.96 34 up
5 hdd 1.00000 1.00000 5.5 TiB 1.2 GiB 212 MiB 3.0 MiB 1021 MiB 5.5 TiB 0.02 0.93 34 up
6 hdd 1.00000 1.00000 5.5 TiB 1.5 GiB 485 MiB 533 KiB 1023 MiB 5.5 TiB 0.03 1.14 35 up
7 hdd 1.00000 1.00000 5.5 TiB 1.3 GiB 280 MiB 1.8 MiB 1022 MiB 5.5 TiB 0.02 0.99 41 up
8 hdd 1.00000 1.00000 5.5 TiB 1.3 GiB 265 MiB 19 MiB 1005 MiB 5.5 TiB 0.02 0.97 38 up
9 hdd 1.00000 1.00000 5.5 TiB 1.4 GiB 359 MiB 949 KiB 1023 MiB 5.5 TiB 0.02 1.05 28 up
10 hdd 1.00000 1.00000 5.5 TiB 1.2 GiB 179 MiB 467 KiB 1024 MiB 5.5 TiB 0.02 0.91 33 up
11 hdd 1.00000 1.00000 5.5 TiB 1.1 GiB 132 MiB 2.8 MiB 1021 MiB 5.5 TiB 0.02 0.87 23 up
12 hdd 1.00000 1.00000 5.5 TiB 1.3 GiB 358 MiB 19 MiB 1005 MiB 5.5 TiB 0.02 1.04 36 up
13 hdd 1.00000 1.00000 5.5 TiB 1.3 GiB 301 MiB 734 KiB 1023 MiB 5.5 TiB 0.02 1.00 39 up
TOTAL 76 TiB 18 GiB 4.1 GiB 54 MiB 14 GiB 76 TiB 0.02
MIN/MAX VAR: 0.87/1.14 STDDEV: 0.00
|