Обновление модуля crud
Модуль crud используется вместе
с vshard в шардированных кластерах. Обновление crud имеет ограничение совместимости, введённое в версии 1.7.0.
Начиная с версии crud 1.7.0, модуль автоматически переводит кластер в безопасный режим при запуске
ребалансировки vshard.
Безопасный режим предотвращает запись данных в неправильный набор реплик во время ребалансировки.
Важно учитывать следующие особенности безопасного режима:
- Безопасный режим включается независимо на каждом экземпляре хранилища (storage), участвующем в ребалансировке;
- Безопасный режим не отключается автоматически после завершения ребалансировки и требует явного отключения.
Проверить, включён ли безопасный режим на узле хранилища:
tarantool> _crud.rebalance_safe_mode_status()
или по метрике tnt_crud_storage_safe_mode_enabled.
Чтобы вернуться к обычному режиму после ребалансировки:
- Дождаться завершения миграции бакетов (ребалансировки vshard).
- На каждом роутере выполнить очистку кэша маршрутизации CRUD:
crud.rebalance.router_cache_clear()
- На каждом экземпляре хранилища выполнить отключение безопасного режима через Storage API
_crud:
- команду необходимо выполнить на всех storage, включая реплики:
_crud.rebalance_safe_mode_disable()
Запросы к спейсам на движке vinyl всегда выполняются в безопасном режиме
независимо от текущего статуса безопасного режима.
При обновлении с версии crud ниже 1.7.0 до версии 1.7.0 и выше
действует следующее ограничение совместимости:
В версиях CRUD 1.7.0–1.7.4 хранилища требуют bucket_id.
Поэтому операции get, update и delete, отправленные роутером с
CRUD ниже 1.7.0, завершаются ошибкой. Остальные операции (insert, replace, upsert, select, count) работают в обычном режиме.
Начиная с CRUD 1.7.5 хранилища поддерживают работу с роутерами ниже
1.7.0 в режиме совместимости. Если bucket_id отсутствует, хранилище
выполняет операцию без bucket ref, записывает предупреждение в журнал,
а при наличии модуля metrics также увеличивают tnt_crud_storage_nil_bucket_id_compat_total.
На хранилищах (storage) с CRUD 1.7.5+, пока все роутеры не обновлены до CRUD 1.7.0
или выше, операции get, update и delete выполняются в режиме
совместимости со сниженной безопасностью ребалансировки. Хранилища записывают
предупреждение в журнал, а при наличии модуля metrics также увеличивают tnt_crud_storage_nil_bucket_id_compat_total.
При обновлении crud соблюдайте следующий порядок:
-
При обновлении
crudдо версий ниже 1.7.0 или до версии начиная с 1.7.5 используйте стандартный порядок обновления: сначала хранилища, затем роутеры:- Обновление узлов-реплик хранилища
- Обновление мастер-узлов хранилища
- Обновление роутеров
-
При переходе через версии
crud1.7.0–1.7.4 обновляйте сначала роутеры, затем хранилища. Не выполняйте ребалансировку до завершения обновления:- Обновление роутеров.
- Обновление узлов-реплик хранилища.
- Обновление мастер-узлов хранилища.
Подробнее о стандартном порядке обновления кластера см. в разделе Обновление кластера с репликацией.