Отказоустойчивость:
Настройка переключения серверов#

Данная статья описывает настройку keepalived для определения master-сервера и автоматического переключения трафика между серверами.

Подготовка к настройке#

Перед началом настройки отказоустойчивости важно учесть:

  1. Оба сервера находятся в одной сети и им доступно минимум 3 адреса:

    • один IP-адрес для основного сервера;

    • один IP-адрес для резервного сервера;

    • один IP-адрес, используемый как виртуальный IP (VIP).

  2. Домен в процессе настройки Отказоустойчивости будет привязан к IP VIP, который выступает в роли балансировщика — весь трафик идет через данный адрес и автоматически перенаправляется на активный сервер (основной или резервный).

Например:

IP for high availability. IP for high availability.

В этом списке внутренние IP находятся в одной подсети.

VIP может быть:

  • публичным IP-адресом, непосредственно назначенным интерфейсу keepalived на серверах;

  • внутренним IP-адресом (например, 192.168.1.6), проброшенным через DST-NAT с публичного адреса (например, 188.124.51.150).

Предупреждение

Если у вас ранее уже был установлен сервер, подключать домен к внешнему IP VIP на этом шаге не требуется.

Примечание

Если сервер с Compass развернут за NAT, выполните следующие действия:

  • Откройте порты 80 и 443 для IP-адреса VIP, в настройках DNAT настройте проброс портов на порты 80 и 443 во внутренней сети для IP VIP.

  • Убедитесь, что порт 10000 UDP открыт на firewall, через который идет трафик для звонков. Если порт закрыт, откройте его для IP VIP.

  • В настройках DNAT настройте проброс порта 10000 UDP с внешнего IP-адреса на порт 10000 UDP сервера Compass во внутренней сети для IP VIP.

  • В конфигурационном файле global.yaml заполните поле jitsi.service.jvb.media_advertise_ips - укажите публичный IP-адрес, а затем через запятую — IP-адрес VIP.

Настройка keepalived#

  1. На основном и резервном серверах установите keepalived, который будет отвечать за перенаправление трафика с одного сервера на другой.

    sudo apt-get install keepalived -y
    
  2. Для корректной работы keepalived разрешите VRRP-трафик в фаерволе на обоих серверах:

    sudo ufw allow 112
    sudo ufw allow to 224.0.0.18
    

    Примечание

    vrrp — это протокол для отказоустойчивости сетевых шлюзов. 224.0.0.18 — это официальный адрес VRRP, через который ноды обмениваются сообщениями о состоянии.

  3. На основном сервере настройте keepalived.

    Создайте папку для конфигурационного файла keepalived:

    sudo mkdir -p /etc/keepalived
    

    Проверьте, какой сетевой интерфейс используется на сервере:

    ip route show default
    

    Пример ответа: default via 192.168.0.1 dev eth0. В данном случае сетевым интерфейсом выступает eth0.

    Создайте файл конфигурации для keepalived:

    sudo touch /etc/keepalived/keepalived.conf
    

    Подставьте свои значения в шаблон ниже и вставьте содержимое в файл /etc/keepalived/keepalived.conf с помощью любого удобного текстового редактора:

    Важные моменты:

    • Подставьте полный путь к установщику Compass в файл конфигурации.

    • Внутренним IP VIP выступает IP, созданный ранее на этапе Подготовка к настройке.

    • Значение для поля virtual_router_id должно быть одинаковым в конфигурационном файле на основном и резервном серверах.

    • Пароль для поля auth_pass должен быть не длиннее 8 символов.

    • Значение для поля auth_pass должно быть одинаковым на основном и резервном серверах.

    • Для скрипта проверки nginx укажите полный путь к установщику Compass.

    • Для скрипта проверки свободного места укажите в аргументе path путь, где смонтированы файлы приложения.

    global_defs {
       router_id PRIMARY # Установите обозначение сервера
    }
    
    # В поле script укажите абсолютный путь к установщику Compass
    vrrp_script chk_nginx {
       script "<полный путь к установщику Compass>/script/replication/check_nginx.py"
       interval 5
       fall 2
       rise 2
       timeout 2
    }
    
    # В поле script укажите абсолютный путь к установщику Compass
    # Для аргумента `path` укажите путь, где смонтированы файлы приложения
    # В поле `threshold` указывается порог (в процентном соотношении) для проверки места на диске
    vrrp_script chk_disk {
       script "<полный путь к установщику Compass>/script/replication/check_disk.py --path /home --threshold 5"
       interval 15
       fall 2
       rise 2
       timeout 2
    }
    
    vrrp_instance VI_1 {
       state BACKUP
       interface eth0        # Замените на имя вашего сетевого интерфейса
       virtual_router_id 50  # virtual_router_id должен совпадать на основном и резервном серверах
       priority 100          # Установите приоритет выше, чем у резервного сервера
       advert_int 1
       nopreempt
       garp_master_repeat 2
       garp_master_refresh 30
       authentication {
          auth_type PASS
          auth_pass "<произвольный пароль>"  # Установите надёжный пароль
       }
    
       virtual_ipaddress {
          <IP для VIP>  # Укажите IP VIP
       }
    
       # Замените на абсолютный путь к установщику Compass
       notify_master "<полный путь к установщику Compass>/script/replication/keepalived_status_changed.py --state MASTER"
       notify_backup "<полный путь к установщику Compass>/script/replication/keepalived_status_changed.py --state BACKUP"
       notify_fault "<полный путь к установщику Compass>/script/replication/keepalived_status_changed.py --state FAULT"
       track_script {
          chk_nginx
          chk_disk
       }
    }
    
  4. Настройте keepalived на резервном сервере.

    Создайте папку для конфигурационного файла keepalived:

    sudo mkdir -p /etc/keepalived
    

    Проверьте, какой сетевой интерфейс используется на сервере:

    ip route show default
    

    Пример ответа: default via 192.168.0.2 dev eth0. В данном случае сетевым интерфейсом выступает eth0.

    Создайте файл конфигурации для keepalived:

    sudo touch /etc/keepalived/keepalived.conf
    

    Подставьте свои значения в шаблон ниже и вставьте содержимое в файл /etc/keepalived/keepalived.conf с помощью любого удобного текстового редактора:

    Примечание

    Подставьте полный путь к установщику в файл конфигурации.

    global_defs {
       router_id RESERVE # Установите обозначение сервера
    }
    
    # В поле script укажите абсолютный путь к установщику Compass
    vrrp_script chk_nginx {
       script "<полный путь к установщику Compass>/script/replication/check_nginx.py"
       interval 5
       fall 2
       rise 2
       timeout 5
    }
    
    # В поле script укажите абсолютный путь к установщику Compass
    # Для аргумента `path` укажите путь, где смонтированы файлы приложения
    # В поле `threshold` указывается порог (в процентном соотношении) для проверки места на диске
    vrrp_script chk_disk {
       script "<полный путь к установщику Compass>/script/replication/check_disk.py --path /home --threshold 5"
       interval 15
       fall 2
       rise 2
       timeout 5
    }
    vrrp_instance VI_1 {
       state BACKUP
       interface eth0        # Замените на имя вашего сетевого интерфейса
       virtual_router_id 50  # virtual_router_id должен совпадать на основном и резервном серверах
       priority 90           # Установите приоритет ниже, чем у основного сервера
       advert_int 1
       nopreempt
       garp_master_repeat 2
       garp_master_refresh 30
       authentication {
          auth_type PASS
          auth_pass "<произвольный пароль>"  # Установите надёжный пароль
       }
    
       virtual_ipaddress {
          <IP для VIP>  # Укажите IP VIP
       }
    
       # Замените на абсолютный путь к установщику Compass
       notify_master "<полный путь к установщику Compass>/script/replication/keepalived_status_changed.py --state MASTER"
       notify_backup "<полный путь к установщику Compass>/script/replication/keepalived_status_changed.py --state BACKUP"
       notify_fault "<полный путь к установщику Compass>/script/replication/keepalived_status_changed.py --state FAULT"
       track_script {
          chk_nginx
          chk_disk
       }
    }
    
  5. На основном сервере запустите keepalived:

    sudo systemctl enable keepalived;
    sudo systemctl start keepalived
    

    Завершите процесс keepalived для состояния BACKUP, которое создаётся при первом запуске:

    kill $(pgrep -f "keepalived_status_changed.py --state BACKUP")
    

    Для проверки успешного запуска keepalived выполните команду:

    sudo systemctl status keepalived
    
  6. На резервном сервере запустите keepalived:

    Предупреждение

    Рекомендуем запускать keepalived сначала на основном сервере и только затем на резервном.
    Таким образом весь трафик начнёт идти через основной сервер и переключится на резервный, только если основной сервер стал недоступным.

    sudo systemctl enable keepalived;
    sudo systemctl start keepalived
    

    Для проверки успешного запуска keepalived выполните команду:

    sudo systemctl status keepalived
    
  7. Чтобы включить процесс отказоустойчивости, требуется подключить ваш домен к внешнему IP VIP. Таким образом, если всё было настроено верно, трафик начнёт отправляться через VIP на основной сервер.

    Внимание

    Обратите внимание, что для переключения домена со старого IP к IP VIP требуется время. В этом случае не рекомендуется переключать или отключать keepalived на текущем мастер-сервере.

    Для проверки изменения переключения в DNS рекомендуется использовать команду:

    dig +short <domain.ru> @8.8.8.8