Отказоустойчивость и масштабирование¶
Система поддерживает горизонтальное масштабирование и работу в кластерном режиме (Active-Active / Active-Passive). Несколько экземпляров Системы развёртываются за общим балансировщиком нагрузки, все данные хранятся в общей СУБД PostgreSQL.
Кластерное развёртывание решает две задачи:
- отказоустойчивость — сбой одного узла не приводит к недоступности Системы
- производительность — нагрузка распределяется между всеми узлами кластера
Режимы развёртывания¶
Active-Active¶
Все узлы кластера одновременно обрабатывают запросы. Балансировщик распределяет входящие запросы между узлами, снижая нагрузку на каждый из них. При росте нагрузки к кластеру добавляются новые узлы без изменения архитектуры.
Active-Passive¶
Один узел обслуживает все запросы, второй работает в режиме горячего резерва. Балансировщик направляет трафик на активный узел и контролирует его доступность. При отказе активного узла трафик автоматически переключается на резервный, после восстановления узла работа возвращается к исходной схеме.
Режим определяется настройками балансировщика, Система работает в обоих режимах без дополнительной настройки.
Архитектура кластера¶
Минимальный состав отказоустойчивого развёртывания:
| Компонент | Кол-во | Назначение |
|---|---|---|
| Балансировщик нагрузки | 1 | Распределение трафика между узлами и контроль их доступности |
| Допуск | 2 и более | Обслуживание запросов пользователей |
| Единая точка входа | 2 и более | Аутентификация пользователей |
| Кластер PostgreSQL | 2 | Хранение данных, репликация Основной-Резервный |
Узлами кластера могут быть виртуальные машины, физические серверы или контейнеры. При наличии корпоративного балансировщика отдельный сервер для него не требуется.
Настройка узлов Системы¶
-
Развернуть не менее двух узлов Системы по инструкции Установка системы, указав на каждом узле общую базу данных, адреса балансировщика и включив кластерный режим:
Где dopusk.local и sso.local — адреса балансировщика для Системы и Единой точки входа.
-
Развернуть не менее двух узлов Единой точки входа по той же инструкции и разместить их за балансировщиком.
-
При необходимости в параметре
-Dapp.base-urlуказываются дополнительные адреса, разрешённые для входа в Систему, через разделитель|.
Примечание
Доступна тонкая настройка параметров кластера: периодичность фоновых задач, сходимость кешей между узлами и другие. Информация по тонкой настройке предоставляется по дополнительному запросу.
Настройка балансировщика нагрузки¶
Балансировщик должен:
- контролировать доступность узлов и автоматически исключать недоступные из распределения
- сохранять привязку сессии пользователя к одному узлу (session affinity) — сессии пользователей хранятся в памяти узла
- передавать заголовки
HostиX-Forwarded-For, как описано в разделе Использование обратного прокси-сервера
Пример настройки nginx для режима Active-Active:
Для Единой точки входа настраивается аналогичный блок server с именем sso.local
и proxy_pass http://sso/auth/ — см. пример в разделе
Использование обратного прокси-сервера.
Для режима Active-Passive резервный узел помечается директивой backup — трафик
направляется на него только при недоступности основного узла:
| /etc/nginx/conf.d/lb.conf | |
|---|---|
Резервирование базы данных¶
Все узлы Системы работают с одним экземпляром базы данных PostgreSQL. Отказоустойчивость на уровне СУБД обеспечивается штатной репликацией PostgreSQL в режиме Основной-Резервный (Master-Slave) с автоматическим переключением при отказе основного узла.
Для построения кластера PostgreSQL применяются:
- потоковая репликация PostgreSQL
- решения автоматического переключения — Patroni, pgpool-II
- управляемые кластеры облачных провайдеров