Кластер и отказоустойчивость
Несколько узлов SPZGate реплицируют друг другу историю трекера в реальном времени — без единой точки отказа и без промежуточного сервера.
Как устроена репликация
Каждый узел ведёт собственный WAL (write-ahead log) всех событий трекера. Узлы обмениваются данными напрямую друг с другом по собственному бинарному протоколу — без HTTP и без зависимости от веб-панели: сама панель лишь просит свой локальный движок выполнить операцию, а дозванивается до другого узла уже он сам.
- Каждая запись подтверждается индивидуально — при недоступности одного узла остальные продолжают обмен между собой без задержек
- Очередь на недоступный узел копится в WAL и досылается автоматически, когда узел возвращается
- Приём почты и приём подтверждений от кластера идут независимо — недоступность соседнего узла не замедляет обработку входящей почты на этом
- Для связи между узлами нужен только один сетевой порт (по умолчанию
7656) — тот же, что уже используется для передачи данных трекера
Добавление узла в кластер
На первом узле: добавьте пару без кода
В панели первого узла откройте раздел Шлюзы → Добавить шлюз, укажите IP второго узла и направление (обычно «оба»), поле «Код» оставьте пустым. Узел сгенерирует пару и код подтверждения — пара останется в статусе «Ожидает подтверждения», пока её не подтвердят со второй стороны.
На втором узле: добавьте пару с этим кодом
В панели второго узла — тот же раздел Шлюзы → Добавить шлюз, IP первого узла и код, полученный на шаге 1. Второй узел дозванивается до первого напрямую по бинарному протоколу и подтверждает пару — оба узла переходят в статус «Активна» одновременно, без дополнительных действий на первом узле.
Автообнаружение остальных узлов кластера
Как только пара становится активной, оба узла «знакомят» новый узел со всеми своими остальными активными парами. Поэтому для кластера из трёх и более узлов достаточно одной ручной пары между новым узлом и любым узлом уже существующего кластера — остальные связи выстроятся сами, без похода по каждому узлу отдельно.
При необходимости — подтяните полную историю
Новая пара реплицирует новые события сразу, но не досылает историю, накопленную ДО момента пары. Если присоединяется узел с уже накопленными самостоятельно данными (например, поднятый из бэкапа) и историю нужно свести к одному состоянию — используйте кнопку «Синхронизировать» у нужной пары (см. ниже).
Управление репликацией и синхронизацией
Раздел Шлюзы показывает все пары этого узла, их статус и отставание от актуального состояния.
Рядом со статусом активной пары показано отставание — сколько записей ещё не подтверждено соседним узлом и сколько времени прошло с последнего подтверждения. Устойчивое ненулевое отставание, которое не сокращается, — повод проверить сетевую связность между узлами на порту репликации.
Синхронизировать / Синхронизировать весь кластер
Кнопка «Синхронизировать» у конкретной пары запускает полный перенос данных с узла-источника (см. предупреждение в шаге 4). «Синхронизировать весь кластер» — то же самое по очереди для каждой активной пары этого узла. Операция блокирующая и может занять продолжительное время на большой истории — не закрывайте вкладку до завершения.
Отозвать и Удалить
Обе кнопки останавливают пару, но не одинаково надёжно:
- Удалить — удаляет саму пару. Останавливает репликацию гарантированно и сразу.
- Отозвать — помечает пару неактивной, не удаляя её. Если у отозванного узла остаётся хотя бы одна ДРУГАЯ активная пара с третьим узлом кластера, автообнаружение (см. выше) может повторно представить его вашему узлу и восстановить репликацию.
SMTP-балансировщик между узлами
Когда почта разных доменов обрабатывается разными узлами, а внешний мир должен видеть один адрес, перед узлами ставится SMTP-балансировщик: он принимает сессии на одном адресе и распределяет их по узлам — поровну, по весам, с резервными серверами и по статическим маршрутам для отправителей и получателей. Балансировщик устанавливается одной командой установщика и настраивается файлом smtp_balancer.conf.
curl -fsSL https://spamorez.ru/spzgate/install.sh | sudo bash -s -- --balancer --servers 10.0.0.11,10.0.0.12Подробнее в разделе «Балансировка»: установка и параметры, балансировка backend-серверов, маршруты по отправителю и по получателю, журналы и статус.