Обновление модуля crud
Модуль crud используется вместе с vshard в шардированных кластерах. Обновление crud имеет ограничение совместимости, введённое в версии 1.7.0.
Примечание
Требования к минимальному набору разрешений для работы CRUD см. в разделе Чтение и запись данных через модуль CRUD.
Начиная с версии crud 1.7.0, модуль автоматически переводит кластер в безопасный режим при запуске ребалансировки vshard. Безопасный режим предотвращает запись данных в неправильный набор реплик во время ребалансировки.
Важно учитывать следующие особенности безопасного режима:
- безопасный режим включается независимо на каждом экземпляре хранилища (storage), участвующем в ребалансировке;
- безопасный режим не отключается автоматически после завершения ребалансировки и требует явного отключения.
Проверить, включён ли безопасный режим на узле хранилища:
tarantool> _crud.rebalance_safe_mode_status()
или по метрике tnt_crud_storage_safe_mode_enabled.
Примечание
Метрика безопасного режима доступна только при установленном модуле metrics.
Чтобы вернуться к обычному режиму после ребалансировки:
Дождаться завершения миграции бакетов (ребалансировки vshard).
На каждом роутере выполнить очистку кэша маршрутизации CRUD:
crud.rebalance.router_cache_clear()
На каждом экземпляре хранилища выполнить отключение безопасного режима через Storage API
_crud. Команду необходимо выполнить на всех экземплярах хранилища, включая реплики:_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 используйте стандартный порядок обновления — сначала хранилища, затем роутеры:
- Обновление узлов-реплик хранилища
- Обновление мастер-узлов хранилища
- Обновление роутеров
Предупреждение
Релизы CRUD 1.7.0–1.7.4 были отозваны из‑за несовместимости Storage API с роутерами более старых версий. Обновляться на эти версии не рекомендуется. При обновлении с версии ниже 1.7.0 следует переходить сразу на 1.7.5+, не используя 1.7.0–1.7.4 как промежуточные версии.
При переходе через версии crud 1.7.0–1.7.4 обновляйте сначала роутеры, затем хранилища. Не выполняйте ребалансировку до завершения обновления:
- Обновление роутеров
- Обновление узлов-реплик хранилища
- Обновление мастер-узлов хранилища
Подробнее о стандартном порядке обновления кластера см. в соответствующем разделе.