Кластер

Кластер

0.3 NEW — Балансировка нагрузки между несколькими серверами.

Кластерный режим позволяет объединить несколько серверов Al(co)pac в каскад. Трафик и нагрузка распределяются между всеми нодами.

Архитектура

                 +-------------+
  Клиенты  --->  |   Primary   |
                 |  (основной) |
                 +--+----+--+--+
                    |    |  |
           +--------+    |  +--------+
           |             |           |
           v             v           v
      +---------+   +---------+   +---------+
      | Node 1  |   | Node 2  |   | Node 3  |
      +---------+   +---------+   +---------+
  • Primary — принимает все запросы от клиентов и распределяет нагрузку
  • Node — выполняет запросы к балансерам и возвращает результат primary-серверу

Настройка Primary

[cluster]
enable = true
mode = "primary"
api_key = "shared_secret_key_123"   # общий секрет для аутентификации между нодами

[[cluster.nodes]]
host = "http://192.168.1.10:888"
weight = 1    # относительный вес (больше = больше трафика)

[[cluster.nodes]]
host = "http://192.168.1.11:888"
weight = 2    # эта нода получает вдвое больше запросов

[[cluster.nodes]]
host = "http://192.168.1.12:888"
weight = 1

Настройка Node

[cluster]
enable = true
mode = "node"
api_key = "shared_secret_key_123"   # тот же секрет, что и на primary

Алгоритм распределения

Используется least-connections с учётом весов:

  • Запрос направляется на ноду с наименьшим количеством активных соединений (пропорционально весу)
  • Если нода недоступна — автоматический failover на другую
  • Кэш потоков синхронизируется между нодами

Что распределяется

Тип запросаРаспределение
Балансеры (/lite/*)Да — самая тяжёлая нагрузка
Browser-сессии (Mirage, Alloha)Да — по одной на ноду
TMDB proxyНет — каждая нода кэширует локально
Статика, авторизацияНет — обрабатывает primary

Требования

  • Все ноды должны быть доступны по сети с primary
  • api_key должен совпадать на всех серверах
  • Ноды могут иметь разные токены балансеров (для обхода rate-limits)