Обновление схемы данных через box.schema.upgrade() | Tdb
Руководство по установке и обновлению Обновление схемы данных через box.schema.upgrade()

Обновление схемы данных через box.schema.upgrade()

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

Чтобы обновить схему, необходимо вызвать метод box.schema.upgrade() на мастер-узлах. Метод обновляет системные спейсы и делает схему полностью совместимой с новой версией. Это финальный шаг при обновлении на новую версию Tarantool DB, в дальнейшем откат на старую версию будет возможен только с даунгрейдом схемы.

Перед вызовом box.schema.upgrade() должны быть выполнены следующие условия:

  • все экземпляры в кластере обновлены до новой версии;

  • в наборах реплик есть только один мастер-узел – экземпляр, доступный для записи;

  • кластер не нагружен. Это необходимо, чтобы обновление прошло быстро и запросы на мастер-узлы не мешали работе кластера.

Способы обновления схемы

Есть три способа вызвать метод box.schema.upgrade():

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,
    }
}

Подробный пример обновления схемы через миграции приведен в соответствующем разделе документации.

Нашли ответ на свой вопрос?
Обратная связь