Обновление до v26.04

Внимание

Обновление на v26.04 должно обязательно выполняться с версии v25.12.5.

В версии v26.04 обновлена версия PostgreSQL, поэтому при обновлении MITIGATOR требуется удалить базу данных и восстановить ее из полной резервной копии. Скрипт для создания полной резервной копии базы данных включен в поставку версии v25.12.5.

Подготовка к обновлению

  1. Обновите все экземпляры MITIGATOR до версии v25.12.5 согласно стандартной процедуре.

  2. После запуска MITIGATOR на версии v25.12.5 дождитесь выполнения всех миграций и пролития настроек.

  3. Создайте резервную копию базы данных на экземпляре MITIGATOR, на котором база данных в статусе Primary:

    Внимание

    Для создания резервной копии используйте приведенную ниже команду, в которой указан backup_all.
    Применение стандартной команды из статьи Резервное копирование НЕ перенесет все необходимые данные.

    docker-compose exec postgres sh -c 'backup_all > /tmp/backup_all.sql' 
    docker cp $(docker-compose ps -q postgres):/tmp/backup_all.sql .
  4. Убедитесь, что резервная копия создалась без ошибок:

    tail backup_all.sql

    В выводе не должно быть сообщений error.

  5. Остановите все экземпляры MITIGATOR (сначала со Standby базой, потом с Primary):

    docker-compose down

Обновление до v26.04

  1. На всех экземплярах запишите в файл .env строку с версией:

    VERSION=v26.04.X

    Здесь X – целевая минорная версия.

  2. На всех экземплярах загрузите актуальный Compose-файл:

    wget https://docs.mitigator.ru/master/dist/docker-compose.yml -O docker-compose.yml
  3. На всех экземплярах обновите содержимое файлов docker-compose.failover.yml и docker-compose.worker.failover.yml, если они используются.

    Если в переменной COMPOSE_FILE файла .env указаны docker-compose.failover.yml или docker-compose.worker.failover.yml, то обновите их:

    Из секции pgfailover удалите:

     volumes:
       - failover:/trigger:rw

    Из секции postgres удалите:

     volumes:
       - failover:/failover:rw

    В конце файла удалите секцию volumes:

    volumes:
      failover:

    Если файлы docker-compose.failover.yml и docker-compose.worker.failover.yml использовались без модификаций, можно вместо шагов с ручным удалением скачать новые актуальные файлы:

    wget https://docs.mitigator.ru/master/dist/multi/docker-compose.failover.yml -O docker-compose.failover.yml && \
    wget https://docs.mitigator.ru/master/dist/multi/docker-compose.worker.failover.yml -O docker-compose.worker.failover.yml
  4. На всех экземплярах скачайте новые образы:

    docker-compose pull
  5. На экземпляре MITIGATOR, на котором база данных в статусе Primary, удалите базу данных:

    docker volume rm mitigator_postgres
  6. На экземпляре MITIGATOR, на котором база данных в статусе Primary, запустите Postgres:

    docker-compose run -d --rm --name postgres_idle postgres idle
  7. На экземпляре MITIGATOR, на котором база данных в статусе Primary, откройте логи Postgres:

    docker logs -f postgres_idle
  8. На экземпляре MITIGATOR, на котором база данных в статусе Primary, дождитесь сообщения database system is ready to accept connections, нажмите Ctrl+C. Сообщения role "repuser" does not exist игнорируйте.

  9. На экземпляре MITIGATOR, на котором база данных в статусе Primary, перенесите бэкап в контейнер и восстановите данные:

    docker cp backup_all.sql postgres_idle:/tmp/ && \
    docker exec postgres_idle sh -c 'psql mitigator </tmp/backup_all.sql >/tmp/restore.log'
  10. Остановите временный контейнер Postgres и запустите основной сервис:

    docker stop postgres_idle && \
    docker-compose up -d postgres && \
    docker-compose logs -f postgres
  11. Дождитесь сообщения database system is ready to accept connections, нажмите Ctrl+C.

  12. На экземплярах MITIGATOR, на которых база данных в статусе Standby, удалите базу данных:

    docker volume rm mitigator_postgres
  13. На экземплярах MITIGATOR, на которых база данных в статусе Standby, выполните инициализацию базы данных:

    docker-compose run --rm -e PGPORT=15432 postgres standby
  14. Запустите экземпляр MITIGATOR, на котором база данных в статусе Primary:

    docker-compose up -d
  15. После запуска дождитесь выполнения всех миграций и пролития настроек.

  16. Запустите остальные экземпляры MITIGATOR:

    docker-compose up -d