Введение

Управление аутентификацией и авторизацией пользователей требует обеспечения высокой доступности NAC-системы, т. к. в случае её отказа подключение пользователей и эндпоинтов станет невозможным.

Резервирование Eltex-NAICE выполняется по схеме Active-Active, каждая нода имеет свой собственный IP-адрес. В настройках сетевого оборудования потребуется настроить взаимодействие с двумя RADIUS/TACACS+ серверами. Определение недоступности сервиса будет выполняться со стороны сетевого оборудования. Для настройки схемы с резервирование требуется выделить 4 виртуальных (или физических) сервера: 2 для функционирования сервисов NAICE, 2 для функционирования СУБД PostgreSQL, отвечающей за хранение данных.

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

Порядок действий при переходе с однохостовой схемы на схему с резервированием описан в v1.1_3.8.1 Обновление PostgreSQL при переходе со схемы с однохостовой установкой на схему с резервированием.

Общая схема резервирования

Системные требования к серверам

Системные требования к серверам описаны в разделе "Установка с резервированием" статьи v1.1_3.1 Системные требования

Установка

Возможна онлайн и оффлайн установка.

Установка онлайн возможна на все поддерживаемые типы ОС и описана далее.

Оффлайн установка (закрытый контур) описана в разделе v1.1_3.5.1 Установка схемы с резервированием в закрытом контуре (без использования VRRP)

Онлайн установка

Для выполнения онлайн установки требуется обеспечить с хостов, на которые выполняется установка, прямой доступ в сеть Интернет (без использования прокси-сервера или иных способов, которые вызывают подмену сертификатов конечных сайтов, к которым выполняется обращение в ходе установки).

Требуется указывать IP-адреса целевых серверов при выполнении установки! Использование доменных имен не допускается!

Установка выполняется с помощью двух плейбуков ansible:

Подготовка к установке 

Для корректного взаимодействия с источником идентификации типа ACTIVE DIRECTORY, необходимо создать две учетных записи компьютера, которые будут использоваться для взаимодействия по протоколу netlogon в ходе проверки паролей пользователей. Каждая нода NAICE должна использовать отдельную УЗ компьютера.

Для этого, в файле переменных group_vars/all.yml необходимо указать значения переменных:

cetus_netlogon_pc1_name: "<Имя компьютера 1>"
cetus_netlogon_pc1_pass: "<Пароль компьютера 1>"
cetus_netlogon_pc2_name: "<Имя компьютера 2>"
cetus_netlogon_pc2_pass: "<Пароль компьютера 2>"

и сохранить перед выполнением плейбука установки NAICE.

В случае наличия данных настроек в конфигурации параметров NAICE, они имеют приоритет перед указанными в веб-интерфейсе! 


Подробнее о настройке взаимодействия с Active Directory можно ознакомиться в разделе: v1.1_4.1.1 Настройка интеграции с Active Directory


Адреса целевых хостов, на которых будет выполнятся установка, определяются в файле inventory/hosts-geo.yml.

Для СУБД PostgreSQL необходимо задать адреса в разделе postgres-cluster:

# Группа хостов для установки postgres-cluster (primary + standby)
postgres-cluster:
  hosts:
    node_primary:
      ansible_host: <IP-адрес хоста-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-адрес хоста-2 PostgreSQL>
      ansible_port: 22
      ansible_user: <логин пользователя>
      ansible_ssh_pass: <пароль пользователя>
      ansible_become_password: <пароль для повышения привилегий (sudo)>
      forwarded_postgresql_port: 5432
      forwarded_ssh_port: 15432

Для установки сервисов NAICE с резервированием необходимо задать адреса в разделе geo:

# Группа хостов для установки NAICE с резервированием
geo:
  hosts:
    master_host:
      ansible_host: <IP-адрес хоста 1 для NAICE>
      ansible_port: 22
      ansible_user: <логин пользователя>
      ansible_ssh_pass: <пароль пользователя>
      ansible_become_password: <пароль для повышения привилегий (sudo)>

    backup_host:
      ansible_host: <IP-адрес хоста 2 для NAICE>
      ansible_port: 22
      ansible_user: <логин пользователя>
      ansible_ssh_pass: <пароль пользователя>
      ansible_become_password: <пароль для повышения привилегий (sudo)>

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

Установка кластера СУБД PostgreSQL

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

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

Результатом выполнения плейбука будет установка СУБД PostgreSQL в кластере на серверах, указанных в node_primary и node_standby. Мастер-нода кластера будет находиться на хосте node_primary.

Проверка состояния кластера PostgreSQL после установки описана в инструкции Диагностика состояния кластера БД PostgreSQL.

Установка кластера NAICE

Перед установкой необходимо убедиться, что роль Primary принадлежит ноде PostgreSQL, указанной в переменной node_primary "ansible_host". При необходимости выполнить переключение роли Primary. В противном случае установка не сможет быть завершена.


В настройках подключения к БД сервисов NAICE указываются оба адреса БД, а запись в БД возможна только через Primary-сервер. Обязательным условием является использование в URL параметра targetServerType для сервисов, которые выполняют запись в БД.
Пример:

URSUS_POSTGRES_JDBC_URL:jdbc:postgresql://192.168.0.101:5432,192.168.0.102:5432/ursus?targetServerType=preferPrimary

Адреса взаимодействия с БД берутся из значения ansible_host из раздела postgres-cluster файла hosts-geo.yml.

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

ansible-playbook geo-naice-services.yml -i inventory/hosts-geo.yml

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

После завершения установки кластера NAICE контейнеры на обоих нодах должны находиться в состоянии healthy.

На хостах зайти в папку установки (по умолчанию /etc/docker-naice) и убедиться, что контейнеры запущены. 

$ sudo docker compose ps -a
NAME            IMAGE                                     COMMAND                  SERVICE         CREATED         STATUS                   PORTS
epg-service     hub.eltex-co.ru/naice/epg-service:1.1-3   "/bin/sh -e /usr/loc…"   epg-service     6 minutes ago   Up 6 minutes (healthy)   0.0.0.0:8100->8100/tcp, [::]:8100->8100/tcp
naice-aquila    hub.eltex-co.ru/naice/naice-aquila:1.1    "java -cp @/app/jib-…"   naice-aquila    6 minutes ago   Up 4 minutes (healthy)   0.0.0.0:5703->5703/tcp, [::]:5703->5703/tcp, 0.0.0.0:8091-8092->8091-8092/tcp, [::]:8091-8092->8091-8092/tcp, 0.0.0.0:49->1049/tcp, [::]:49->1049/tcp
naice-bubo      hub.eltex-co.ru/naice/naice-bubo:1.1      "java -cp @/app/jib-…"   naice-bubo      6 minutes ago   Up 4 minutes (healthy)   0.0.0.0:5704->5704/tcp, [::]:5704->5704/tcp, 0.0.0.0:8093->8093/tcp, [::]:8093->8093/tcp
naice-castor    hub.eltex-co.ru/naice/naice-castor:1.1    "java -Djava.awt.hea…"   naice-castor    6 minutes ago   Up 4 minutes (healthy)   0.0.0.0:5705->5705/tcp, [::]:5705->5705/tcp, 0.0.0.0:8095->8095/tcp, [::]:8095->8095/tcp
naice-cetus     hub.eltex-co.ru/naice/naice-cetus:1.1     "java -cp @/app/jib-…"   naice-cetus     6 minutes ago   Up 4 minutes (healthy)   0.0.0.0:8099->8099/tcp, [::]:8099->8099/tcp
naice-gavia     hub.eltex-co.ru/naice/naice-gavia:1.1     "java -cp @/app/jib-…"   naice-gavia     6 minutes ago   Up 3 minutes (healthy)   0.0.0.0:8080->8080/tcp, [::]:8080->8080/tcp
naice-gulo      hub.eltex-co.ru/naice/naice-gulo:1.1      "java -cp @/app/jib-…"   naice-gulo      6 minutes ago   Up 4 minutes (healthy)   0.0.0.0:8089->8089/tcp, [::]:8089->8089/tcp
naice-lemmus    hub.eltex-co.ru/naice/naice-lemmus:1.1    "java -cp @/app/jib-…"   naice-lemmus    6 minutes ago   Up 4 minutes (healthy)   0.0.0.0:8083->8083/tcp, [::]:8083->8083/tcp
naice-lepus     hub.eltex-co.ru/naice/naice-lepus:1.1     "java -cp @/app/jib-…"   naice-lepus     6 minutes ago   Up 4 minutes (healthy)   0.0.0.0:8087->8087/tcp, [::]:8087->8087/tcp, 0.0.0.0:67->1024/udp, [::]:67->1024/udp
naice-mustela   hub.eltex-co.ru/naice/naice-mustela:1.1   "java -cp @/app/jib-…"   naice-mustela   6 minutes ago   Up 4 minutes (healthy)   0.0.0.0:8070->8070/tcp, [::]:8070->8070/tcp
naice-nats      hub.eltex-co.ru/naice/nats:1.1.7          "docker-entrypoint.s…"   nats            6 minutes ago   Up 6 minutes (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:1.1      "java -cp @/app/jib-…"   naice-ovis      6 minutes ago   Up 4 minutes (healthy)   0.0.0.0:5701->5701/tcp, [::]:5701->5701/tcp, 0.0.0.0:8084->8084/tcp, [::]:8084->8084/tcp
naice-phoca     hub.eltex-co.ru/naice/naice-phoca:1.1     "java -cp @/app/jib-…"   naice-phoca     6 minutes ago   Up 5 minutes (healthy)   0.0.0.0:8097->8097/tcp, [::]:8097->8097/tcp
naice-radius    hub.eltex-co.ru/naice/naice-radius:1.1    "/docker-entrypoint.…"   naice-radius    6 minutes ago   Up 6 minutes (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:1.1    "/docker-entrypoint.…"   naice-sterna    6 minutes ago   Up 3 minutes (healthy)   80/tcp, 0.0.0.0:8443->444/tcp, [::]:8443->444/tcp
naice-ursus     hub.eltex-co.ru/naice/naice-ursus:1.1     "java -cp @/app/jib-…"   naice-ursus     6 minutes ago   Up 5 minutes (healthy)   0.0.0.0:8081->8081/tcp, [::]:8081->8081/tcp
naice-vulpus    hub.eltex-co.ru/naice/naice-vulpus:1.1    "java -cp @/app/jib-…"   naice-vulpus    6 minutes ago   Up 4 minutes (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:1.1       "/docker-entrypoint.…"   naice-web       6 minutes ago   Up 2 minutes (healthy)   80/tcp, 0.0.0.0:443->443/tcp, [::]:443->443/tcp, 0.0.0.0:80->4200/tcp, [::]:80->4200/tcp

Описание схемы работы

Нормальное состояние системы

В нормальном состоянии системы функционируют все четыре хоста.

Отказ хоста NAICE 1

При отказе хоста NAICE 1 будут автоматически выполнены следующие действия:

Отказ хоста БД 1

При отказе хоста БД 1 будут автоматически выполнены следующие действия:

Восстановление после отказа

  1. После возвращения в работу хоста NAICE, если он является приоритетным для обращения в настройках сетевого оборудования, RADIUS/TACACS+ запросы начнут выполняться к этому хосту.
  2. После возвращения в работу хоста БД PostgreSQL он будет работать в режиме Standby. Роль Primary останется у текущей работоспособной ноды кластера.

Восстановление хоста

В случае полной утраты одного из хостов требуется предварительно восстановить стартовое состояние: развернуть ОС, настроить IP-адресацию и пользователей, как было ранее, и выполнить процедуру восстановления.

Восстановление хоста кластера БД PostgreSQL

На оставшейся в работе ноде выполнить резервное копирование данных в соответствии с инструкцией: v1.1_3.9 Создание резервной копии данных БД и восстановление данных БД.

Повторно развернуть хост для вышедшей из строя ноды кластера с прежней ОС, адресацией и пользователем.

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

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

После завершения плейбука проверить состояние кластера БД PostgreSQL, убедиться в его работоспособности и проверить работу авторизации и корректности настроек в GUI.

Восстановление хоста сервисов NAICE

Повторно развернуть хост для вышедшей из строя ноды кластера с прежней ОС, адресацией и пользователем.

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

ansible-playbook geo-naice-services.yml -i inventory/hosts-geo.yml


При повторном выполнении установки будет выполнен перезапуск всех сервисов NAICE, что приведет к кратковременному (до 5 мин) перерыву в работе комплекса. Необходимо это учитывать при проведении работ по восстановлению.

После восстановления убедиться в работе авторизации и корректной работе всех сервисов.