Бывают ситуации когда  в ceph нужно смигрировать данные между пулами. Когда обьемы десятки терабайт это невозможно выполнить быстро, особенно на медленном хранилище. В этом на время переноса используют кеш.

Бывают ситуации когда  в ceph нужно смигрировать данные между пулами. Когда обьемы десятки терабайт это невозможно выполнить быстро, особенно на медленном хранилище. В этом на время переноса используют кеш.

Если вас даунтайм устраивает можете использовать этот вариант.

https://gist.github.com/ksingh7/ae09f33eded05e8215aa

У нас задача смигрировать данные (s3 bucket) c пула который с типом данных erasure (кодирование шифрование) на replicated.

Что мы будем делать:

Отключим rgw (минута простоя будет).

Переименуем пул, создадим новый пул с нужными типами репликации со старым именем.

Поставим старый пул кешом к новому.

 

Смегрируем данные.

 

 

 

На всех нодах останавливаем radosgw


systemctl stop ceph-radosgw.target


 

Проверяем статус ceph чтобы все rgw были недоступны иначе на время переезда если попытаються туда залить данные он создаст бакет, вы не сможете смигрировать данные.

ceph -s

 

Переименовываем пул testpool, на его месте создадим новый с таким же названием, это нужно для того чтобы использовать кеш.


ceph osd pool rename testpool testpool-old


Создаем новый пул  с правилом репликации replicated  (replicated_hdd), плейменсгруп 8 (настраиваем под себя).


ceph osd pool create testpool 8 8 replicated replicated_hdd


Если у вас не разбит или вы хотите в дефолтном создать создаем без replicated replicated_hdd

Проверяем пулы


rados df

 


Создаем кеш для пула нового пула testpool, кешом будет старый пул (в этом вся суть) с данными.

По скольку кеш не пустой то используем ключ —force-nonempty


ceph osd tier add testpool testpool-old —force-nonempty


 

Ставим форвард


ceph osd tier cache-mode testpool-old forward —yes-i-really-mean-it


Переключаем пользователей на кеш чтобы были видны все данные


ceph osd tier set-overlay testpool testpool-old


 

После этого можем запустить rgw


systemctl start ceph-radosgw.target


Начинаем вытеснять данные с старого пула (использовать в скрине или продолжить после прерывания той же командой).


rados -p testpool-old cache-flush-evict-all


Проверяем процесс миграции


rados df


Если все перенесено, отвязываем overlay и кеш.


ceph osd tier remove-overlay  testpool

ceph osd tier remove testpool testpool-old


 

Теги ceph