TDB Documentation portal logo
Помощь
Обновлена 22 октября 2026 г. в 11:37

Обновление Tarantool Database

Для обновления версии Tarantool DB 3.x рекомендуется использовать инсталлятор Ansible Tarantool Enterprise (ATE).

См. также: Установка через Ansible Tarantool Enterprise.

Обновить Tarantool DB можно, используя один из способов ниже:

Для обновления Tarantool DB рекомендуется использовать первый способ — обновление приложения без простоя.

Обновление без простоя через ATE с помощью Docker

Для обновления Tarantool DB без простоя (поплечевого обновления) используется стандартный порядок обновления узлов:

  1. Обновление узлов-реплик хранилища
  2. Обновление мастер-узлов хранилища
  3. Обновление роутеров

Обновление до версии 3.2.0 и выше

Для обновления Tarantool DB без простоя через инсталлятор ATE используется сценарий continuous_update.yml. Чтобы выполнить обновление продукта до версии 3.2.0 или выше:

  1. Выполните обновление версии Tarantool DB в обычном порядке через ATE, используя сценарий continuous_update.yml. При работе этого сценария обновление схемы БД через box.schema.upgrade() выполняется автоматически. Описание сценария приведено в разделе Tarantool 3.x: Обновление приложения без простоя документации ATE.

  2. При обновлении Tarantool DB до версии 3.2.0 Tarantool Cluster Manager (TCM) обновляется до версии 1.10.0. В TCM 1.10.0 изменён формат хранения подписи объектов TCM. Если TCM 1.10.0 запускается на уже существующем хранилище конфигурации (etcd или TbCS), например при обновлении с TCM 1.9.1 или более ранней версии, после завершения сценария обновления TDB необходимо однократно выполнить переподписание данных (resign-data) в хранилище новым ключом. Без этого TCM не запустится из-за ошибки верификации подписи. При установке TCM 1.10.0 с нуля на новом хранилище или обновлении до версии выше 3.2.0 выполнять resign-data не требуется.

    Чтобы успешно обновить TCM до версии 1.10.0 через ATE, необходимо выполнить следующие шаги в указанном порядке:

    1. Остановите TCM, если он запущен. Выполните запуск сценария обновления TCM через ATE playbooks/tcm/install.yml. После запуска скрипта сервис TCM не запустится. Это нормальная реакция системы перед выполнением критических шагов безопасности.

    2. Выполните команду /app/tarantool/cluster-manager/tcm resign-data, указав параметры подключения к хранилищу TCM — etcd или TbCS (аналогично тому, как они передаются при запуске TCM):

      ./tarantool-cluster-manager resign-data

      Параметры могут быть переданы одним из способов ниже, в зависимости от вашей конфигурации:

      • через опцию -config с путем к YAML-файлу или строкой конфигурации. Пример: resign_data -config /path/to/config.yaml;
      • через переменные окружения.

      Если скрипт чтения конфигурации использует YAML-файл, убедитесь, что он доступен и корректен;

    3. После выполнения команды resign_data повторно запустите скрипт установки playbooks/tcm/install.yml или перезапустите службу TCM.

  3. После завершения обновления задайте для пользователя, от имени которого выполняются CRUD-операции через роутер, права для выполнения CRUD-операций на чтение и запись данных. Минимальный набор прав включает доступ на чтение и запись в необходимые пользовательские спейсы, доступ на чтение системных спейсов _bucket, _ddl_sharding_key и _ddl_sharding_func, а также доступ на выполнение необходимых методов crud.*. Минимальный набор необходимых разрешений приведен в разделе Модель безопасности Tarantool DB.

    На стороне роутера точечно выдайте права на выполнения (execute) на методы crud.*, которые вызываются через lua_call:

    credentials: users:   db_user:     password: 'secret'     privileges:       - permissions: [execute]         lua_call:           - crud.select           - crud.get           - crud.insert           - crud.replace           - crud.update           - crud.upsert           - crud.delete

    На стороне хранилища выдайте:

    • права на чтение и запись в пользовательские спейсы;
    • доступ к системным спейсам для маршрутизации (_bucket, _ddl_sharding_key, _ddl_sharding_func).
    credentials:  users:    db_user:      password: 'secret'      privileges:        - permissions: [read]          spaces: [_bucket]        - permissions: [read]          spaces: [_ddl_sharding_key, _ddl_sharding_func]        - permissions: [read, write]          spaces: [bands]

    Если в кластере используется архивация данных через модуль cooler, дополнительно требуются права на чтение системного спейса _cooler:

    box.schema.user.grant('db_user', 'read', 'space', '_cooler')

Обновление до версий 3.1.x

Инструкция по обновлению TDB до версий 3.1.x отличается от общей процедуры и требует выполнения дополнительных шагов. При обновлении до версий TDB 3.1.0 и 3.1.1:

  1. Перед началом обновления создайте с помощью миграции на всех экземплярах хранилища спейс _crud_settings_local, используя скрипт миграции ниже:

    local config = require('config')local fun = require('fun')local function is_storage()    return fun.index('roles.crud-storage', config:get('roles')) ~= nilendlocal function apply()    if is_storage() then        local settings_space = box.schema.space.create('_crud_settings_local', {            engine = 'memtx',            is_local = true,            if_not_exists = true,            format = {                { name = 'key', type = 'string' },                { name = 'value', type = 'any' },            },        })        settings_space:create_index('primary', { parts = { 'key' }, if_not_exists = true })    end    return trueendreturn {    apply = {        scenario = apply,    }}
  2. После завершения миграции выполните обновление версии Tarantool DB в обычном порядке через ATE. Для обновления используйте сценарий continuous_update.yml из документации ATE: Tarantool 3.x: Обновление приложения без простоя. При работе этого сценария обновление схемы БД через box.schema.upgrade() выполняется автоматически.

  3. После завершения обновления задайте для пользователя, от имени которого выполняются CRUD-операции через роутер, права для выполнения CRUD-операций на чтение и запись данных. Минимальный набор прав включает доступ на чтение и запись в необходимые пользовательские спейсы, доступ на чтение системных спейсов _bucket, _ddl_sharding_key и _ddl_sharding_func, а также доступ на выполнение необходимых методов crud.*. Минимальный набор необходимых разрешений приведен в разделе Модель безопасности Tarantool DB.

    На стороне роутера точечно выдайте права на выполнения (execute) на методы crud.*, которые вызываются через lua_call:

    credentials: users:   db_user:     password: 'secret'     privileges:       - permissions: [execute]         lua_call:           - crud.select           - crud.get           - crud.insert           - crud.replace           - crud.update           - crud.upsert           - crud.delete

    На стороне хранилища выдайте:

    • права на чтение и запись в пользовательские спейсы;
    • доступ к системным спейсам для маршрутизации (_bucket, _ddl_sharding_key, _ddl_sharding_func).
    credentials:  users:    db_user:      password: 'secret'      privileges:        - permissions: [read]          spaces: [_bucket]        - permissions: [read]          spaces: [_ddl_sharding_key, _ddl_sharding_func]        - permissions: [read, write]          spaces: [bands]

    Если в кластере используется архивация данных через модуль cooler, дополнительно требуются права на чтение системного спейса _cooler:

    box.schema.user.grant('db_user', 'read', 'space', '_cooler')

Обновление приложения через ATE с простоем с помощью Docker

Для обновления Tarantool DB с простоем используется сценарий install_3_0.yml. Описание сценария приведено в разделе Tarantool 3.x: Установка приложения документации по инсталлятору ATE. При работе этого сценария метод box.schema.upgrade() не выполняется автоматически. Метод нужно вызвать явно после выполнения сценария install_3_0.yml, используя команду tt replicaset upgrade.

Была ли статья полезна?