Tarantool CE/EE Documentation portal logo
Помощь
Обновлена 15 сентября 2026 г. в 08:55

Обновление кластера с репликацией

Ниже приведены общие инструкции по обновлению кластера Tarantool с репликацией. Для обновления с некоторых версий требуются дополнительные шаги - см. разделы, посвященные конкретным версиям, в разделе Обновления.

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

Общие шаги по обновлению кластера:

  1. Убедитесь в совместимости приложения с целевой версией Tarantool.
  2. Проверьте состояние кластера.
  3. Установите целевую версию Tarantool на узлах кластера.
  4. Обновите наборы реплик хранилища по очереди.
  5. Обновите узлы-роутеры по очереди.

Если в процессе обновления возникли проблемы, можно выполнить откат к исходной версии. Инструкции по откату приведены в разделе Откат.

Проверка приложения

Перед обновлением убедитесь, что приложение совместимо с целевой версией Tarantool:

  1. Настройте среду разработки с установленной целевой версией Tarantool. Инструкции по установке см. на странице загрузки Tarantool и в руководстве по установке tt.
  2. Разверните приложение в этой среде и проверьте его работу. При возникновении проблем измените код приложения для обеспечения совместимости с целевой версией.

Когда приложение готово к работе на целевой версии Tarantool, можно приступать к обновлению рабочей среды.

Предварительные проверки

Выполните эти шаги перед обновлением, чтобы убедиться в корректной работе кластера:

  1. На каждом экземпляре router выполните проверку vshard.router:

    tarantool> vshard.router.info()-- no issues in the output-- sum of 'bucket.available_rw' == total number of buckets
  2. На каждом экземпляре storage выполните проверку репликации:

    tarantool> box.info-- box.info.status == 'running'-- box.info.ro == 'false' on one instance in each replica set.-- box.info.replication[*].upstream.status == 'follow'-- box.info.replication[*].downstream.status == 'follow'-- box.info.replication[*].upstream.lag <= box.cfg.replication_timeout-- can also be moderately larger under a write load
  3. На каждом экземпляре storage выполните проверку vshard.storage:

    tarantool> vshard.storage.info()-- no issues in the output-- replication.status == 'follow'
  4. Проверьте логи всех экземпляров на наличие ошибок приложения.

При обнаружении проблем обязательно устраните их перед началом процедуры обновления.

Установка целевой версии

Установите целевую версию Tarantool на все хосты кластера. Это можно сделать с помощью пакетного менеджера или утилиты tt. Инструкции по установке см. на странице загрузки Tarantool и в руководстве по установке tt.

Убедитесь, что целевая версия Tarantool установлена, выполнив команду tarantool -v на всех хостах.

Обновление кластера Tarantool без простоя

Обновление роутеров

Обновляйте экземпляры router по очереди:

  1. Остановите один экземпляр router.
  2. Запустите этот экземпляр на целевой версии Tarantool.
  3. Повторите предыдущие шаги для каждого экземпляра router.

После завершения обновления экземпляров router выполните проверку vshard.router на каждом из них.

При обновлении модуля crud действует особый порядок обновления. Подробнее см. в разделе Обновление модуля crud.

Обновление хранилищ

Перед обновлением экземпляров storage:

  • Отключите failover в Cartridge:

    tt cartridge failover disable

    или используйте веб-интерфейс Cartridge (вкладка Cluster, кнопка Failover: ).

  • Отключите балансировщик:

    tarantool> vshard.storage.rebalancer_disable()
  • Убедитесь, что для параметра upgrade_schema в Cartridge установлено значение false.

Обновите экземпляры хранилища, выполнив следующие шаги для каждого набора реплик:

  1. Выберите реплику (экземпляр только для чтения) из набора реплик. Остановите эту реплику и запустите её снова на целевой версии Tarantool. Дождитесь, пока она достигнет статуса running (box.info.status == running).
  2. Поочередно перезапустите все остальные экземпляры только для чтения из набора реплик на целевой версии.
  3. Назначьте одну из обновленных реплик новым мастером, следуя инструкции из раздела Переключение мастера.
  4. Перезапустите последний экземпляр набора реплик (бывший мастер, теперь реплика) на целевой версии.
  5. Выполните функцию box.schema.upgrade() на новом мастере. Это обновит системные спейсы Tarantool до текущей установленной версии. Позже механизм репликации передаст изменения на другие узлы.

Точка невозврата

  1. Выполните функцию box.snapshot() на каждом узле набора реплик, чтобы реплики сразу увидели обновленное состояние базы данных при перезапуске.

После выполнения этих шагов включите failover или балансировщик обратно:

  • Включите failover в Cartridge:

    tt cartridge failover set [mode]

    или используйте веб-интерфейс Cartridge (вкладка Cluster, кнопка Failover: Disabled).

  • Включите балансировщик:

    tarantool> vshard.storage.rebalancer_enable()

Проверки после обновления

Выполните эти шаги после обновления, чтобы убедиться в корректной работе кластера:

  1. На каждом экземпляре router выполните проверку vshard.router:

    tarantool> vshard.router.info()-- no issues in the output-- sum of 'bucket.available_rw' == total number of buckets
  2. На каждом экземпляре storage выполните проверку репликации:

    tarantool> box.info-- box.info.status == 'running'-- box.info.ro == 'false' on one instance in each replica set.-- box.info.replication[*].upstream.status == 'follow'-- box.info.replication[*].downstream.status == 'follow'-- box.info.replication[*].upstream.lag <= box.cfg.replication_timeout-- can also be moderately larger under a write load
  3. На каждом экземпляре storage выполните проверку vshard.storage:

    tarantool> vshard.storage.info()-- no issues in the output-- replication.status == 'follow'
  4. Проверьте логи всех экземпляров на наличие ошибок приложения.

Откат

Откат до прохождения точки невозврата

Если откат выполняется до достижения точки невозврата, ваши данные полностью совместимы с версией, которая была до обновления. В этом случае откат выполняется так же: перезапустите уже обновленные узлы на исходной версии.

Откат после прохождения точки невозврата

Если в процессе обновления точка невозврата пройдена (выполнена функция box.schema.upgrade()), для отката требуется понижение версии схемы до исходной.

Чтобы проверить, доступно ли автоматическое понижение версии до вашей исходной версии, выполните функцию box.schema.downgrade_versions(). Если нужная версия присутствует в списке, выполните следующие шаги на каждом обновленном наборе реплик для отката:

  1. Выполните функцию box.schema.downgrade(<version>) на мастере, указав исходную версию.
  2. Выполните функцию box.snapshot() на каждом экземпляре набора реплик, чтобы реплики сразу увидели пониженную версию базы данных после перезапуска.
  3. Перезапустите все read-only экземпляры набора реплик на исходной версии по очереди.
  4. Назначьте один из обновленных экземпляров новым мастером, следуя соответствующей инструкции из раздела Переключение мастера.
  5. Перезапустите последний экземпляр набора реплик (бывший мастер, теперь реплика) на исходной версии.

Затем включите failover или балансировщик обратно, как описано в разделе Обновление хранилищ.

Восстановление после неудачного обновления

В случае неудачного обновления после прохождения точки невозврата выполните следующие шаги для отката к исходной версии:

  1. Остановите все экземпляры кластера.
  2. Сохраните файлы снимков состояния и xlog со всех экземпляров, данные которых были изменены после последней процедуры резервного копирования. Эти файлы помогут применить изменения позже.
  3. Сохраните последние резервные копии со всех экземпляров.
  4. Восстановите исходную версию Tarantool на всех хостах кластера.
  5. Запустите кластер на исходной версии Tarantool.
  1. Вручную примените последние изменения данных из сохраненных на шаге 2 файлов xlog с помощью модуля xlog. На экземплярах, где произошли эти изменения, выполните следующее:

    1. Определите значение vclock последней операции в исходном WAL.
    2. Воспроизведите операции из более нового xlog, начиная с этого значения vclock, на данном экземпляре.

Дополнительные сведения о восстановлении Tarantool см. в разделе Аварийное восстановление.

Процедуры и проверки

Проверка репликации

Выполните функцию box.info:

tarantool> box.info

Убедитесь, что выполняются следующие условия:

  • Параметр box.info.status имеет значение running.

  • Параметры box.info.replication[*].upstream.status и box.info.replication[*].downstream.status имеют значение follow.

  • Параметр box.info.replication[*].upstream.lag меньше или равен box.cfg.replication_timeout (может быть умеренно больше при нагрузке на запись).

  • Параметр box.info.ro имеет значение false по крайней мере на одном экземпляре в каждом наборе реплик.

Затем выполните функцию box.info еще раз и проверьте, что значения box.info.replication[*].upstream.lag обновились.

Проверка vshard.storage

Выполните функцию vshard.storage.info():

tarantool> vshard.storage.info()

Убедитесь, что выполняются следующие условия:

  • Нет проблем или предупреждений.
  • Параметр replication.status имеет значение follow.

Проверка vshard.router

Выполните функцию vshard.router.info():

tarantool> vshard.router.info()

Убедитесь, что выполняются следующие условия:

  • Нет проблем или предупреждений.
  • Все бакеты доступны (сумма значений параметра bucket.available_rw по всем наборам реплик равна общему количеству бакетов).

Переключение мастера

  • Cartridge. Если кластер работает на Cartridge, переключить мастер можно в веб-интерфейсе. Для этого перейдите на вкладку Cluster, нажмите Edit replica set и перетащите экземпляр в начало списка Failover priority, чтобы сделать его мастером.

  • Raft. Если в кластере используется автоматический выбор лидера, переключите мастера, выполнив следующие шаги:

    1. Выберите кандидата - экземпляр в режиме read-only, который станет новым мастером.
    2. Выполните функцию box.ctl.promote() на кандидате. Операция запустит и дождется завершения выборов.
    3. Выполните функцию box.cfg{ election_mode = "voter" } на текущем мастере.
    4. Убедитесь, что кандидат стал новым мастером: значение параметра box.info.ro должно быть false.
  • Устаревший способ. Если кластер не работает на Cartridge и не использует автоматический выбор лидера, переключите мастера, выполнив следующие шаги:

    1. Выберите кандидата – экземпляр в режиме read-only, который станет новым мастером.

    2. Выполните функцию box.cfg{ read_only = true } на текущем мастере.

    3. Убедитесь, что значение vclock кандидата совпадает со значением мастера: значение параметра box.info.vclock[<master_id>] на кандидате должно быть равно значению параметра box.info.lsn на мастере. Здесь <master_id> – это значение box.info.id на мастере.

      Если значения vclock не совпадают, остановите процедуру переключения и восстановите состояние набора реплик, выполнив функцию box.cfg{ read_only == false } на мастере. Затем выберите другого кандидата и повторите процедуру.

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