VK Object Storage logo
Помощь
Обновлена 20 августа 2026 г. в 21:45

Обновление Tarantool

В разделе описана миграция Tarantool с версии 3.2.1 до 3.6.2 для инсталляции VK Object Storage. Перед началом процедуры убедитесь, что пакет tarantool на конкретной машине обновлен до версии 3.2.1.

Обновляйте сначала маршрутизаторы, затем связанные с ними базы:

  1. switchover-autofailover.
  2. wires.
  3. hitbox.
  4. fringe.
  5. matter.
  6. nylon.
  7. pairdb.
  8. filedb.
  9. jqueue.
  10. shinobi.

Подготовка

  1. Проверьте, что версия дистрибутива — 26.Х.Х:

    $ cat distrib/version.txt
  2. Проверьте состояние всех сервисов:

    $ switchover -p hotbox status <ИМЯ_СЕРВИСА>
  3. Проверьте мониторинг: не должно быть ошибок и высокой задержки репликации.

  4. Проверьте, что в логах нет END=5**, failed, error, err, die и других ошибок.

  5. При обновлении filedb проверьте состояние vshard:

    $ switchover -p hotbox eval --cluster --yes nylon 'vshard.router.info().status'$ switchover -p hotbox eval --cluster --yes filedb 'vshard.storage.info().status'

    Статус должен быть равен 0. Это означает, что алерты отсутствуют.

  6. Проверьте, что touching не запущен (подробнее в документе Руководство администратора VK Object Storage в разделе Тачинг):

    $ hb touching status
  7. Только для stateful-компонентов: установите флаг для пропуска изменения схемы для всех сервисов, которые будут обновлены на новую версию Tarantool:

    $ for component in {filedb,matter,pairdb,hitbox,jqueue,shinobi}; do switchover etcd set /hotbox/${component}/common/app/scheme/skip true; done
  8. Если установлен policebank, установите дополнительный флаг:

    $ switchover etcd set /hotbox/policebank/common/app/scheme/skip true
  9. Если установлен usagedb, установите дополнительный флаг:

    $ switchover etcd set /hotbox/usagedb/common/app/scheme/skip true
  10. Перезагрузите все сервисы, которые обновляются:

    $ for component in {filedb,matter,pairdb,hitbox,jqueue,shinobi}; do switchover -p hotbox pr --cluster --yes ${component}; done
  11. Если установлен policebank, перезагрузите его:

    $ switchover -p hotbox pr --cluster --yes policebank
  12. Если установлен usagedb, перезагрузите его:

    $ switchover -p hotbox pr --cluster --yes usagedb
  13. Проверьте, что перезагрузка прошла успешно:

    $ for component in {filedb,matter,pairdb,hitbox,jqueue,shinobi}; do switchover -p hotbox eval --cluster --yes ${component} 'return package.reload.reloaded'; done
  14. Только для stateful-компонентов: убедитесь, что перезагрузка прошла успешно и изменение схемы отключено:

    $ grep "Skip box.schema changes for migration" /var/log/<component>/*.log
  15. Отключите autofailover для обновляемого сервиса:

    $ sudo -E ./01_deploy_helper.sh ansible-playbook -i inventory.yml -e @ansible-vault.yml -e @vault-transit -e @vault vk.s3.autofailover --tags service_stop_task
  16. Только для stateful-компонентов: создайте снимок:

    $ for component in {filedb,matter,pairdb,hitbox,jqueue,shinobi}; do switchover -p hotbox eval --cluster --yes ${component} 'return box.snapshot()'; done
  17. Только для stateful-компонентов: скопируйте snap и xlog файлы в безопасное место:

    $ cp -r /var/lib/tarantool/{snaps,xlogs}/<ИМЯ_СЕРВИСА>/

Обновление stateless-компонентов

К stateless-компонентам относятся fringe, wires, nylon и другие.

  1. Остановите обновляемый сервис:

    $ systemctl stop tarantool@<ИМЯ_СЕРВИСА>.service
  2. Удалите snap- и xlog-файлы (если они есть):

    $ rm -rf /var/lib/tarantool/snaps/<ИМЯ_СЕРВИСА>/*.snap$ rm -rf /var/lib/tarantool/xlogs/<ИМЯ_СЕРВИСА>/*.xlog
  3. Запустите обновляемый сервис:

    $ systemctl start tarantool@<ИМЯ_СЕРВИСА>.service
  4. Понаблюдайте за состоянием системы некоторое время. Проверьте состояние сервисов, мониторинг, логи и vshard (раздел Подготовка).

  5. Убедитесь, что обновление версии схемы прошло успешно — ожидаемая версия схемы 3.3.0:

    $ switchover -p hotbox eval --cluster <ИМЯ_КЛАСТЕРА> "return box.space._schema.index.primary:select('version', {iterator='EQ'})"

Обновление stateful-компонентов

К stateful-компонентам относятся hitbox, matter, filedb, pairdb, jqueue и другие.

  1. Соберите всех мастеров на реплики _01 (только для компонентов с несколькими шардами — по одной команде на шард):

    $ switchover -p hotbox sw matter@matter_001_01$ switchover -p hotbox sw matter@matter_002_01$ switchover -p hotbox sw filedb@filedb_001_01$ switchover -p hotbox sw hitbox@hitbox_01$ switchover -p hotbox sw pairdb@pairdb_01$ switchover -p hotbox sw jqueue@jqueue_01

    Повторите команды sw matter@... и sw filedb@... для всех шардов соответствующих компонентов.

  2. Убедитесь, что мастеров вне _01 не осталось — вывода быть не должно:

    $ switchover -p hotbox s matter | grep 'role:master' | grep -v '_01'$ switchover -p hotbox s filedb | grep 'role:master' | grep -v '_01'$ switchover -p hotbox s hitbox | grep 'role:master' | grep -v '_01'$ switchover -p hotbox s pairdb | grep 'role:master' | grep -v '_01'$ switchover -p hotbox s jqueue | grep 'role:master' | grep -v '_01'
  3. Выполните последовательный перезапуск реплик — всех инстансов, кроме бывшего мастера (_01). Порядок между репликами значения не имеет:

    $ systemctl restart tarantool@<ИМЯ_СЕРВИСА>.service

    Перед рестартом следующего инстанса дождитесь, пока перезапущенный выполнит репликацию: в выводе switchover -p hotbox s <ИМЯ_КЛАСТЕРА> должно быть ok/<МАСТЕР>:follow/0.000s, и не должно появиться новых CRIT или HIGH сообщений (команда проверки сообщений: switchover -p hotbox s <ИМЯ_КЛАСТЕРА> --only-alerts).

  4. Выполните перезапуск оставшейся реплики — бывшего мастера. Это делается в последнюю очередь: при отключенном autofailover (шаг 11 раздела Подготовка) мастер не обновится автоматически, и набор реплик останется без мастера на все время его простоя (сообщение CRIT master_is_down, запись недоступна).

    $ systemctl restart tarantool@<ИМЯ_СЕРВИСА>.service
  5. Понаблюдайте за состоянием системы. Проверьте:

    • switchover -p hotbox s <ИМЯ_КЛАСТЕРА> --only-alerts — не должно быть CRIT или HIGH;
    • у всех реплик статус ok/<МАСТЕР>:follow/0.000s (задержка репликации 0);
    • состояние vshard (см. шаг 5 раздела Подготовка).
  6. Выполните обновление версии схемы Tarantool:

    $ switchover -p hotbox eval --cluster <ИМЯ_КЛАСТЕРА>:rw 'return box.session.su("admin"), box.schema.upgrade()'
  7. Убедитесь, что обновление версии схемы прошло успешно — ожидаемая версия схемы 3.3.0:

    $ switchover -p hotbox eval --cluster <ИМЯ_КЛАСТЕРА> "return box.space._schema.index.primary:select('version', {iterator='EQ'})"

Действия после обновления

  1. Включите схему для обновленных сервисов:

    $ for component in {filedb,matter,pairdb,hitbox,jqueue,shinobi}; do switchover etcd set /hotbox/${component}/common/app/scheme/skip false; done
  2. Выполните перезагрузку обновленных сервисов:

    $ switchover -p hotbox eval --cluster <ИМЯ_КЛАСТЕРА> 'return package.reload()'
  3. Создайте снимок:

    $ switchover -p hotbox eval --cluster <ИМЯ_КЛАСТЕРА> 'return box.snapshot()'
  4. Если установлен policebank, создайте снимок:

    $ switchover etcd set /hotbox/policebank/common/app/scheme/skip false$ switchover -p hotbox pr --cluster --yes policebank
  5. Если установлен usagedb, создайте снимок:

    $ switchover etcd set /hotbox/usagedb/common/app/scheme/skip false$ switchover -p hotbox pr --cluster --yes usagedb
  6. Включите autofailover для обновленных сервисов:

    $ sudo -E ./01_deploy_helper.sh ansible-playbook -i inventory.yml -e @ansible-vault.yml -e @vault-transit -e @vault vk.s3.autofailover --tags service_start_task
Была ли статья полезна?