Введение
Если используется более старая версия 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