Статьи

Высокая доступность в NGINX Plus R6

[Эта статья была написана Оуэном Гарреттом]

Ни для кого не секрет, что в сегодняшнем постоянно включенном и постоянно подключенном обществе пользователи ожидают, что ваши сайты и приложения будут доступны 24 × 7. Именно здесь NGINX и NGINX Plus всегда помогали вам сиять. Одним из ключевых преимуществ развертывания NGINX Plus в качестве обратного прокси-сервера и балансировщика нагрузки для серверов приложений является повышение доступности и надежности приложений, и вы можете еще больше повысить производительность приложений и веб-сайтов, добавив высокую доступность (HA) к самому NGINX Plus.

В  NGINX Plus Release 6  (R6) мы представили новое решение, которое позволяет быстро и легко развертывать экземпляры NGINX Plus в активно-пассивной конфигурации HA. Решение основано на проекте keepalived с открытым исходным кодом  , который предоставляет решение высокой доступности  для систем Linux с тремя компонентами: демон keepalived, реализация протокола избыточности виртуального маршрутизатора (VRRP) для управления назначением виртуального IP-адреса для пары высокой доступности. и средство проверки работоспособности, чтобы определить, работает ли служба (например, веб-сервер, PHP-сервер или NGINX Plus).

Как работает высокая доступность?

Исходя из исходной конфигурации (см. «  Настройка NGINX Plus для HA»  ниже), keepalived определяет один узел NGINX Plus в качестве (активного) главного, а другой — (пассивной) резервной копии. Каждый узел имеет свой собственный IP-адрес, и главному узлу также назначается виртуальный IP-адрес, который объявлен клиентам в системе доменных имен (DNS). Во время работы VRRP и средство проверки работоспособности контролируют работу узлов и NGINX Plus, чтобы виртуальный IP-адрес можно было переназначить резервной копии в случае сбоя главного устройства:

  • Экземпляр VRRP на резервном узле прослушивает рекламные пакеты от своего партнера на главном узле. Если он не получает рекламный пакет в течение периода, превышающего трехкратный настроенный рекламный интервал, он становится главным и назначает себе виртуальный IP-адрес.
  • Если проверки работоспособности NGINX Plus на главном узле не удается выполнить заданное число раз, keepalived переназначает виртуальный IP-адрес с главного узла на резервный узел.

Настройка NGINX Plus для HA

Чтобы настроить активно-пассивную пару узлов NGINX Plus для HA, выполните следующие действия на обоих узлах:

  1. Установите или обновите базовый пакет NGINX Plus R6 ( nginx-plus ), следуя инструкциям для вашей операционной системы в  репозитории NGINX Plus .
  2. Используя команду установки, указанную в репозитории NGINX Plus для вашей операционной системы, установите   пакет nginx-ha-keepalived , заменив  nginx-plus  на  nginx-ha-keepalived , как в этом примере для Ubuntu:
root# apt-get install nginx-ha-keepalived
  1. Запустите   скрипт nginx-ha-setup (он устанавливается из   пакета nginx-ha-keepalived в  / usr / bin ).
root# nginx-ha-setup
  1. Мы рекомендуем запускать сценарий на обоих узлах одновременно в параллельных окнах терминала, выполняя каждый шаг на обоих узлах, прежде чем переходить к следующему шагу. Мы также рекомендуем использовать команду Linux  screen(1) для запуска окон терминала, чтобы можно было продолжить установку, если сеанс отключается.

    Прежде чем начать, соберите следующую информацию для подсказок:

    • Физические IP-адреса обоих узлов.
    • Виртуальный IP-адрес, который изначально назначается главному узлу. Сценарий называет его «кластерным IP-адресом (или конечной точкой)». Это не должен быть фактический IP-адрес любого узла.

Поддерживаемый скрипт конфигурации

На каждом узле   сценарий nginx-ha-setup создает локальный файл конфигурации keepalived /etc/keepalived/keepalived.conf , включающий значения, указанные вами на шаге 3. Далее приведен пример, созданный для узла с IP-адресом 192.168. 100.100 (адрес другого узла — 192.168.100.101, а виртуальный IP-адрес — 192.168.100.150). Обратите внимание, что хотя это очень похоже на конфигурацию NGINX Plus, это не так — во-первых, точки с запятой не используются для разграничения директив.

vrrp_script chk_nginx_service {
    script "/usr/libexec/keepalived/nginx-ha-check"
    interval 3
    weight 50
}

vrrp_instance VI_1 {
    interface eth0
    state BACKUP
    priority 101
    virtual_router_id 51
    advert_int 1
    unicast_src_ip 192.168.100.100
    unicast_peer {
           192.168.100.101
    }
    authentication {
           auth_type PASS
           auth_pass f8f0e5114cbe031a3e1e622daf18f82a
    }
    virtual_ipaddress {
           192.168.100.150
    }
    track_script {
            chk_nginx_service
    }
    notify "/usr/libexec/keepalived/nginx-ha-notify"
}

Объяснение цели каждой директивы выходит за рамки этого поста, но есть несколько вещей, на которые следует обратить внимание.

  • В файле есть два основных блока конфигурации:

    • vrrp_script Блок настраивает здоровья проверки объекта для запуска сценария , которая проверяет Nginx Plus находится в рабочем состоянии .

      Сценарий  nginx-ha-check  устанавливается автоматически из   пакета nginx-ha-keepalived в указанный каталог, который зависит от операционной системы.

      В  interval директиве устанавливает , как часто запускает сценарий, в секундах.

    • vrrp_instance Блок настраивает экземпляр VRRP на этом узле.

      Предоставляемые вами IP-адреса записываются в виде значений трех директив:  unicast_src_ip (локальный узел),  unicast_peer (другой узел) и  virtual_ipaddress (виртуальный IP-адрес, назначенный главному узлу).

      В  advert_int директиве управляет тем, как часто экземпляр VRRP на мастер — узле посылает рекламу своего партнера на резервном узле, в секундах.

      Значение  51  для  virtual_router_id директивы является образцом значения; при необходимости измените его, чтобы он был уникальным в вашей среде (это становится актуальным, если вы используете VRRP для предоставления HA для нескольких услуг).

  • Вместе  weight директива в  vrrp_script блоке и  priority директива в vrrp_instance блоке используются при определении того, какой узел становится главным. Для получения дополнительной информации см. Использование сценария проверки работоспособности для управления мастерством  в статье Руководства администратора NGINX Plus о HA.
  • Если в вашей локальной сети запущено несколько пар экземпляров keepalived (или других экземпляров VRRP), создайте  vrrp_instance для каждого из них блок с уникальным именем (как  VI_1 в примере) и virtual_router_id номером.

    Точно так же, если вы используете keepalived для предоставления HA для других сервисов, для каждого из них вам нужно создать отдельный скрипт проверки работоспособности и  vrrp_script заблокировать его.

Дополнительная информация

Для получения дополнительной информации о решении HA см.  Поддержка высокой доступности в NGINX Plus  в Руководстве администратора NGINX Plus. В нем объясняется, как выяснить, какой узел является главным, принудительно сменить мастерство, вручную переназначить виртуальный IP-адрес, устранить неполадки keepalived и VRRP, а также добавить дополнительные виртуальные IP-адреса. Он также указывает на образцы файлов конфигурации для более сложных настроек HA.