Обновление схемы данных через box.schema.upgrade()¶
В некоторых новых версиях Tarantool DB добавляются изменения в системных спейсах, которые нужны для новой функциональности. При обновлении на такую версию Tarantool DB новой версии будет корректно работать со старой схемой БД, но появится предупреждение о необходимости обновить схему.

Чтобы обновить схему, необходимо вызвать метод box.schema.upgrade() на мастер-узлах. Метод обновляет системные спейсы и делает схему полностью совместимой с новой версией. Это финальный шаг при обновлении на новую версию Tarantool DB, в дальнейшем откат на старую версию будет возможен только с даунгрейдом схемы.
Перед вызовом box.schema.upgrade() должны быть выполнены следующие условия:
все экземпляры в кластере обновлены до новой версии;
в наборах реплик есть только один мастер-узел – экземпляр, доступный для записи;
кластер не нагружен. Это необходимо, чтобы обновление прошло быстро и запросы на мастер-узлы не мешали работе кластера.
Способы обновления схемы¶
Есть три способа вызвать метод box.schema.upgrade():
через инсталлятор Ansible Tarantool Enterprise (ATE);
через утилиту tt CLI;
в файле миграции.
ATE¶
При обновлении без простоя через ATE метод box.schema.upgrade()
будет вызван автоматически при выполнении этого сценария.
При установке новой версии с простоем метод box.schema.upgrade() не выполняется автоматически.
Вызвать box.schema.upgrade() явно можно, выполнив сценарий eval_schema_update.yml:
docker run --network host -it --rm \
-v ${PATH_TO_PRIVATE_KEY}:/ansible/.ssh/id_private_key:Z \
-v ${PATH_TO_INVENTORY}:/ansible/inventories/hosts.yml:Z \
-e SUPER_USER_NAME=${SUPER_USER_NAME} \
ansible-tarantool-enterprise:${DEPLOY_TOOL_VERSION_TAG} \
ansible-playbook -i /ansible/inventories/hosts.yml \
--extra-vars '{
"ansible_ssh_private_key_file":"/ansible/.ssh/id_private_key",
"super_user":"'${SUPER_USER_NAME}'",
"tarantool_shared_become_user":"tarantool",
}' \
playbooks/eval_schema_update.yml
tt CLI¶
Обновить схему можно также через утилиту tt CLI.
Для этого выполните команду tt replicaset upgrade на каждом наборе реплик в кластере:
tt replicaset upgrade client:secret@127.0.0.1:3301
Подробный пример обновления схемы через tt CLI приведен в соответствующем разделе документации.
Миграции¶
При установке новой версии Tarantool DB с простоем через ATE или иным способом можно применить миграцию,
где будет выполнен метод box.schema.upgrade().
Миграции выполняются на мастер-узлах.
Перед вызовом box.schema.upgrade() должны быть выполнены следующие условия:
все экземпляры в кластере обновлены до новой версии;
в наборах реплик есть только один мастер-узел – экземпляр, доступный для записи;
кластер не нагружен. Это необходимо, чтобы обновление прошло быстро и запросы на мастер-узлы не мешали работе кластера.
Пример файла миграции:
local function apply()
box.snapshot()
box.schema.upgrade()
box.snapshot()
end
return {
apply = {
scenario = apply,
}
}
Подробный пример обновления схемы через миграции приведен в соответствующем разделе документации.