Настройка кластера

Документация Avanpost IDM 7 : 4.3. Настройка кластера

Avanpost IDM Base представляет собой комплексное решение, состоящее из нескольких компонентов, которые взаимодействуют между собой для распределения задач и выполнения команд. Взаимодействие компонентов осуществляется внутри кластера, основанного на акторной модели Akka.NET.

Кластерная модель развертывания базируется на двух системах:

  • AFlow представляет собой систему для управления бизнес-процессами и запускается на сервисе IGA. Роль AFlow включает автоматическое распределение задач по кластеру и запуск бизнес-процессов.
  • Система IGA объединяет сервисы IGA и IDM, включая остальные роли в рамках сервисов.

Система Avanpost IDM содержит следующие компоненты:

  • Сервис IGA: 
     – предоставляет API и веб-интерфейс для операционного и административного управления Системой;
     – осуществляет обработку кадровых событий;
     – генерирует события аудита, отчеты и аттестации;
     – обеспечивает управление ходом бизнес-процессов, включая задачи, подзадачи и последовательность действий, построение дерева задач, регистрацию событий и другие функции, необходимые для автоматизации рабочих процессов. В рамках кластера AFlow выполняет роль мастера, координируя выполнение задач и управляя работой других компонентов.
  • Сервис IDM:
     – отвечает за коннекторы и запуск заданий планировщиков;
     – выполняет фоновые процессы;
     – осуществляет отправку событий аудита;
     – обеспечивает функционирование ролевой модели управления доступом;
     – управляет кадровой структурой: осуществляет запуск процессов кадровой синхронизации и обработку кадровых событий.
  • Приложение IDM. Console предназначено для выполнения сервисных процедур и диагностики через интерфейс командной строки.
  • БД IDM, схемы которой хранят:
     – конфигурацию IDM, информацию о пользователях и их правах доступа, включая историю;
     – процессы и документы.
  • Сервис коннекторов предназначен для абстрагирования (сегментации) компонентов Системы от коннекторов с целью сетевой изоляции, развертывания коннекторов в окружении, отличном от основной инфраструктуры системы IDM.

Взаимодействие сервисов для распределения задач и выполнения команд производится через кластер, организованный на основе системы распределенных вычислений Akka.Net.

Для настройки кластера используются отдельные файлы конфигурации, расположение которых определяется переменной окружения "CLUSTER_CFG", или секции "cluster" внутри основного файла конфигурации.

Если запуск происходит на одном сервере , требуется чтобы порты между системами не пересекались. Для работы кластера требуется как минимум одна нода с системой AFlow.
Для корректной работы однонодовой конфигурации так же необходим кластер, объединяющий сервисы idm и iga для взаимодействия между ними.

Навигатор по разделу:

1. Примеры конфигурационных файлов для сервисов

1.1. Пример файла конфигурации кластера для сервиса idm:

idm-cluster.config
{
  "cluster": {
    "host": "127.0.0.1",				
    "PublicHost":"Some.host.local",		
    "TransportLogging": "false",		
    "SslEnabled": "false",
    "ssl": {
      "SuppressValidation": "true",
      "CertificatePath": "somepath",
      "CertificatePassword": "somepwd",
      "CertificateFlags": [
        "default-flag-set"
      ]
    },
    "Systems": {
      "Iga": {
        "Port": "1778",
        "FailureDetector":{
          "HeartbeatInterval": "12",
		  "AcceptableHeartbeatPause": "21",
          "ExpectedResponseAfter": "8",
          "Threshold": "12"
        }, 
        "ClusterRoles": [ "idm","sch_processor" ],
        "MemberNodes": [
          {
            "Host": "127.0.0.1",
            "Port": "1778"
          },
          {
            "Host": "127.0.0.1",
            "Port": "1779"
          },
          {
            "Host": "127.0.0.1",
            "Port": "1780"
          }
        ]
      },
      "Workers":{
        "Port": "1776",
        "FailureDetector":{
          "HeartbeatInterval": "12",
		  "AcceptableHeartbeatPause": "21",
          "ExpectedResponseAfter": "8",
          "Threshold": "12"
        },
        "ClusterRoles":[
          "lockunlock_q"
        ],
        "MemberNodes": [
          {
            "Host": "127.0.0.1",
            "Port": "1775"
          },
          {
            "Host": "127.0.0.1",
            "Port": "1776"
          }
        ]
      }
    }
  }
}

1.2. Пример файла конфигурации кластера для сервиса iga:

iga-cluster.config
{
  "cluster": {
    "host": "127.0.0.1",
    "PublicHost":"Some.host.local",
    "TransportLogging": "false",
    "SslEnabled": "false",
    "ssl": {
      "SuppressValidation": "true",
      "CertificatePath": "somepath",
      "CertificatePassword": "somepwd",
      "CertificateFlags": [
        "default-flag-set"
      ]
    },
    "Systems": {
      "Iga": {
        "Port": "1778",
        "ClusterRoles": [
          "hr_processor","iga"
        ],
         "FailureDetector":{
          "HeartbeatInterval": "12",
		  "AcceptableHeartbeatPause": "21",
          "ExpectedResponseAfter": "8",
          "Threshold": "12"
        }, 
         "MemberNodes": [
          {
            "Host": "127.0.0.1",
            "Port": "1778"
          },
          {
            "Host": "127.0.0.1",
            "Port": "1779"
          },
          {
            "Host": "127.0.0.1",
            "Port": "1780"
          }
        ]
      },
      "AFlow":{
        "Port": "1782",
        "FailureDetector":{				
          "HeartbeatInterval": "12",		
		  "AcceptableHeartbeatPause": "21", 
          "ExpectedResponseAfter": "8",     
          "Threshold": "12"				
        }, 
        "Executors": 4, 			
        "Persistent":{
          "Writers": 2,	 				 
          "MaxConcurrentRecoveries": "50", 
          "CircuitBreaker":{             
             "MaxFailures": "5",           
             "CallTimeout": "5",		   	
             "ResetTimeout": "5"		   	
          }
        },
        "ClusterRoles": [ ],
        "MemberNodes": [
          {
            "Host": "127.0.0.1",
            "Port": "1782"
          },
          {
            "Host": "127.0.0.1",
            "Port": "1783"
          }
        ]
      }
    }
  }
}

2. Описание параметров конфигурационных файлов

2.1. Корневые элементы конфигурации

ПараметрПримеры значенийПояснение
host

127.0.0.1

Обозначение сетевого интерфейса

10.10.120.5

PublicHost

10.10.120.5

Обозначение идентификатора, по которому к машине можно обратиться снаружи (если машина не может распознать сама себя по адресу в параметре "host"). Может быть задана через переменную окружения "IGA_CLUSTER_PUBLIC_HOST"

some.dns.name

TransportLogging

falseВключение логгирования сетевого протокола akka
true
SslEnabled

falseВключение ssl
true
sslсм. Настройка sslНастройка ssl-параметров при включенном параметре "SslEnabled"
Systemsсм. Настройка системНастройка систем

2.2. Настройка ssl

ПараметрПримеры значенийПояснение

SuppressValidation


true

Валидация сертификата

false

CertificatePath

/some/path/to/cert

Путь до сертификата

CertificatePassword

pwd

Пароль сертификата

CertificateFlags

["default-key-set"]

Хранилище ключей. Доступные значения:

  • default-key-set
  • exportable
  • machine-key-set
  • persist-key-set
  • user-key-set
  • user-protected

2.3. Настройка систем 

2.3.1. IGA

ПараметрПримерПояснение
Port"1777"Сетевой порт, на котором будет работать система
FailureDetectorсм. FailureDetectorНастройка, отвечающая за детектирование недоступных нод кластера
ClusterRoles[ "iga", "hr_processor" ]Подробнее cм. Таблица распределения систем и ролей в кластере
MemberNodes см. MemberNodesНабор всех нод или seed-нод для заданной системы

2.3.2. AFLOW

ПараметрПримерПояснение
Port"1779"Сетевой порт, на котором будет работать система
FailureDetectorсм. FailureDetectorНастройка, отвечающая за детектирование недоступных нод кластера
ClusterRoles[ ]Подробнее cм. Таблица распределения систем и ролей в кластере
MemberNodes см. MemberNodesНабор всех нод или seed-нод для заданной системы
Executors4Количество потоков для выполнения блоков бизнес-процессов. Используется для контроля нагрузки на БД и сервер. 10 подов по 4 executor = 40 потоков. Если ресурсы на поде ограничены, то следует создать множество подов с небольшим количеством executors
Persistentсм. PersistentКонтроль нагрузки на БД, создаваемой движком бизнес-процессов

2.3.3. Persistent 

ПараметрПодпараметрПримерПояснение

Writers

2

Количество акторов, которые принимают запросы на запись в БД. Используется для контроля нагрузки на запись в БД. 10 нод по 2 writer = 20 потоков записи в БД. 

MaxConcurrentRecoveries

"50"

Количество одновременно восстановляемых из БД акторов. Используется для контроля нагрузки на чтение в БД.

CircuitBreaker





{}

Защита от DOS БД. При включенном CircuitBreaker запросы сбрасываются.

MaxFailures

5

Количество упавших подряд запросов, после которого CircuitBreaker включается

CallTimeout

5

Таймаут выполнения запроса, после которого запрос получает статус Failure

ResetTimeout

5

Таймаут, после которого CircuitBreaker выключается

2.3.4. Таблица распределения систем и ролей в кластере 

СистемаРольКомпонентКомментарий

IGA


iga

IGA

Фронтенд, обработка некоторых видов событий(кроме кадровых)

idm

IDM

Коннекторы, запуск заданий планировщиков

hr_processor

IGA

Обработка кадровых событий

securityevent_q

IGA

Отправка событий аудита

sch_processor

IDM

Обработка событий на запуск планировщика

aflow

IGA

Обработка событий на запуск бизнес-процессов. Требует наличие системы AFlow.

lockunlock_q

IDM

background-задачи, работающие в фоне (ядро IDM)

AFLOW

авто распределение

IGA

Движок бизнес-процессов. Можно игнорировать поле "MemberNodes"  для данной системы или оставить "MemberNodes": [ ]

Требует наличия роли aflow для IGA системы.

2.3.5. Общие компоненты систем

2.3.5.1. FailureDetector 

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

ПараметрПримерПояснение
HeartbeatInterval"12"Интервал в секундах между Heartbeat-сообщениями. Если HeartbeatInterval >= (AcceptableHeartbeatPause/3)*2 , то в логе будут регулярно появляться Warning сообщения "Heartbeat interval is growing too large".
AcceptableHeartbeatPause"21"Количество потерянных или задержанных heartbeat-сообщений, после которого FailureDetector пометит ноду как потенциально упавшую.
ExpectedResponseAfter"8"Время в секундах, которое нода будет ждать ответ на посланное heartbeat-сообщение
Threshold"12"Порог срабатывания FailureDetector. Чем ниже порог, тем быстрее FailureDetector будет срабатывать, и тем больше будет ложных срабатываний.

2.3.5.2. MemberNodes 

Набор всех нод или seed-нод для заданной системы.

В случае использования seed-нод достаточно указать только первые ноды для каждой роли в данной системе.

[
  {
    "Host": "127.0.0.1",
    "Port": "1777"
  },
  {
     "Host": "127.0.0.1",
     "Port": "1779"
  }
]

3. Схема-пример однонодового развертывания

4. Схема-пример развертывания кластера в K8s "по ролям"




Обсуждение