Введение
Если используется более старая версия NAICE (0.6 и менее) - требуется выполнить последовательное обновление до версии 0.7.
Для обновления используется тот же плейбук ansible, что и для установки. При обновлении следует учитывать, что в переменных плейбука требуется указать те же значения переменных, которые использовались ранее для установки версии 0.7.
Выполнять обновление можно только в рамках ранее выбранной схемы: однохостовую установку на однохостовую установку; схему с резервированием на схему с резервированием.
Подготовка к обновлению
Подготовка сервера с NAICE
- Выполнить резервное копирование виртуальной машины, на которой запущен NAICE средствами гипервизора.
- Создать резервную копию данных БД в соответствии с инструкцией: Создание резервной копии БД и выгрузить её на сторонний сервер или компьютер администратора, выполняющего установку.
Подготовка Active Directory (если используется интеграция с Active Directory)
В версии 0.8 изменен механизм взаимодействия с Active Directory, а именно:
- Удалены переменные из ".env", ответственные за взаимодействие с Active Directory.
- В 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, выполнить следующие действия:
Удалить все файлы из директории с данными PostgreSQL:
cd /etc/docker-naice sudo rm -r var/pgdata/
Изменить версию образа контейнера на актуальную в переменных окружения .env:
sudo nano .env POSTGRES_VERSION_TAG: 0.8.4
Перезапустить контейнеры с обновлением образов:
sudo docker compose down && sudo docker compose pull && sudo docker compose up -d postgres
- Выполнить обновление NAICE:
ansible-playbook install-naice.yml
Обновление контейнера naice-postgres без потери данных
Для сохранения данных при обновлении с версии 0.7 последовательность действий следующая:
Закомментировать проброс 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
Измените версию образа контейнера на актуальную в переменных окружения .env:
sudo nano .env POSTGRES_VERSION_TAG: 0.8.4
Перезапустить контейнер:
sudo docker compose down && sudo docker compose pull && sudo docker compose up -d postgres
- Раскомментировать проброс volume, перезапустить контейнер:
sudo docker compose down postgres && sudo docker compose up -d postgres
Выполнить команды:
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;"
- Выполнить обновление NAICE:
ansible-playbook install-naice.yml
Обновление данных СУБД PostgreSQL развернутой в deb-пакетах
Выполнить команды:
psql -U postgres -c "CREATE ROLE aquila LOGIN ENCRYPTED PASSWORD 'aquila' IN ROLE ursus;" psql -U postgres -c "CREATE DATABASE aquila OWNER aquila;"
- Выполнить обновление NAICE:
ansible-playbook install-naice.yml -e "externally_installed_postgres=True"
Схема с резервированием
Обновление контейнера c PostgreSQL с потерей данных
Удаление БД приведет к потере всех данных и созданию пустой БД.
Информация о загруженной лицензии так же будет сброшена: потребуется повторная активация продукта с использованием ранее полученного файла лицензии. Требуется проверить не утрачен ли данный файл и при необходимости повторно запросить его в коммерческом отделе компании Элтекс.
Данную инструкцию нужно выполнить на каждой ноде, сначала на Standby, затем на Primary (в рамках стандартного процесса обновления зарезервированной инсталляции без потери доступа).
Удалить все файлы из директории с данными PostgreSQL (на каждой ноде):
cd /etc/docker-naice sudo rm -r postgres/data
Изменить версию образа контейнера на актуальную в переменных окружения .env:
sudo nano docker-compose.repmgr.yml ... image: naice-build-hosted.registry.eltex.loc/naice/postgres-repmgr:0.8.4 ...
Перезапустить контейнеры с обновлением образов, последовательно на первой и второй ноде кластера:
sudo docker compose down && docker compose pull && docker compose -f docker-compose.repmgr.yml up -d
- Убедиться, что 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
- Выполнить обновление NAICE:
ansible-playbook reservation-naice-services.yml -i hosts-cluster.yml
Обновление контейнера naice-postgres без потери данных
Закомментировать проброс 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 ...
Изменить версию образа контейнера на актуальную в переменных окружения .env:
sudo nano docker-compose.repmgr.yml ... image: naice-build-hosted.registry.eltex.loc/naice/postgres-repmgr:0.8.4 ...
Перезапустить контейнеры с обновлением образов, последовательно на первой и второй ноде кластера:
sudo docker compose down && docker compose pull && docker compose -f docker-compose.repmgr.yml up -d
- Раскомментировать проброс volume, повторно перезапустить контейнеры, последовательно на каждой ноде кластера:
sudo docker compose down && docker compose -f docker-compose.repmgr.yml up -d
- Убедиться, что 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
Выполнить команды на первой ноде кластера:
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;"
- Выполнить обновление NAICE:
ansible-playbook reservation-naice-services.yml -i hosts-cluster.yml