Обновление ceph с Jewel на Luminous

Появилась задача обновить кластер ceph на luminous. Процесс обновления сводится к обновлению mon-нод, затем обновлению mds-нод, затем обновлению osd-нод.

Подготовительные работы

Кластер должен находиться в состоянии HEALTH_OK с максимально возможным количеством работающих osd-шек. Должен стоять флаг sortbitwise (можно узреть с помощью ceph -s), если переконвертировать кластер без этого флага, то скорее всего данные, хранящиеся в кластере будут утеряны. Установить этот флаг можно командой:
ceph osd set sortbitwise
На всех нодах в ceph.conf должно быть
mon allow pool delete = true
На всех нодах должен быть подключен репозиторий с новой версией ceph.

Обновление Mon-нод

Обновляем ПО:
yum clean all && yum update
Рестартуем демона ceph-mon. Заодно смотрим ceph -s на предмет вхождения нового mon-а в кластер.
systemctl restart ceph-mon@hostname

Обновление MDS-нод

Обновляем ПО:
yum clean all && yum update
Рестартуем демона ceph-mds. Заодно смотрим ceph -s на предмет вхождения нового mds-а в кластер.
systemctl restart ceph-mds@hostname

Обновление OSD-нод

Обновляем ПО:
yum clean all && yum update
Ставим кластеру флаг noout.
ceph osd set noout
Рестартуем демонов ceph-osd. Заодно смотрим ceph -s на предмет вхождения новых osd-шек в кластер.
systemctl restart ceph.target
Убираем флаг noout
ceph osd unset noout

Последние штрихи после обновления всех нод кластера

ceph osd require-osd-release luminous
ceph osd set-require-min-compat-client jewel

Перевод OSD-шек на формат BlueStore

Замечание: BlueStore от Jewel не взлетает на Luminous. BlueStore-osd могут благополучно сосуществовать с FileStore-osd как в одном кластере так и на одной ноде. Переконвертировать osd из одного формата в другой на лету и/или на месте невозможно, самый «чистый» способ — пересоздание osd-шек. Выводим все osd-шки, находящиеся на osd-ноде из кластера. Ждём окончания ребалансировки. Выводим osd-шки пачками, штук по 4-5, при бОльшем количестве выводимых osd-шек процесс будет заметно аффектить клиентов.
ceph osd out osd.NUM
Заставляем кластер забыть об этих osd-шках.
ceph osd purge osd.NUM
Удаляем партиции журналов и партиции FileStore-ов от старых OSD.
for i in {f..z}; do (parted /dev/sd$i rm 1 && partprobe /dev/sd$i &); done;
for i in {a..i}; do (parted /dev/sda$i rm 1 && partprobe /dev/sda$i &); done;
for i in {4..8}; do (parted /dev/sda rm $i &) ; (parted /dev/sdb rm $i &); done;
for i in {1..10}; do (parted /dev/sdc rm $i &) ; (parted /dev/sdd rm $i &); done;
for i in {a..d}; do (partprobe /dev/sd$i &); done;
Создаём новые OSD-шки.
ceph-deploy osd prepare --bluestore node:device
И когда все они будут готовы — мы обновились корректно:)

Вам также может понравиться

About the Author: Maxim

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.