4.2.5. Установка FAM Server в отказоустойчивом (кластерном) исполнении - Avanpost FAM/MFA+

Отказоустойчивое развёртывание

Avanpost FAM может быть развёрнут в виде отказоустойчивого кластера с использованием следующих решений:

  • Балансировка нагрузки.
  • Репликация базы данных.

Данное решение обладает следующими преимуществами:

  • Может быть развёрнуто в минимальном исполнении (к примеру, в объёме двух узлов за общим балансировщиком) с последующим добавлением дополнительных узлов кластера;
  • Позволяет использовать имеющийся корпоративный балансировщик без необходимости развёртывания дополнительных серверов для обеспечения балансировки нагрузки;
  • Предоставляет возможность горизонтального масштабирования по производительности путем увеличения количества экземпляров серверных компонентов без изменения архитектуры.

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

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

  • Nginx Plus.
  • Nginx.
  • HAProxy.

Для резервирования базы данных можно применять средства СУБД PostgreSQL с open-source компонентами.

Резервирование компонента Avanpost FAM Server

Резервирование компонента Avanpost FAM Server обеспечивается путём развёртывания нескольких узлов (виртуальных машин, серверов или контейнеров), на которых запускается и работает компонент Avanpost FAM Server.

Компонент Avanpost FAM Server функционирует без долговременного хранения состояния, поэтому может быть масштабирован на любое количество узлов (виртуальных машин, серверов или контейнеров). Все функции хранения данных и синхронизации между узлами Avanpost FAM Server обеспечиваются функциями кластера СУБД PostgreSQL, поэтому компонент не требует прогрева или синхронизации кеша в случае необходимости запуска дополнительных узлов Avanpost FAM Server.

Балансировка нагрузки позволяет обеспечить работу в следующих режимах:

  • Распределение нагрузки между узлами кластера (схема Active-Active) с целью снижения нагрузки на каждый конкретный узел Avanpost FAM Server.
  • Резервирование на случай отказа одного или нескольких узлов путём применения горячего резерва (схема Active-Passive).

В зависимости от прикладных задач, требуемых для решения системой Avanpost FAM, осуществляется балансировка нагрузки для следующих функций:

  • HTTP-интерфейс аутентификации и личного кабинета;
  • HTTP-интерфейс административной консоли и REST API системы Avanpost FAM;
  • HTTP-интерфейс Reverse Proxy;
  • RADIUS-интерфейс;
  • gRPC-интерфейс;
  • Компоненты Avanpost FAM Mobile Services для Avanpost Authenticator.

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

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

  • Балансировка TCP-запросов (для функций HTTP и gRPC-интерфейсов) с поддержкой TCP Health Check.
  • Балансировка UDP-запросов (для функции RADIUS) с поддержкой UDP Health Check либо с возможностью использования TCP Health Check для отключения UDP-интерфейсов вышедших из строя узлов системы.

Балансировка для HTTP-интерфейса аутентификации и личного кабинета

Балансировка настраивается для обеспечения отказоустойчивости на случай недоступности одного из узлов для трафика, направляемого на:

  • Веб-интерфейс аутентификации для прохождения аутентификации в сценариях OAuth 2.0, OpenID Connect, SAML 2.0, Reverse Proxy;
  • Веб-интерфейс личного кабинета для загрузки SPA-приложения;
  • REST API для функционирования SPA-приложения личного кабинета.

Схема резервирования для HTTP-интерфейса аутентификации и личного кабинета:

Балансировка для HTTP-интерфейса Reverse Proxy

Балансировка HTTP-интерфейса Reverse Proxy настраивается для обеспечения отказоустойчивости на случай недоступности одного из узлов для трафика, направляемого на Reverse Proxy, а также с целью снижения нагрузки на остальные узлы системы. Для функций Reverse Proxy целесообразно применение одного из двух вариантов развёртывания:

  • Развёртывание отдельных узлов, Avanpost FAM Server в количестве от 2-х, обслуживающих только Reverse Proxy-трафик. Данный вариант является наиболее предпочтительным в тех случаях, если используется большое число приложений, подключенных посредством механизма Reverse Proxy.
  • Распределение нагрузки между несколькими узлами Avanpost FAM Server, решающими и другие функции системы. 

Схема решения по балансировке трафика, поступающего на Reverse Proxy-интерфейс системы:

Балансировка для HTTP-интерфейса административной консоли и REST API

Балансировка HTTP-интерфейса административной консоли и REST API настраивается для обеспечения отказоустойчивости на случай недоступности одного из узлов для трафика, направляемого на:

  • Веб-интерфейс административной консоли для загрузки SPA-приложения административной консоли;
  • REST API для работы SPA-приложения административной консоли и сторонних интеграций, выполненных через REST API.

Разворачивать отдельные узлы Avanpost FAM Server с целью оптимизации нагрузки для административной консоли и REST API как правило не требуется.

Схема решения по балансировке трафика для административной консоли и REST API:

Балансировка для RADIUS-интерфейса

Балансировка RADIUS UDP-трафика осуществляется для обеспечения отказоустойчивости в случае подключения к Avanpost FAM критичных с точки зрения доступности сервисов, к примеру, корпоративных VPN или VDI-решений. 

Схема решения по балансировке для RADIUS-трафика:

Балансировка для gRPC-интерфейса

Балансировка gRPC-трафика применяется для обеспечения отказоустойчивости в случае массового использования дополнительных компонентов из состава Avanpost FAM, таких как:

  • Avanpost FAM Agent для решения задачи Enterprise SSO-аутентификации в унаследованные десктопные приложения;
  • Avanpost FAM Credential Provider для решения задачи аутентификации на рабочие станции и сервера под управлением ОС семейства Windows, в том числе с использованием RDP;
  • Avanpost FAM PAM Linux для решения задачи аутентификации на рабочие станции и сервера под управлением ОС Linux.

Для балансировки gRPC-трафика балансировщик должен обладать следующими характеристиками:

  • Поддержка балансировки TCP, в том числе HTTP/2;
  • Поддержка TCP Health Checks с автоматическим отключением вышедшего из строя узла.

Схема решения по балансировке для gRPC-трафика:

Резервирование компонентов Avanpost FAM Mobile Services для Avanpost Authenticator

Резервирование компонентов Avanpost FAM Mobile Services может применяться для повышения доступности сервиса MFA с использованием мобильного аутентификатора Avanpost Authenticator. 

Для резервирования следует использовать TCP-балансировщик, в роли которого можно как использовать тот же экземпляр балансировщика, что и для основного трафика TCP. Также может быть использован отдельный балансировщик, размещённый в DMZ.

Схема резервирования компонентов Avanpost FAM Mobile Services:

Резервирование базы данных системы

Резервирование обеспечивается путём построения кластера на базе СУБД PostgreSQL с репликацией данных.

Репликация осуществляется в режиме Master-Slave и позволяет обеспечить резервирование базы данных системы. Все узлы системы работают с одним экземпляром базы данных.

В случае отказа Master-экземпляра базы данных осуществляется автоматическое переключение на Slave. После восстановления Master-экземпляра базы данных выполняется операция обратного ручного переключения на Master-экземпляр.

Схема резервирования базы данных системы:

Минимальный состав виртуальных машин для отказоустойчивого развёртывания

Минимальная конфигурация состоит из следующих виртуальных машин:

Наименование машиныКол-воНазначениеПримечание
TCP/UDP Load Balancer1*Балансировщик входящего TCP/UDP-трафика, Health Check для TCP/UDP-трафика с отключением вышедшего из строя узла Avanpost FAM Server или узла Avanpost FAM Mobile ServicesПри наличии развёрнутого стороннего корпоративного балансировщика, подходящего для решения задач балансировки, можно исключить данную машину
Avanpost FAM Server2Обслуживание всех запросов-
DB Load Balancer1Балансировщик трафика к БД PostgreSQL-
DB2Кластер БД из двух узлов (Master-Slave)-
TCP/UDP DMZ Load Balancer1*Балансировщик входящего TCP/UDP-трафика для DMZ-компонентовПри наличии развёрнутого стороннего корпоративного балансировщика, подходящего для решения задач балансировки, можно исключить данную машину
Avanpost FAM Mobile Services2DMZ-компоненты для обслуживания мобильного приложения-аутентификатора Avanpost AuthenticatorПри отсутствии потребности в мобильном аутентификаторе Avanpost Authenticator можно исключить данные машины

Аппаратная конфигурация каждой из машин определяется исходя из рекомендаций по масштабированию и планируемого профиля нагрузки. 

Получение значений IP-адресов пользователей

Алгоритм получения значения IP-адреса:

  • Во входящем HTTP-запросе система проверяет наличие специальных служебных заголовков, которые могут содержать IP-адрес, сначала X-Forwarded-For, потом X-Real-IP.
  • Если заголовки отсутствуют, то значение для IP-адреса извлекается из сетевых настроек входящего HTTP-запроса. 

Для получения IP-адресов пользователей и их записи в журнал безопасности нужно добавить передачу одного из служебных заголовков в конфигурации балансировщика.

Требования к окружению

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

  1. В ОС должны быть установлены следующие программы:
    - openssl (программа управления сертификатами);
    - tar (программа архивирования);
    - psql (CLI-клиент из состава PostgreSQL);
    - nginx (веб-сервер/прокси-сервер);
    - sudo (программа выполнения команд от имени суперпользователя).

Балансировка веб-интерфейсов

Балансировка веб-интерфейсов – метод распределения нагрузки между несколькими серверами, обслуживающими веб-приложения, с целью обеспечения высокой доступности, повышения производительности и отказоустойчивости.

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

Данный метод подходит для распределения HTTP-трафика между несколькими серверами.

Для настройки балансировки веб-интерфейсов необходимо:

  1. На серверах со службой FAM в конфигурационном файле config.json в качестве хоста указать IP-адрес сервера:

    app-server1

    "server": {
        "host": "%IP-адрес сервера 1%",
        "port": 4008
      }

    app-server2

    "server": {
        "host": "%IP-адрес сервера 2%",
        "port": 4008
      }
  2. Создать конфигурационный файл /etc/nginx/sites-available/lb.conf, заполнить параметрами, указанными ниже, заменив %заполнители% на значения IP-адресов :

    upstream backend {
            server %IP-адрес сервера приложений 1%:4008;
            server %IP-адрес сервера приложений 2%:4008;
        }
    server {
           listen 80;
    	   server_name idp.avanpost.local
           location / {
              proxy_pass http://backend;
              proxy_http_version 1.1;
         
              proxy_set_header   Upgrade $http_upgrade;
              proxy_set_header   Connection keep-alive;
              proxy_set_header   Host $http_host;
              proxy_cache_bypass $http_upgrade;
              proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
              proxy_set_header   X-Forwarded-Proto $scheme;
           }
        }
  3. В конфигурационном файле /etc/nginx/nginx.conf добавить запись в секцию http:

    include /etc/nginx/sites-available/*;
  4. Перезапустить службу nginx.

Балансировка gRPC

Балансировка нагрузки gRPC — это процесс распределения входящих запросов между несколькими экземплярами gRPC-серверов для обеспечения оптимальной производительности и доступности при разработке распределенных приложений с использованием gRPC-протокола. 

Данный метод подходит для распределения gRPC-трафика между несколькими серверами.

Для настройки балансировки gRPC необходимо:

  1. Отредактировать файл /etc/nginx/sites-available/lb.conf:

    upstream grpc {
            server %IP-адрес сервера приложений 1%:9007;
            server %IP-адрес сервера приложений 2%:9007;
        }
    server {
           listen 9007;
    	   server_name grpc.avanpost.local
           location / {
              proxy_pass http://grpc;
              proxy_http_version 1.1;
         
              proxy_set_header   Upgrade $http_upgrade;
              proxy_set_header   Connection keep-alive;
              proxy_set_header   Host $http_host;
              proxy_cache_bypass $http_upgrade;
              proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
              proxy_set_header   X-Forwarded-Proto $scheme;
           }
        }
  2. Перезапустить службу nginx.
  3. В результате изменений интерфейс gRPC будет доступен по адресу http://grpc.avanpost.local:9007.


Балансировка RADIUS

Необходима информация о балансировке RADIUS протокола

Обсуждение