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

Внимание

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

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

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

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

  2. После запуска MITIGATOR на версии v25.12.5 дождитесь сообщения database system is ready to accept connections, нажмите Ctrl+C.

  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, то обновите их:

    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

    Если ранее в раздел command: сервиса pgfailover вносились изменения, например для использования более двух баз данных, то вручную перенесите эти изменения в обновленные файлы docker-compose.failover.yml и docker-compose.worker.failover.yml:

    • список серверов (ранее -server) перенесите в docker-compose.override.yml, переопределив PGFAILOVER_SERVERS;
    • число попыток подключения (ранее -attempts) задайте в .env как MITIGATOR_PGFAILOVER_ATTEMPTS;
    • интервал проверки роли сервера (ранее -interval) задайте в .env как MITIGATOR_PGFAILOVER_INTERVAL.

    Пример docker-compose.override.yml для трёх серверов:

    services:
      pgfailover:
        environment:
          PGFAILOVER_SERVERS: |
            postgres://repuser@${SERVER1}:5432/mitigator?sslmode=disable&connect_timeout=5
            postgres://repuser@${SERVER2}:5432/mitigator?sslmode=disable&connect_timeout=5
            postgres://repuser@${SERVER3}:5432/mitigator?sslmode=disable&connect_timeout=5        
    Информация

    В .env файле docker-compose.override.yml поместите в конец COMPOSE_FILE : его настройки должны иметь приоритет над настройками из предыдущих файлов.

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

  4. На всех экземплярах в файле .env удалите переменную MITIGATOR_OWN_INDEX.

  5. На всех экземплярах скачайте новые образы:

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

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

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

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

  10. На экземпляре 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'
  11. Остановите временный контейнер Postgres и запустите основной сервис:

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

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

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

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

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

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

    docker-compose up -d