Построение отказоустойчивой маршрутизации для игрового кластера CS2: практическое руководство по VRRP и Keepalived | AdminWiki
Timeweb Cloud — сервера, Kubernetes, S3, Terraform. Лучшие цены IaaS.
Попробовать

Построение отказоустойчивой маршрутизации для игрового кластера CS2: практическое руководство по VRRP и Keepalived

05 июня 2026 8 мин. чтения

Падение основного сетевого шлюза приводит к моментальной потере связи всех серверов Counter-Strike 2 с интернетом. Активные матчи обрываются, игроки теряются, репутация кластера страдает. Это классическая единая точка отказа, которую устраняют протокол резервирования VRRP и его реализация в Linux - демон Keepalived.

Решение создает виртуальный маршрутизатор с общим IP-адресом. Этот адрес автоматически переходит на резервный физический узел при сбое основного, обеспечивая непрерывность сетевого пути для игрового трафика. Ниже вы найдете проверенные конфигурации для архитектуры "активный-пассивный", интеграцию с мониторингом состояния игрового сервера SRCDS и инструкции по тестированию отказоустойчивости.

Проблема: почему отказ сетевого шлюза убивает игровой кластер CS2

В инфраструктуре игрового кластера сетевой шлюз - это критический узел. Его отказ означает полную потерю внешней связности для всех серверов, расположенных за ним. Для Counter-Strike 2 последствия катастрофичны: разрыв всех активных TCP-соединений с игроками, невозможность установить новые подключения, срабатывание таймаутов Steam. Восстановление даже после быстрого ремонта шлюза займет время, пока игроки заново обнаружат серверы.

Требования Counter-Strike 2 к сетевой инфраструктуре: доступность и задержка

Стабильная работа CS2 предъявляет два ключевых требования к сети: максимальная доступность и минимальная задержка. Исследования сообщества показывают, что для комфортной игры пинг должен оставаться в пределах 30-50 мс. Это достигается географической близостью сервера к игрокам, как в примере сервера "ТЮРЬМА СТРОГОГО РЕЖИМА" (Counter-Strike: Source) с IP 94.159.116.64, расположенного в России.

Любое решение высокой доступности не должно добавлять лишних сетевых хопов или увеличивать задержку. Кроме того, система защиты VAC (Valve Anti-Cheat) требует стабильного и предсказуемого сетевого пути. Резкие изменения маршрутизации или потери пакетов могут быть интерпретированы как подозрительная активность.

Решение: как VRRP и Keepalived обеспечивают непрерывность работы шлюза

Протокол Virtual Router Redundancy Protocol (VRRP) решает проблему единой точки отказа на уровне сетевого шлюза. Группа физических маршрутизаторов объединяется в виртуальный, которому назначается общий IP-адрес (Virtual IP, VIP). Трафик всегда направляется на этот VIP. Внутри группы один узел выполняет роль мастера (Master) и обрабатывает трафик, остальные находятся в режиме резерва (Backup).

Keepalived - это демон для Linux, реализующий VRRP. Он отвечает за обмен служебными пакетами между узлами, выбор мастера на основе приоритета и перемещение VIP при изменении состояния. При отказе мастера резервный узел с наивысшим приоритетом за доли секунды берет на себя обработку трафика, сохраняя связность для игровых серверов.

Архитектуры высокой доступности: активный-пассивный vs активный-активный для CS2

Для большинства кластеров CS2 оптимальна архитектура "активный-пассивный". Один узел (активный) обрабатывает весь трафик через единственный VIP. Второй узел (пассивный) находится в горячем резерве. Эта схема проста в настройке и гарантирует, что маршрут для игроков остается неизменным, что важно для стабильности пинга.

Архитектура "активный-активный" предполагает использование нескольких VIP и балансировку нагрузки между узлами. Для типичного игрового кластера это часто избыточно и может усложнить диагностику. Однако ее стоит рассмотреть, если нужно разделить трафик: например, направить игровые сессии через один шлюз, а трафик веб-панели управления и FastDL - через другой. Для комплексной балансировки самого игрового трафика между серверами лучше использовать специализированные решения, описанные в руководстве по балансировке нагрузки для кластера CS2.

Пошаговая настройка Keepalived для активного-пассивного кластера

Инструкция проверена на Ubuntu 22.04 LTS и Rocky Linux 8. Предполагается, что у вас есть два физических сервера или виртуальные машины, выполняющие роль шлюзов, с настроенными сетевыми интерфейсами и базовой маршрутизацией.

  1. Установите пакет keepalived на оба узла:
    # Для Ubuntu/Debian
    sudo apt update && sudo apt install keepalived -y
    
    # Для CentOS/Rocky Linux/RHEL
    sudo dnf install keepalived -y
  2. Настройте сетевые интерфейсы. Убедитесь, что интерфейс, участвующий в VRRP (например, eth0 или ens192), имеет статический IP. Настройте маршрутизацию так, чтобы этот интерфейс был шлюзом для вашей внутренней сети с игровыми серверами.
  3. Отключите или настройте NetworkManager, если он конфликтует с ручным управлением адресами. На CentOS/Rocky:
    sudo systemctl disable --now NetworkManager

Готовая конфигурация keepalived.conf (Master и Backup)

Создайте или отредактируйте файл /etc/keepalived/keepalived.conf. Используйте разные конфигурации для мастера и резерва.

Для MASTER-узла:

global_defs {
    router_id gateway_master_01 # Уникальный ID для этого узла
}

vrrp_instance VI_CS2 {
    state MASTER               # Изначальное состояние
    interface eth0             # Сетевой интерфейс для VRRP
    virtual_router_id 51       # ID виртуального маршрутизатора (1-255). Должен совпадать на всех узлах группы.
    priority 150               # Приоритет для выбора мастера (выше = приоритетнее)
    advert_int 1               # Интервал объявлений в секундах

    authentication {
        auth_type PASS
        auth_pass SecurePass123 # Пароль для аутентификации VRRP-пакетов. Используйте свой.
    }

    virtual_ipaddress {
        192.168.1.254/24 dev eth0 # Виртуальный IP (VIP). Это будет шлюз для ваших игровых серверов.
    }
}

Для BACKUP-узла:

global_defs {
    router_id gateway_backup_01
}

vrrp_instance VI_CS2 {
    state BACKUP               # Изначальное состояние - резерв
    interface eth0
    virtual_router_id 51       # Должен совпадать с мастером!
    priority 100               # Приоритет ниже, чем у мастера
    advert_int 1

    authentication {
        auth_type PASS
        auth_pass SecurePass123 # Тот же пароль, что и на мастере
    }

    virtual_ipaddress {
        192.168.1.254/24 dev eth0 # Тот же VIP
    }
}

После настройки файлов запустите и добавьте демон в автозагрузку на обоих узлах:

sudo systemctl enable --now keepalived

Интеграция мониторинга состояния игрового сервера (SRCDS)

Базовая настройка VRRP переключает VIP при сетевом сбое шлюза. Но что, если сеть работает, а процесс игрового сервера SRCDS на одном из узлов кластера упал? Keepalived позволяет отслеживать custom-скрипты и менять приоритет узла в зависимости от их результата.

Создайте скрипт проверки, например, /usr/local/bin/check_srcds.sh:

#!/bin/bash
# Проверяет, слушает ли SRCDS игровой порт 27015 на локальном интерфейсе.
if ss -tuln | grep -q ':27015 '; then
    exit 0 # Порт слушает - проверка успешна
else
    exit 1 # Порт не слушает - проверка провалена
fi

Сделайте скрипт исполняемым: sudo chmod +x /usr/local/bin/check_srcds.sh.

Добавьте секцию vrrp_script и track_script в конфигурацию Keepalived на обоих узлах (внутри блока vrrp_instance VI_CS2):

vrrp_script chk_srcds {
    script "/usr/local/bin/check_srcds.sh"
    interval 2   # Проверять каждые 2 секунды
    weight -20   # Если проверка fails, уменьшить приоритет на 20
    fall 2       # После 2 неудачных проверок считать проверку проваленной
    rise 1       # После 1 удачной проверки считать восстановленной
}

track_script {
    chk_srcds
}

Теперь, если SRCDS перестанет слушать порт 27015, приоритет узла снизится. Если на резервном узле SRCDS работает, его приоритет станет выше, и он перехватит VIP, перенаправив трафик на рабочий игровой сервер. Это продвинутая техника, которая делает кластер по-настоящему отказоустойчивым. Для мониторинга всей сетевой инфраструктуры, включая состояние маршрутов, полезно изучить отдельное руководство по настройке VRRP и OSPF.

Верификация и тестирование отказоустойчивости

Перед вводом в эксплуатацию необходимо убедиться, что переключение работает корректно.

  1. Проверьте текущее состояние: выполните на обоих узлах команду ip addr show eth0. На MASTER-узле вы должны увидеть виртуальный IP (192.168.1.254 в нашем примере). На BACKUP-узле этого адреса быть не должно.
  2. Мониторьте логи в реальном времени: sudo journalctl -u keepalived -f. Вы увидите сообщения о переходе в состояние MASTER/BACKUP и обмене VRRP-пакетами.
  3. Для низкоуровневой отладки используйте tcpdump: sudo tcpdump -i eth0 vrrp. Это покажет служебные multicast-пакеты VRRP.

Сценарии тестирования:

  • Симуляция отказа демона: На MASTER-узле выполните sudo systemctl stop keepalived. В течение 1-3 секунд VIP должен исчезнуть с master-интерфейса и появиться на backup. Игровые сессии, установленные через TCP, могут испытать кратковременную потерю пакетов, но не разорвутся полностью, если переключение быстрое.
  • Симуляция отказа сети: На MASTER-узле отключите интерфейс VRRP: sudo ip link set eth0 down. Резервный узел, не получая VRRP-пакеты, перейдет в состояние MASTER и захватит VIP.
  • Восстановление: Включите обратно демон или интерфейс. Приоритет мастера выше, поэтому после восстановления связи VIP должен вернуться на исходный узел (это поведение можно изменить параметром nopreempt).

Настройка мониторинга и оповещений через SNMP

Для проактивного контроля состояния HA-кластера настройте экспорт метрик через SNMP. Установите и настройте snmpd на обоих узлах. Используйте секцию extend в /etc/snmp/snmpd.conf для проверки состояния Keepalived:

extend keepalived_state /bin/bash -c "systemctl is-active keepalived"
extend keepalived_vrrp /bin/bash -c "ip addr show eth0 | grep -q 192.168.1.254 && echo 'VIP_PRESENT' || echo 'VIP_ABSENT'"

SNMP-агент использует порт 161/UDP для запросов. Настройте вашу систему мониторинга (Zabbix, Nagios, Prometheus) опрашивать эти OID. Для отправки ловушек (traps) при смене состояния Keepalived настройте отправку на порт 162/UDP менеджера. Это можно сделать через скрипт, вызываемый из конфигурации Keepalived в секциях notify_master, notify_backup, notify_fault.

Такой подход, в сочетании с мониторингом сетевых метрик, описанным в статье про оптимизацию сетевой инфраструктуры CS2, дает полную картину здоровья кластера.

Резюме: стабильный кластер CS2 с гарантированной доступностью

Вы прошли путь от осознания риска единой точки отказа до развертывания автоматически переключающегося шлюза на основе VRRP и Keepalived. Теперь отказ физического роутера или сетевого интерфейса не приведет к простою ваших игровых серверов Counter-Strike 2. Решение обеспечивает не только доступность, но и контроль за состоянием самого игрового процесса через интеграцию скриптов мониторинга.

Следующий шаг - скопировать предоставленные конфигурации, адаптировать IP-адреса и имена интерфейсов под вашу сетевую схему и провести тестирование в изолированной среде. Обязательно создайте резервные копии рабочих конфигураций. Для построения более сложных отказоустойчивых архитектур, например, с балансировкой на уровне приложений, изучите руководство по построению кластера Nginx. Это позволит создать комплексную инфраструктуру, где каждый компонент имеет резервирование.

Использование проверенных инструментов, таких как AiTunnel, может помочь в автоматизации рутинных задач администрирования и анализа логов, освобождая время для решения более сложных инфраструктурных задач.

Поделиться:
Сохранить гайд? В закладки браузера