Описание

В версии 1.0 была обновлена версия СУБД PostgreSQL с версии 15 на версию 17!.

Обновление выполняется с версии 0.9. Для обновления с версии ниже потребуется сначала обновиться до версии 0.9, а затем до версии 1.0.

Обновление осуществляется в два основных этапа:

  1. Подготовка хоста NAICE и хоста для запуска скриптов
  2. Обновление версии БД и сервисов NAICE

Для обновления в режиме онлайн установки в однохостовом режиме и установки с резервированием потребуется отдельный дополнительный хост с ОС Ubuntu 24 для запуска плейбуков Ansible.

Подготовка хоста для запуска плейбуков Ansible.

Требования к VM на которой выполняется запуск плейбуков Ansible.

Подготовка

Создание резервной копии БД

Перед обновлением необходимо сделать резервную копию  БД в соответствие с инструкцией: v1.0_3.8 Создание резервной копии данных БД

Для однохостовой установки.

Для установки с резервированием.

Переместить полученный архив с резервной копией данных в домашнюю папку пользователя на хосте с NAICE или на другой хост. Это требуется для возможности отката установки после обновления обратно на версию 0.9.

Подготовка хоста для запуска плейбуков Ansible

Установка необходимого дополнительного ПО

Установить пакеты и все необходимые зависимости из официального репозитория Ubuntu соответствующей версии:

sudo apt install sshpass python3-apt ansible -y

Подготовка для однохостовой установки

Заполнение файла конфигурации данными для однохостовой установки

В файле inventory/hosts.yml указать: 

common:
  hosts:
    # Хост для выполнения stand-alone установки NAICE
    common_host:
      ansible_host: <IP-адрес хоста для NAICE>
      ansible_port: 22
      ansible_user: <логин пользователя хоста, под которым выполняется запуск плейбука>
      ansible_ssh_pass: <пароль пользователя хоста, под которым выполняется запуск плейбука>
      ansible_become_password: <пароль для повышения привилегий (sudo) пользователя хоста, под которым выполняется запуск плейбука>

Подготовка для установки с резервированием

Заполнение файла конфигурации данными хостов кластера

В файле inventory/hosts-cluster.yml указать:

# Группа хостов для установки postgres-cluster (primary + standby)
postgres-cluster:
  hosts:
    node_primary:
      ansible_host: <IP-адрес хоста для node-1 PostgreSQL>
      ansible_port: 22
      ansible_user: <логин пользователя>
      ansible_ssh_pass: <пароль пользователя>
      ansible_become_password: <пароль для повышения привилегий (sudo)>
      forwarded_postgresql_port: 5432
      forwarded_ssh_port: 15432
    node_standby:
      ansible_host: <IP-адрес хоста для node-2 PostgreSQL>
      ansible_port: 22
      ansible_user: <логин пользователя>
      ansible_ssh_pass: <пароль пользователя>
      ansible_become_password: <пароль для повышения привилегий (sudo)>
      forwarded_postgresql_port: 5432
      forwarded_ssh_port: 15432
# Группа хостов для установки NAICE с резервированием
reservation:
  hosts:
    master_host:
      ansible_host: <IP-адрес хоста 1 для NAICE>
      ansible_port: 22
      ansible_user: <логин пользователя>
      ansible_ssh_pass: <пароль пользователя>
      ansible_become_password: <пароль для повышения привилегий (sudo)>
      keepalived_interface: <наименование интерфейса, на котором будет настроен VIP-адрес, например eth0>

    backup_host:
      ansible_host: <IP-адрес хоста 2 для NAICE>
      ansible_port: 22
      ansible_user: <логин пользователя>
      ansible_ssh_pass: <пароль пользователя>
      ansible_become_password: <пароль для повышения привилегий (sudo)>
      keepalived_interface: <наименование интерфейса, на котором будет настроен VIP-адрес, например eth0>
  vars:
    keepalived_vip: <VIP-адрес, без маски, например 192.168.0.11>

Обновление

Обновление осуществляется запуском соответствующего плейбука Ansible (Для оффлайн установки плейбуки находятся в директории"naice_install/ansible", для онлайн установки в директории "ansibleNaice-v1.0-14-11-2025/ansible"). По завершении работы плейбука не должно быть ошибок!

Запуск плейбука для обновление однохостовой установки

ansible-playbook master-migration-naice-1.0.yml -i ./inventory/hosts.yml

Запуск плейбука для обновления установки с резервированием

ansible-playbook master-migration-naice-cluster-1.0.yml -i ./inventory/hosts-cluster.yml

Обновление

После запуска плэйбука Ansible необходимо подтвердить выполнение операции:

🚀 БУДЕТ ВЫПОЛНЕНА СЛЕДУЮЩАЯ ПОСЛЕДОВАТЕЛЬНОСТЬ ДЕЙСТВИЙ:

1. 📦 СОЗДАНИЕ БЭКАПА БАЗЫ ДАННЫХ
   - Создание бэкапа БД: /etc/docker-naice/backups/*.tar.gz
   - Очистка данных в БД 

2. 🔄 ОБНОВЛЕНИЕ
   - Обновление СУБД
   - Обновление сервисов на версию 1.0

3. 📥 ВОССТАНОВЛЕНИЕ ДАННЫХ
   - Восстановление БД из резервной копии текущего бэкапа
   - Запуск сервисов

✅ Подтвердите выполнение операции (yes/no)
: yes

После этого будет выполнен плейбук для выполнения обновления - необходимо дождаться его выполнения.

Проверка состояния сервисов

Проверить успешность запуска контейнеров можно, перейдя в директорию для установки NAICE (по умолчанию - /etc/docker-naice/ ) и выполнив команду для просмотра списка и статуса контейнеров docker compose ps -a. Вывод команды должен быть примерно следующим:

NAME             IMAGE                                     COMMAND                  SERVICE        CREATED       STATUS                 PORTS
epg-service      hub.eltex-co.ru/naice/epg-service:1.0-1   "/bin/sh -e /usr/loc…"   epg-service    10 days ago   Up 10 days (healthy)   0.0.0.0:8100->8100/tcp, [::]:8100->8100/tcp
naice-aquila     hub.eltex-co.ru/naice/naice-aquila:0.9    "java -cp @/app/jib-…"   naice-aquila   10 days ago   Up 10 days (healthy)   0.0.0.0:49->49/tcp, [::]:49->49/tcp, 0.0.0.0:5703->5703/tcp, [::]:5703->5703/tcp, 0.0.0.0:8091-8092->8091-8092/tcp, [::]:8091-8092->8091-8092/tcp
naice-bubo       hub.eltex-co.ru/naice/naice-bubo:0.9      "java -cp @/app/jib-…"   naice-bubo     10 days ago   Up 10 days (healthy)   0.0.0.0:5704->5704/tcp, [::]:5704->5704/tcp, 0.0.0.0:8093-8094->8093-8094/tcp, [::]:8093-8094->8093-8094/tcp
naice-castor     hub.eltex-co.ru/naice/naice-castor:0.9    "java -Djava.awt.hea…"   naice-castor   10 days ago   Up 10 days (healthy)   0.0.0.0:5705->5705/tcp, [::]:5705->5705/tcp, 0.0.0.0:8095-8096->8095-8096/tcp, [::]:8095-8096->8095-8096/tcp
naice-gavia      hub.eltex-co.ru/naice/naice-gavia:0.9     "java -cp @/app/jib-…"   naice-gavia    10 days ago   Up 10 days (healthy)   0.0.0.0:8080->8080/tcp, [::]:8080->8080/tcp
naice-gulo       hub.eltex-co.ru/naice/naice-gulo:0.9      "java -cp @/app/jib-…"   naice-gulo     10 days ago   Up 10 days (healthy)   0.0.0.0:8089-8090->8089-8090/tcp, [::]:8089-8090->8089-8090/tcp
naice-lemmus     hub.eltex-co.ru/naice/naice-lemmus:0.9    "java -cp @/app/jib-…"   naice-lemmus   10 days ago   Up 10 days (healthy)   0.0.0.0:8083->8083/tcp, [::]:8083->8083/tcp
naice-lepus      hub.eltex-co.ru/naice/naice-lepus:0.9     "java -cp @/app/jib-…"   naice-lepus    10 days ago   Up 10 days (healthy)   0.0.0.0:8087->8087/tcp, [::]:8087->8087/tcp, 0.0.0.0:67->1024/udp, [::]:67->1024/udp
naice-nats       hub.eltex-co.ru/naice/nats:0.7.1          "docker-entrypoint.s…"   nats           10 days ago   Up 10 days (healthy)   0.0.0.0:4222->4222/tcp, [::]:4222->4222/tcp, 0.0.0.0:6222->6222/tcp, [::]:6222->6222/tcp, 0.0.0.0:7777->7777/tcp, [::]:7777->7777/tcp, 0.0.0.0:8222->8222/tcp, [::]:8222->8222/tcp
naice-ovis       hub.eltex-co.ru/naice/naice-ovis:0.9      "java -cp @/app/jib-…"   naice-ovis     10 days ago   Up 10 days (healthy)   0.0.0.0:5701->5701/tcp, [::]:5701->5701/tcp, 0.0.0.0:8084-8085->8084-8085/tcp, [::]:8084-8085->8084-8085/tcp
naice-postgres   hub.eltex-co.ru/naice/postgres:0.9.4      "docker-entrypoint.s…"   postgres       10 days ago   Up 10 days (healthy)   0.0.0.0:5432->5432/tcp, [::]:5432->5432/tcp
naice-radius     hub.eltex-co.ru/naice/naice-radius:0.9    "/docker-entrypoint.…"   naice-radius   10 days ago   Up 10 days (healthy)   0.0.0.0:1812-1813->1812-1813/udp, [::]:1812-1813->1812-1813/udp, 0.0.0.0:9812->9812/tcp, [::]:9812->9812/tcp
naice-sterna     hub.eltex-co.ru/naice/naice-sterna:0.9    "/docker-entrypoint.…"   naice-sterna   10 days ago   Up 10 days (healthy)   80/tcp, 0.0.0.0:8443->444/tcp, [::]:8443->444/tcp
naice-ursus      hub.eltex-co.ru/naice/naice-ursus:0.9     "java -cp @/app/jib-…"   naice-ursus    10 days ago   Up 10 days (healthy)   0.0.0.0:8081-8082->8081-8082/tcp, [::]:8081-8082->8081-8082/tcp
naice-vulpus     hub.eltex-co.ru/naice/naice-vulpus:0.9    "java -cp @/app/jib-…"   naice-vulpus   10 days ago   Up 10 days (healthy)   0.0.0.0:5702->5702/tcp, [::]:5702->5702/tcp, 0.0.0.0:8086->8086/tcp, [::]:8086->8086/tcp, 0.0.0.0:8088->8088/tcp, [::]:8088->8088/tcp
naice-web        hub.eltex-co.ru/naice/naice-web:0.9       "/docker-entrypoint.…"   naice-web      10 days ago   Up 10 days (healthy)   80/tcp, 0.0.0.0:443->443/tcp, [::]:443->443/tcp, 0.0.0.0:80->4200/tcp, [::]:80->4200/tcp

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

Зайти на первую ноду, указанную в node_primary и выполнить команду:

sudo docker exec -it naice-postgres-1  repmgr -f /opt/bitnami/repmgr/conf/repmgr.conf cluster crosscheck

Зайти на вторую ноду, указанную в node_standby и выполнить команду:

sudo docker exec -it naice-postgres-2  repmgr -f /opt/bitnami/repmgr/conf/repmgr.conf cluster crosscheck

Результатом выполнения команд будет проверка состояния кластера, которая сопровождается выводом лога, в конце которого ожидается вывод:

debug1: Exit status 0
 Name       | ID   | 1001 | 1002
------------+------+------+------
 postgres-1 | 1001 | *    | *
 postgres-2 | 1002 | *    | *

Ручное обновление

Обновление будет состоять из пяти основных этапов:

  1. Создание резервной копии данных БД.
  2. Выключение сервисов и удаление данных БД.
  3. Установка новой версии NAICE при помощи плэйбуков Ansible.
  4. Выключение сервисов и удаление данных БД.
  5. Восстановление данных БД.
  6. Запуск сервисов.

Создание резервной копии данных БД

Перед обновлением необходимо сделать резервную копию  БД в соответствие с инструкцией: v1.0_3.8 Создание резервной копии данных БД

Для однохостовой установки.

Для установки с резервированием.

Переместить полученный архив с резервной копией данных в домашнюю папку пользователя на хосте с NAICE или на другой хост. Это требуется для возможности отката установки после обновления обратно на версию 0.9.

Подготовка хоста для запуска плейбуков Ansible

Перед обновлением требуется подготовить хост для запуска плэйбуков Ansible.

Подготовка хоста для запуска плейбуков Ansible.

Требования к VM на которой выполняется запуск плейбуков Ansible.


Выключение сервисов и удаление данных БД

Для однохостовой установки

Остановить сервисы NAICE:

cd /etc/docker-naice

sudo docker compose down

Удалить данные БД:

sudo rm -rf /etc/docker-naice/var/pgdata

Для установки с резервированием

Остановить все сервисы на обеих нодах:

sudo docker compose down
sudo docker compose -f docker-compose.repmgr.yml down

Удалить данные из директории postgres/data:

sudo rm -rf /etc/docker-naice/postgres/data/*
Если была удалена сама директория data, то потребуется создать её руками, изменив ей владельца на worker:root, в противном случае контейнер с постгресом не сможет запуститься!

Установка для однохостовой установки

Выполнить плэйбук:

ansible-playbook install-naice.yml -i inventory/hosts.yml

Установка для схемы с резервированием

Выполнить плэйбук для установки кластера СУБД PostgreSQL:

ansible-playbook install-postgres-cluster.yml -i inventory/hosts-cluster.yml

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

ansible-playbook reservation-naice-services.yml -i inventory/hosts-cluster.yml

После выполнения установки выполнить повторно остановку сервисов и удаление БД.

Восстановление данных БД

Для успешного восстановления и обновления данных требуется запустить только контейнер с СУБД PostgreSQL! В случае был выполнен запуск сервисов NAICE до восстановления данных БД - требуется повторно остановить все контейнеры и удалить данные БД!

Для однохостовой установки

Поднять только postgres:

cd /etc/docker-naice

sudo docker compose up postgres -d

Запустить скрипт restore_from_previous_version.sh:

sudo docker exec -it naice-postgres /scripts/backup/restore_from_previous_version.sh

Поднять все сервисы:

cd /etc/docker-naice

sudo docker compose up -d

Для установки с резервированием

Запустить postgres последовательно на первой и второй нодах:

sudo docker compose -f docker-compose.repmgr.yml up -d
Последовательно запускать важно, т.к. иначе они могут оба запуститься как мастер, а если мастер уже есть - вторая нода запускается как backup и успешно синхронизируется с первой. Это требуется обязательно проконтролировать.

Поместить бэкап на мастер-ноду по пути /etc/docker-naice/postgres/backups

Запустить скрипт восстановления на мастер-ноде:

docker exec naice-postgres-1 /home/worker/scripts/backup/restore_from_previous_version.sh

Запустить сервисы на обеих нодах:

cd /etc/docker-naice

sudo docker compose up -d

Откат на версию 0.9 NAICE

Откат на версию 0.9 требуется обязательного наличия резервной копии данных БД, которую надо создать перед обновлением на версию 0.9!

Выключение сервисов и удаление данных БД

Для однохостовой установки

Остановить сервисы NAICE:

cd /etc/docker-naice

sudo docker compose down

Удалить NAICE:

cd ~ && sudo rm -rfv /etc/docker-naice

Для установки с резервированием

Остановить все сервисы на всех нодах:

sudo docker compose down
sudo docker compose -f docker-compose.repmgr.yml down

Удалить NAICE на всех нодах:

cd ~ && sudo rm -rfv /etc/docker-naice

Повторная установка версии 0.9

Все плэйбуки требуется запускать из директории, которая использовалась при изначальной установки NAICE версии 0.9.

Для однохостовой установки

Выполнить плэйбук:

ansible-playbook install-naice.yml -i inventory/hosts.yml

Для установки с резервированием

Выполнить плэйбук для установки кластера СУБД PostgreSQL:

ansible-playbook install-postgres-cluster.yml -i inventory/hosts-cluster.yml

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

ansible-playbook reservation-naice-services.yml -i inventory/hosts-cluster.yml

Восстановление данных БД

Для однохостовой установки

Скопировать ранее созданный бэкап в директорию /etc/docker-naice/backups/.

Запустить скрипт restore.sh:

sudo docker exec -it naice-postgres /scripts/backup/restore_from_previous_version.sh

Для установки с резервированием

Скопировать ранее созданный бэкап на мастер-ноду с СУБД PostgreSQL в директорию /etc/docker-naice/postgres/backups

Запустить скрипт восстановления на мастер-ноде:

docker exec naice-postgres-1 /home/worker/scripts/backup/restore.sh

Повторный запуск NAICE

Выполнить перезапуск сервисов с NAICE

Для однохостовой установки

Перезапустить сервисы NAICE:

cd /etc/docker-naice
sudo docker compose down && sudo docker compose up -d

Для установки с резервированием

Перезапустить сервисы NAICE на всех нодах (останавливать контейнеры с СУБД PostgreSQL не требуется):

cd /etc/docker-naice
sudo docker compose down && sudo docker compose up -d