Для перехода со схемы, использующей однохостовую установку, на схему с резервированием требуется выполнить миграцию данных БД. Это необходимо, т. к. контейнер БД PostgreSQL, предназначенный для работы в схеме с резервированием БД имеет отдельный образ, в состав которого включен "Replication manager for PostgreSQL clusters" (далее repmng).
Данная особенность образа БД, предназначенного для использования в схеме с резервированием, не позволяет выполнить прямую миграцию данных. Для этого требуется выполнить резервное копирование БД, развернуть БД с резервированием с "нуля" и выполнить восстановление БД.
| Версия NAICE | Название образа и версия |
|---|---|
| 1.1 | postgres: 1.1.5 |
| 1.1 | postgres-repmgr: 1.1.5 |
Данное обновление работает только в рамках одной версии. Если требуется обновиться на новую версию и перейти на схему с резервированием, то сначала необходимо выполнить обновление NAICE до актуальной версии, после чего выполнить обновление. |
При выборе данной стратегии рекомендуется заранее указать на сетевом оборудовании новые IP-адреса для взаимодействия с NAICE с более низким приоритетом. |
Перед выполнением миграции БД, в зависимости от используемого функционала NAICE необходимо остановить обработку RADIUS и TACACS+ пакетов. Это требуется для того, что бы предотвратить потерю информации и RADIUS и TACACS+ сессиях, которые могут быть записаны в БД после выполнения её резервного копирования. Для этого требуется подключиться к хосту с NAICE по ssh и выполнить в папке установки NAICE (по умолчанию /etc/docker-naice) остановку сервисов, отвечающих за данные процессы. Пример:
cd /etc/docker-naice/ sudo docker compose stop naice-radius sudo docker compose stop naice-aquila |
Переход БД с версии однохостовой установки на версию с резервированием включает в себя следующие этапы:
Этап 1. Выгрузка файла бэкапа текущих настроек БД.
Этап 2. Разворачивание на новых хостах кластера БД PostgreSQL.
Этап 3. Загрузка ранее выгруженного бэкапа данных в кластер БД PostgreSQL.
1. Передать в контейнер postgres команду на запуск скрипта для формирования бэкапа:
sudo docker exec -it naice-postgres /scripts/backup/backup.sh |
$ sudo docker exec -it naice-postgres /scripts/backup/backup.sh [BACKUP] [2026-02-28_10-59-49_717] [10:59:49.71] INFO ==> Validation required env variables for backup [BACKUP] [2026-02-28_10-59-49_717] [10:59:49.73] INFO ==> Checking variables.. [BACKUP] [2026-02-28_10-59-49_717] [10:59:49.74] DEBUG ==> 'BACKUPS_DIR' = /var/backups [BACKUP] [2026-02-28_10-59-49_717] [10:59:49.74] DEBUG ==> 'POSTGRES_USER' = postgres [BACKUP] [2026-02-28_10-59-49_717] [10:59:49.74] DEBUG ==> 'POSTGRES_PASSWORD' = postgres [BACKUP] [2026-02-28_10-59-49_717] [10:59:49.74] INFO ==> Ok, all required variables are set [BACKUP] [2026-02-28_10-59-49_717] [10:59:49.74] INFO ==> Directory for backups from env. variable '$BACKUPS_DIR:/var/backups' [BACKUP] [2026-02-28_10-59-49_717] [10:59:49.75] INFO ==> Creating directory '/var/backups' [BACKUP] [2026-02-28_10-59-49_717] [10:59:49.75] [BACKUP] [2026-02-28_10-59-49_717] [10:59:49.75] INFO ==> ok, directory is created [BACKUP] [2026-02-28_10-59-49_717] [10:59:49.75] INFO ==> Starting backup of database 'ursus' to /var/backups/ursus_2026-02-28_10-59-49_717.sql with excluded data for tables events.. [BACKUP] [2026-02-28_10-59-49_717] [10:59:49.76] DEBUG ==> Call 'PGPASSWORD=postgres pg_dump -U postgres -d ursus -f /var/backups/ursus_2026-02-28_10-59-49_717.sql --inserts -c --if-exists --exclude-table-data events' [BACKUP] [2026-02-28_10-59-49_717] [10:59:50.00] [BACKUP] [2026-02-28_10-59-49_717] [10:59:50.00] INFO ==> Ok, backup is created. [BACKUP] [2026-02-28_10-59-49_717] [10:59:50.00] INFO ==> Starting backup of database 'lepus' to /var/backups/lepus_2026-02-28_10-59-49_717.sql.. [BACKUP] [2026-02-28_10-59-49_717] [10:59:50.00] DEBUG ==> Call 'PGPASSWORD=postgres pg_dump -U postgres -d lepus -f /var/backups/lepus_2026-02-28_10-59-49_717.sql --inserts -c --if-exists' [BACKUP] [2026-02-28_10-59-49_717] [10:59:50.13] [BACKUP] [2026-02-28_10-59-49_717] [10:59:50.13] INFO ==> Ok, backup is created. [BACKUP] [2026-02-28_10-59-49_717] [10:59:50.13] INFO ==> Starting backup of database 'aquila' to /var/backups/aquila_2026-02-28_10-59-49_717.sql with excluded data for tables tacacs_sessions|tacacs_accounting.. [BACKUP] [2026-02-28_10-59-49_717] [10:59:50.13] DEBUG ==> Call 'PGPASSWORD=postgres pg_dump -U postgres -d aquila -f /var/backups/aquila_2026-02-28_10-59-49_717.sql --inserts -c --if-exists --exclude-table-data tacacs_sessions|tacacs_accounting' [BACKUP] [2026-02-28_10-59-49_717] [10:59:50.26] [BACKUP] [2026-02-28_10-59-49_717] [10:59:50.27] INFO ==> Ok, backup is created. [BACKUP] [2026-02-28_10-59-49_717] [10:59:50.27] INFO ==> Starting backup of database 'mustela' to /var/backups/mustela_2026-02-28_10-59-49_717.sql with excluded data for tables events.. [BACKUP] [2026-02-28_10-59-49_717] [10:59:50.27] DEBUG ==> Call 'PGPASSWORD=postgres pg_dump -U postgres -d mustela -f /var/backups/mustela_2026-02-28_10-59-49_717.sql --inserts -c --if-exists --exclude-table-data events' [BACKUP] [2026-02-28_10-59-49_717] [10:59:50.39] [BACKUP] [2026-02-28_10-59-49_717] [10:59:50.40] INFO ==> Ok, backup is created. [BACKUP] [2026-02-28_10-59-49_717] [10:59:50.40] INFO ==> Starting backup of database 'ovis' to /var/backups/ovis_2026-02-28_10-59-49_717.sql with excluded data for tables radius_sessions.. [BACKUP] [2026-02-28_10-59-49_717] [10:59:50.40] DEBUG ==> Call 'PGPASSWORD=postgres pg_dump -U postgres -d ovis -f /var/backups/ovis_2026-02-28_10-59-49_717.sql --inserts -c --if-exists --exclude-table-data radius_sessions' [BACKUP] [2026-02-28_10-59-49_717] [10:59:50.54] [BACKUP] [2026-02-28_10-59-49_717] [10:59:50.55] INFO ==> Ok, backup is created. [BACKUP] [2026-02-28_10-59-49_717] [10:59:50.55] INFO ==> Starting backup of database 'phoca' to /var/backups/phoca_2026-02-28_10-59-49_717.sql.. [BACKUP] [2026-02-28_10-59-49_717] [10:59:50.55] DEBUG ==> Call 'PGPASSWORD=postgres pg_dump -U postgres -d phoca -f /var/backups/phoca_2026-02-28_10-59-49_717.sql --inserts -c --if-exists' [BACKUP] [2026-02-28_10-59-49_717] [10:59:50.68] [BACKUP] [2026-02-28_10-59-49_717] [10:59:50.69] INFO ==> Ok, backup is created. [BACKUP] [2026-02-28_10-59-49_717] [10:59:50.69] INFO ==> Start compressing backups to file naice_2026-02-28_10-59-49_717.tar.gz [BACKUP] [2026-02-28_10-59-49_717] [10:59:50.74] INFO ==> The backup was successfully compressed to '/var/backups/naice_2026-02-28_10-59-49_717.tar.gz' |
Выгрузка резервной копии БД выполняется на хост в папку <путь установки NAICE>/backups. По умолчанию это папка /etc/docker-naice/backups/, файл имеет формат naice_ГГГГ-ММ-ДД_ЧЧ-ММ-СС_XXX.tar.gz.
2. Убедиться, что в папке присутствует файл с резервной копией БД с именем, которое отображалось в логах при создании резервной копии.
3. Выгрузить файл с резервной копией БД на машину администратора или в специальное хранилище для предотвращения его потери в ходе дальнейших действий с виртуальной машиной, на которой выполнена однохостовая установка.
/etc/docker-naice/backups), остановить все сервисы NAICE и удалить эту папку: $ sudo mv /etc/docker-naice/backups/naice_2025-11-14_08-25-02_318.tar.gz ~ $ docker compose -f /etc/docker-naice/docker-compose.yml down $ sudo rm -rfv /etc/docker-naice/ |
Сервисы NAICE на данном этапе устанавливать не нужно! |
Внимание! Загрузка резервной копии данных в БД, использующую кластерную схему резервирования, возможна только на ноде, находящейся в состоянии Primary! |
$ sudo scp tester@100.110.3.35:/etc/docker-naice/backups/naice_2026-02-28_10-59-49_717.tar.gz /etc/docker-naice/postgres/backups The authenticity of host '100.110.3.35 (100.110.3.35)' can't be established. ED25519 key fingerprint is SHA256:0xB2cJjNA/FUZfBr+Z1q3npqNtd0gELjat2XkQwxT0E. This key is not known by any other names. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '100.110.3.35' (ED25519) to the list of known hosts. tester@100.110.3.35's password: naice_2026-02-28_10-59-49_717.tar.gz 100% 93KB 25.6MB/s 00:00 100% 21KB 8.3MB/s 00:00 |
sudo docker exec -it naice-postgres-1 /home/worker/scripts/backup/restore.sh -f /var/backups/<имя файла из которого выполняется восстановление БД> |
sudo docker exec -it naice-postgres-2 /home/worker/scripts/backup/restore.sh -f /var/backups/<имя файла из которого выполняется восстановление БД> |
[RESTORE] [naice_2026-02-28_10-59-49_717] [11:10:19.39] INFO ==> Ok, restoring is completed. [RESTORE] [naice_2026-02-28_10-59-49_717] [11:10:19.40] INFO ==> All databases were successfully restored from available dumps. |
Для отката в случае неудачной попытки установки NAICE в схеме с резервированием необходимо: