ydb-platform / nbs

Network Block Store
Apache License 2.0
50 stars 14 forks source link

[NBS] Динамическая смена типа диска #1354

Open EvgeniyKozev opened 3 weeks ago

EvgeniyKozev commented 3 weeks ago

Сценарий который клиенты планируют реализовать: Клиент создает медленный диск и понимает что его не хватает. Возникает вопрос миграции на более производительный тип диска. Работа через снимки не всегда удобна и требует простой приложения. Ряд клиентов хочет автоматизированный и удобный механизм миграции на другой тип дисков с минимальным простоем. Пример реализации без остановки ВМ есть у vmware storage vmotion. Клиенты хотят аналогичный функционал.

Описание конечного результата (Definition of Done): Клиент может менять тип диска, при этом конвертация происходит с минимальной остановкой ВМ или без остановки и без деградации на период снятия снимка.

ID диска должен сохраняться.

qkrorlqr commented 3 weeks ago

Клиент может менять тип диска, при этом конвертация происходит с минимальной остановкой ВМ или без остановки и без деградации на период снятия снимка.

варианты "с минимальной остановкой ВМ", "без остановки ВМ, но с фризом на 30-60 сек", "с фризом до 5 сек" принципиально отличаются по сложности реализации

общем-то хорошо понятно, как конкретно каждый из вариантов реализовать, но надо бы определиться все-таки с требованиями

drbasic commented 2 weeks ago

Есть вариант сделать без даунтайма. Общая идея такая:

  1. Допустим имеется диск с именем ХХХХ типа А
  2. Создаем диск нового типа В с именем ХХХХ-1, возможно диск станет чуть большего размера
  3. Прописываем имя ХХХХ-1 в метаинформацию к диску ХХХХ
  4. Создаем в диске-источнике партишен-обертку, которая переносит все данные из диска источника в диск назначения, включая текущие записи, которые выполняет клиент в диск-источник
  5. после завершения наливки нового диска удаляем диск источник
  6. отправляем в компьют сигнал что у диска ХХХХ сменился тип с А на В, чтобы биллинг считался для нового типа диска
  7. для компьюта имя диска остается прежним.
  8. когда требуется поднять таблетку ХХХХ нбс будет поднимать таблетку ХХХХ-1
  9. в метаинформации диска ХХХХ-1 будет написано что исходное имя ХХХХ
  10. при отправке статистики данные будут отправляться с именем диска ХХХХ
  11. в логах можно оставить чтобы писалось имя диска ХХХХ-1, либо аккуратно найти и поправить все отправки, которых много
  12. если пользователь изменит тип диска еще раз - то можно задать новому диску снова имя ХХХХ тогда у нас будет инвариант что таблетка диска всегда называется либо ХХХХ либо ХХХХ-1

При такой реализации кажется самое сложное - это стартовать таблетку ХХХХ-1 вместо ХХХХ