Skip to content
Эта страница создана и переведена с помощью ИИ. Если вы заметили неточности, помогите нам улучшить её. Редактировать на GitHub

Кластерный режим

PRX-WAF поддерживает многоузловые кластерные развёртывания для горизонтального масштабирования и высокой доступности. Кластерный режим использует межузловую коммуникацию на базе QUIC, выбор лидера по принципу Raft и автоматическую синхронизацию правил, конфигурации и событий безопасности между всеми узлами.

INFO

Кластерный режим полностью опционален. По умолчанию PRX-WAF работает в автономном режиме без кластерных накладных расходов. Включите его, добавив раздел [cluster] в вашу конфигурацию.

Архитектура

Кластер PRX-WAF состоит из одного главного узла и одного или нескольких рабочих узлов:

mermaid
graph TB
    subgraph Cluster["PRX-WAF Cluster"]
        MAIN["Main Node (node-a)<br/>Leader Election + Config Source"]
        WORKER1["Worker Node (node-b)<br/>Traffic Processing"]
        WORKER2["Worker Node (node-c)<br/>Traffic Processing"]
    end

    DB["PostgreSQL<br/>(Shared or Replicated)"]

    MAIN <-->|QUIC + mTLS| WORKER1
    MAIN <-->|QUIC + mTLS| WORKER2
    MAIN --> DB
    WORKER1 --> DB
    WORKER2 --> DB

Роли узлов

РольОписание
mainХранит авторитетную конфигурацию и набор правил. Передаёт обновления рабочим узлам. Участвует в выборе лидера.
workerОбрабатывает трафик и применяет конвейер WAF. Получает обновления конфигурации и правил от главного узла. Передаёт события безопасности обратно главному.
autoУчаствует в выборе лидера по принципу Raft. Любой узел может стать главным.

Что синхронизируется

ДанныеНаправлениеИнтервал
ПравилаОт главного к рабочимКаждые 10с (настраивается)
КонфигурацияОт главного к рабочимКаждые 30с (настраивается)
События безопасностиОт рабочих к главномуКаждые 5с или 100 событий (что наступит раньше)
СтатистикаОт рабочих к главномуКаждые 10с

Межузловая коммуникация

Вся кластерная коммуникация использует QUIC (через Quinn) через UDP с взаимным TLS (mTLS):

  • Порт: 16851 (по умолчанию)
  • Шифрование: mTLS с автоматически сгенерированными или предоставленными сертификатами
  • Протокол: Пользовательский бинарный протокол через QUIC-потоки
  • Соединение: Постоянное с автоматическим переподключением

Выбор лидера

При настройке role = "auto" узлы используют протокол выборов по принципу Raft:

ПараметрПо умолчаниюОписание
timeout_min_ms150Минимальный таймаут выборов (случайный диапазон)
timeout_max_ms300Максимальный таймаут выборов (случайный диапазон)
heartbeat_interval_ms50Интервал heartbeat от главного к рабочим
phi_suspect8.0Порог подозрения детектора отказов Phi accrual
phi_dead12.0Порог смерти детектора отказов Phi accrual

Когда главный узел становится недоступным, рабочие узлы ждут случайного таймаута в настроенном диапазоне перед инициированием выборов. Первый узел, получивший большинство голосов, становится новым главным.

Мониторинг здоровья

Проверка здоровья кластера выполняется на каждом узле и отслеживает связность с пирами:

toml
[cluster.health]
check_interval_secs   = 5    # Частота проверки здоровья
max_missed_heartbeats = 3    # Помечать пир как нездоровый после N пропусков

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

Управление сертификатами

Узлы кластера аутентифицируют друг друга с использованием mTLS-сертификатов:

  • Режим автогенерации: Главный узел генерирует CA-сертификат и автоматически подписывает сертификаты узлов при первом запуске. Рабочие узлы получают свои сертификаты в процессе присоединения.
  • Предоставленный режим: Сертификаты генерируются офлайн и распространяются на каждый узел перед запуском.
toml
[cluster.crypto]
ca_cert        = "/certs/cluster-ca.pem"
node_cert      = "/certs/node-a.pem"
node_key       = "/certs/node-a.key"
auto_generate  = true
ca_validity_days    = 3650   # 10 лет
node_validity_days  = 365    # 1 год
renewal_before_days = 7      # Автоматически обновлять за 7 дней до истечения

Следующие шаги

Released under the Apache-2.0 License.