Введение

Если используется более старая версия NAICE (0.6 и менее) - требуется выполнить последовательное обновление до версии 0.7.

Для обновления используется тот же плейбук ansible, что и для установки. При обновлении следует учитывать, что в переменных плейбука требуется указать те же значения переменных, которые использовались ранее для установки версии 0.7.

Выполнять обновление можно только в рамках ранее выбранной схемы: однохостовую установку на однохостовую установку; схему с резервированием на схему с резервированием.

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

Подготовка сервера с NAICE

  1. Выполнить резервное копирование виртуальной машины, на которой запущен NAICE средствами гипервизора.
  2. Создать резервную копию данных БД в соответствии с инструкцией: Создание резервной копии БД и выгрузить её на сторонний сервер или компьютер администратора, выполняющего установку.

Подготовка Active Directory (если используется интеграция с Active Directory)

В версии 0.8 изменен механизм взаимодействия с Active Directory, а именно:

  1. Удалены переменные из ".env", ответственные за взаимодействие с Active Directory.
  2. В Active Directory требуется вручную добавить компьютер, предназначенный для взаимодействия с NAICE и задать ему пароль.

Необходимо внимательно ознакомиться с инструкцией v0.8_4.1 Пример настройки интеграции с Active Directory.

После обновления требуется дополнить в NAICE настройки источника идентификации, который отвечает за взаимодействие с MS AD в соответствии с инструкцией.

Подготовка переменных плейбука ansible

Скачать и разархивировать плейбуки установки в соответствие с инструкцией: Получение файлов для работы плейбука.

Указать адрес сервера с NAICE:  Настройка доступа к хостам для установки

Переменные расположены в файле "ansible/group_vars/all.yml".

Требуется взять аналогичный файл из плейбука установки версии 0.7 и перенести значения переменных, которые были изменены при установке версии 0.7.

Следует обратить особенное внимание на значение следующих переменных, несоответствие которых может привести к полной неработоспособности после выполнения плейбука.

Переменная externally_installed_postgres

Метод разворачивания СУБД PostgreSQL в виде deb пакета или докер контейнера. По умолчанию используется докер контейнер, значение переменной в этом случае false.

externally_installed_postgres: false

Переменная naice_docker_path

Переменная, которая определяет путь установки NAICE. Значение по умолчанию /etc/docker-naice.

naice_docker_path: /etc/docker-naice

Переменная gulo_elm_server_url

Переменная, которая определяет путь с серверу лицензирования. Значение по умолчанию https://elm.eltex-co.ru:8099. Переменная требует изменения только при использовании Offline-EML с USB токеном.

gulo_elm_server_url: https://elm.eltex-co.ru:8099

Переменные которые отвечают за используемый сертификат для работы аутентификации по протоколу EAP-PEAP

Переменные, которые отвечают за используемый сертификат RADIUS для выполнения EAP-PEAP аутентификации. По умолчанию сертификат встроен в контейнер сервиса naice-radius. Данный сертификат не имеет отношения к авторизации типа EAP-TLS, которая имеет свой блок настроек.

Если ранее сертификат был заменён случае необходимости подготовить настройки в соответствии с инструкцией: Замена сертификатов по умолчанию для работы протокола EAP-PEAP (опционально)

Данный сертификат не имеет отношения к авторизации типа EAP-TLS, которая имеет свой блок настроек.

Переменные которые отвечают за используемый сертификат для работы аутентификации по протоколу EAP-TLS

Переменные, которые отвечают за используемый сертификат RADIUS для выполнения авторизации EAP-TLS. 

Если ранее выполнялась настройка EAP-TLS - требуется повторно подготовить плейбук в соответствии с инструкцией:  Добавление сертификатов для работы протокола EAP-TLS (опционально)

Создание БД aquila и добавление роли aquila для обновления схемы установки с резервированием (требуется только при использовании схемы с резервированием)

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

Подготовка файла inventory hosts-cluster.yml

Для выполнения установки/обновления NAICE в схеме с резервирование с версии 0.8 данные по хостам установки вынесены в отдельный файл "hosts-cluster.yml". Требуется перенести данные по хостам установки из старого файла "hosts.yml".

Подробное описание настройки: Подготовка к установке

Проверка наличия мастерства на первой ноде кластера СУБД PostgreSQL

Проверить состояние мастерства репликации и при необходимости необходимо вернуть вернуть к исходному: Master должен находиться на хосте с адресом указанным в хосте "node_primary". При необходимости надо перевести мастерство административно.

Подробное описание проверки состояния: Проверка состояния кластера PostgreSQL

Перевод мастерства: Смена роли ноды на "Primary"

Создание роли aquila

Выполнить на первой ноде команды:

sudo docker exec -it naice-postgres-1 psql -U postgres -c "CREATE ROLE aquila LOGIN ENCRYPTED PASSWORD 'aquila' IN ROLE ursus;"
sudo docker exec -it naice-postgres-1 psql -U postgres -c "CREATE DATABASE aquila OWNER aquila;"

Проверить, что роль aquila создана и у она может работать с БД ursus:

# Выполнить команду на первой ноде кластера
$ sudo docker exec -it naice-postgres-1 psql -U postgres -c "\du"
                                             List of roles
 Role name |                         Attributes                         |           Member of
-----------+------------------------------------------------------------+-------------------------------
 aquila    |                                                            | {ursus}
 lemmus    |                                                            | {ursus}
 lepus     |                                                            | {}
 ovis      |                                                            | {ursus}
 pgwatch2  | 5 connections                                              | {pg_read_all_data,pg_monitor}
 postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
 radius    |                                                            | {ursus}
 repmgr    | Superuser, Create DB, Replication                          | {}
 ursus     |                                                            | {}
 vulpus    |                                                            | {lepus}

# Выполнить команду на второй ноде кластера
$ sudo docker exec -it naice-postgres-2 psql -U postgres -c "\du"
                                             List of roles
 Role name |                         Attributes                         |           Member of
-----------+------------------------------------------------------------+-------------------------------
 aquila    |                                                            | {ursus}
 lemmus    |                                                            | {ursus}
 lepus     |                                                            | {}
 ovis      |                                                            | {ursus}
 pgwatch2  | 5 connections                                              | {pg_read_all_data,pg_monitor}
 postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
 radius    |                                                            | {ursus}
 repmgr    | Superuser, Create DB, Replication                          | {}
 ursus     |                                                            | {}
 vulpus    |                                                            | {lepus}

Проверить, что в БД aquila можно войти:

$ sudo docker exec -it naice-postgres-1 psql -U aquila
psql (15.8)
Type "help" for help.

aquila=> \q

Обновление однохостовой установки NAICE

Для выполнения обновления необходимо запустить плейбук установки:

ansible-playbook install-naice.yml

Подробнее: Установка NAICE

Обновление NAICE в схеме с резервированием

Первоначально необходимо обновить СУБД PostgreSQL.

Обновление СУБД Postgres развернутой в виде docker контейнеров

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

ansible-playbook docker-postgres-cluster.yml -i hosts-cluster.yml

Обновление сервисов NAICE

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

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

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

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

Что бы проверить состояние после выполнения установки необходимо зайти в папку установки NAICE (по умолчанию /etc/docker-naice) и выполнить команду "sudo docker compose ps -a".

Подробнее о проверке состояния: Проверка состояния сервисов после установки

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

Проверить состояние кластера СУБД PostgreSQL в соответствие с инструкцией: Проверка состояния кластера PostgreSQL

Проверить состояние сервисов NAICE в соответствии с инструкцией: Проверка состояния кластера NAICE

Откат обновления

Выполнить восстановление VM средствами гипервизора из созданной перед установкой резервной копии.

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

Возможно обновление используя ручное обновление СУБД PostgreSQL. В версии 0.8 в PostgreSQL был добавлен новый пользователь и новая БД aquila. Если уже установлен NAICE версии 0.7, то при ручном обновлении PostgreSQL необходимо выполнить действия в зависимости от способа установки СУБД (docker контейнер или deb-пакеты) и типа установки NAICE: однохостовая установка или схема с резервированием.

Данные действия выполняются до обновления основных сервисов NAICE.

Дальнейшие действия описаны исходя из пути установки NAICE по умолчанию /etc/docker-naice. Если путь при установке версии 0.7 был изменен - следует использовать его.

Однохостовая установка

Обновление PostgreSQL в docker контейнере

Обновление контейнера naice-postgres с потерей данных

Удаление БД приведет к потере всех данных и созданию пустой БД.

Информация о загруженной лицензии так же будет сброшена: потребуется повторная активация продукта с использованием ранее полученного файла лицензии. Требуется проверить не утрачен ли данный файл и при необходимости повторно запросить его в коммерческом отделе компании Элтекс.

Если нет необходимости в данных, которые были добавлены в NAICE версии 0.7, выполнить следующие действия:

  1. Удалить все файлы из директории с данными PostgreSQL:

    cd /etc/docker-naice
    sudo rm -r var/pgdata/
  2. Изменить версию образа контейнера на актуальную в переменных окружения .env:

    sudo nano .env
    
    POSTGRES_VERSION_TAG: 0.8.4
  3. Перезапустить контейнеры с обновлением образов:

    sudo docker compose down && sudo docker compose pull && sudo docker compose up -d postgres
  4. Выполнить обновление NAICE:
    ansible-playbook install-naice.yml

Обновление контейнера naice-postgres без потери данных

Для сохранения данных при обновлении с версии 0.7 последовательность действий следующая:

  1. Закомментировать проброс volume в контейнер в docker-compose.yml:

    cd /etc/docker-naice
    sudo nano docker-compose.yml
    
      postgres:
        container_name: naice-postgres
        image: nexus.eltex.loc:9012/naice/postgres:${POSTGRES_VERSION_TAG}
    #    volumes:
    #      - ./var/pgdata:/var/lib/postgresql/data
  2. Измените версию образа контейнера на актуальную в переменных окружения .env:

    sudo nano .env
    
    POSTGRES_VERSION_TAG: 0.8.4
  3. Перезапустить контейнер:

    sudo docker compose down && sudo docker compose pull && sudo docker compose up -d postgres
  4. Раскомментировать проброс volume, перезапустить контейнер:
    sudo docker compose down postgres && sudo docker compose up -d postgres
  5. Выполнить команды:

    sudo docker exec -it naice-postgres psql -U postgres -c "CREATE ROLE aquila LOGIN ENCRYPTED PASSWORD 'aquila' IN ROLE ursus;"
    sudo docker exec -it naice-postgres psql -U postgres -c "CREATE DATABASE aquila OWNER aquila;"
  6. Выполнить обновление NAICE:
    ansible-playbook install-naice.yml

Обновление данных СУБД PostgreSQL развернутой в deb-пакетах

  1. Выполнить команды:

    psql -U postgres -c "CREATE ROLE aquila LOGIN ENCRYPTED PASSWORD 'aquila' IN ROLE ursus;"
    psql -U postgres -c "CREATE DATABASE aquila OWNER aquila;"
  2. Выполнить обновление NAICE:
    ansible-playbook install-naice.yml -e "externally_installed_postgres=True"

Схема с резервированием

Обновление контейнера c PostgreSQL с потерей данных

Удаление БД приведет к потере всех данных и созданию пустой БД.

Информация о загруженной лицензии так же будет сброшена: потребуется повторная активация продукта с использованием ранее полученного файла лицензии. Требуется проверить не утрачен ли данный файл и при необходимости повторно запросить его в коммерческом отделе компании Элтекс.

Данную инструкцию нужно выполнить на каждой ноде, сначала на Standby, затем на Primary (в рамках стандартного процесса обновления зарезервированной инсталляции без потери доступа).

  1. Удалить все файлы из директории с данными PostgreSQL (на каждой ноде):

    cd /etc/docker-naice
    sudo rm -r postgres/data
  2. Изменить версию образа контейнера на актуальную в переменных окружения .env:

    sudo nano docker-compose.repmgr.yml
    
    ...
    image: naice-build-hosted.registry.eltex.loc/naice/postgres-repmgr:0.8.4
    ...
  3. Перезапустить контейнеры с обновлением образов, последовательно на первой и второй ноде кластера:

    sudo docker compose down && docker compose pull && docker compose -f docker-compose.repmgr.yml up -d
  4. Убедиться, что Master находится на первой ноде кластера:
    $sudo docker exec -it naice-postgres-1 bash
    
    $ repmgr -f /opt/bitnami/repmgr/conf/repmgr.conf cluster show
     ID   | Name       | Role    | Status    | Upstream   | Location | Priority | Timeline | Connection string
    ------+------------+---------+-----------+------------+----------+----------+----------+---------------------------------------------------------------------------------------
     1001 | postgres-1 | primary | * running |            | default  | 100      | 1        | user=repmgr password=repmgr host=postgres-1 dbname=repmgr port=5432 connect_timeout=1
     1002 | postgres-2 | standby |   running | postgres-1 | default  | 100      | 1        | user=repmgr password=repmgr host=postgres-2 dbname=repmgr port=5432 connect_timeout=1
  5. Выполнить обновление NAICE:
    ansible-playbook reservation-naice-services.yml -i hosts-cluster.yml

Обновление контейнера naice-postgres без потери данных

  1. Закомментировать проброс volume в контейнер в docker-compose.repmgr.yml на каждой ноде:

    cd /etc/docker-naice
    sudo nano docker-compose.repmgr.yml
    
    ...
        volumes:
          - ./ssh_host_config:/home/worker/.ssh/config
          #- ./postgres/data:/bitnami/postgresql/data
          - ./postgres/backups:/var/backups
    ...
  2. Изменить версию образа контейнера на актуальную в переменных окружения .env:

    sudo nano docker-compose.repmgr.yml
    
    ...
    image: naice-build-hosted.registry.eltex.loc/naice/postgres-repmgr:0.8.4
    ...
  3. Перезапустить контейнеры с обновлением образов, последовательно на первой и второй ноде кластера:

    sudo docker compose down && docker compose pull && docker compose -f docker-compose.repmgr.yml up -d
  4. Раскомментировать проброс volume, повторно перезапустить контейнеры, последовательно на каждой ноде кластера:
    sudo docker compose down && docker compose -f docker-compose.repmgr.yml up -d
  5. Убедиться, что Master находится на первой ноде кластера:
    $sudo docker exec -it naice-postgres-1 bash
    
    $ repmgr -f /opt/bitnami/repmgr/conf/repmgr.conf cluster show
     ID   | Name       | Role    | Status    | Upstream   | Location | Priority | Timeline | Connection string
    ------+------------+---------+-----------+------------+----------+----------+----------+---------------------------------------------------------------------------------------
     1001 | postgres-1 | primary | * running |            | default  | 100      | 1        | user=repmgr password=repmgr host=postgres-1 dbname=repmgr port=5432 connect_timeout=1
     1002 | postgres-2 | standby |   running | postgres-1 | default  | 100      | 1        | user=repmgr password=repmgr host=postgres-2 dbname=repmgr port=5432 connect_timeout=1
  6. Выполнить команды на первой ноде кластера:

    sudo docker exec -it naice-postgres-1 psql -U postgres -c "CREATE ROLE aquila LOGIN ENCRYPTED PASSWORD 'aquila' IN ROLE ursus;"
    sudo docker exec -it naice-postgres-1 psql -U postgres -c "CREATE DATABASE aquila OWNER aquila;"
  7. Выполнить обновление NAICE:
    ansible-playbook reservation-naice-services.yml -i hosts-cluster.yml
  • Нет меток