Продукты Р7
Корпоративный сервер 2024
Корпоративный сервер 2024
Сервер документов
Сервер документов
Редакторы документов
Редакторы документов
Корпоративный сервер 2019
Корпоративный сервер 2019
Графика
Графика
ВКС и мессенджер
ВКС и мессенджер
Мобильные редакторы
Мобильные редакторы
Почтовый сервер
Почтовый сервер
Органайзер
Органайзер
Сервер лицензирования
Сервер лицензирования
Файл-Экспресс
Файл-Экспресс
Аналитика
Аналитика
Дополнительно
Часто задаваемые вопросы
Разработчикам
Интеграции
Новые возможности

Пример реализации внешнего балансировщика Nginx для архитектуры High Available

Обновлено: 10.07.26

Инструкция актуальна для версий продукта: 2025.4.6.16449 – 2026.1.12.16832

Описание

Продолжение пункта 7 инструкции ↗

Для минимизации времени простоя сервера с внешним балансером возможно реализовать отказоустойчивый кластер с использованием нескольких экземпляров Nginx.

Для реализации потребуется дополнительные IP адрес в сети, рекомендуется использовать две подсети для обеспечения безопасности доступа к кластерами других нод. Ноды будут использовать два виртуальных IP адрес при обращении к сервисам Api, Processing, Haproxy.

В статье используется две подсети 45.145.64.x — белые IP адреса и 192.168.26.x — внутренняя сеть с серыми ip. Клиенты обращаются на сервер по белому ip адресу 45.145.64.212 (используются для доменных записей *.test3.s7-office.site и ds-cluster.test3.s7-office.site), а сервисы внутренние общаются по внутренней сети 192.

Привязка по подсетям и ip адресам:

  • nginx1 — адаптер ens8-192.168.26.26; ens3-45.145.64.210 vrrp
  • nginx2 — адаптер ens8-192.168.26.29; ens3-45.145.64.211 vrrp
  • vrrp ens8 192.168.25.27 ens3 45.145.64.212

Установка

На основной ноде потребуется дополнительно установить сервис:

dnf install nginx keepalived -y

На всех дополнительных нодах потребуется установка сервисов:

dnf install nginx keepalived -y

И добавьте в автозагрузку:

systemctl enabled keepalived nginx

Настройка

1. На основной ноде

1.1. Создайте каталог

mkdir -p /usr/libexec/keepalived

И создайте файл /usr/libexec/keepalived/proxy_check.sh с содержимым:

#!/bin/bash
/bin/kill -0 $(cat /var/run/nginx.pid)

Скрипт проверяет, запущен ли процесс Nginx, используя его PID для мониторинга состояния службы.

1.2. Измените конфигурацию

/etc/keepalived/keepalived.conf:

global_defs {
  router_id proxy-server1
  enable_script_security
  script_user root
}
 
vrrp_script proxy_check {
  script "/usr/libexec/keepalived/proxy_check.sh"
  interval 2
  weight -20
  fall 2
  rise 2
}
 
vrrp_instance VIP_2 {
  interface ens3
  virtual_router_id 102
  priority 120
  advert_int 2
  state MASTER
  virtual_ipaddress {
    45.145.64.212 dev ens3
  }
  track_script {
    proxy_check weight 20
  }
  authentication {
    auth_type PASS
    auth_pass SecretPassword1
  }
 
vrrp_instance VIP_3 {
  interface ens8
  virtual_router_id 103
  priority 130
  advert_int 2
  state MASTER
  virtual_ipaddress {
    192.168.25.27 dev ens8
  }
  track_script {
    proxy_check weight 20
  }
  authentication {
    auth_type PASS
    auth_pass SecretPassword2
  }
}
}

Настройка для двух подсетей, где будет осуществляться применение виртуального IP для master и в случае если будет недоступен, то IP адрес получит backup.
Где введённые параметры:

  • router_id — ID роутера, уникальное значение на каждом узле;
  • script_user — пользователь, от имени которого будут запускаться скрипты VRRP;
  • vrrp_instance — Определяет экземпляр VRRP с именем VIP_2. Это имя используется для идентификации экземпляра связи, например по адаптеру ens3;
  • interface — наименование интерфейса (возможно узнать командой ip a), к которому будет привязан keepalived;
  • virtual_router_id — ID виртуального роутера, общее значение на всех узлах;
  • priority — приоритет нод внутри виртуального роутера;
  • state — тип роли ноды в виртуальном роутере;
  • virtual_ipaddress — виртуальный IP;
  • auth_type — тип аутентификации в виртуальном роутере;
  • auth_pass — указывается пароль.

2. На дополнительных нодах

2.1. Скопируйте ранее установленные значения из /etc/hosts и укажите значения на новых нодах

2.2. Скопируйте конфигурации /etc/nginx/conf.d и каталог с сертификатами /etc/ssl и перенесите на новые ноды

2.3. Создайте каталог

mkdir -p /usr/libexec/keepalived

Создайте файл /usr/libexec/keepalived/haproxy_check.sh с содержимым:

#!/bin/bash
/bin/kill -0 $(cat /var/run/nginx.pid)

2.4. Измените конфигурацию на новых нодах

/etc/keepalived/keepalived.conf:

global_defs {
  router_id proxy-server2
  enable_script_security
  script_user root
}
 
vrrp_script proxy_check {
  script "/usr/libexec/keepalived/proxy_check.sh"
  interval 2
  weight -20
  fall 2
  rise 2
}
 
vrrp_instance VIP_2 {
  interface ens3
  virtual_router_id 102
  priority 80
  advert_int 2
  state BACKUP
  virtual_ipaddress {
    45.145.64.212 dev ens3
  }
  track_script {
    proxy_check weight 20
  }
  authentication {
    auth_type PASS
    auth_pass SecretPassword1
  }
}
vrrp_instance VIP_3 {
  interface ens8
  virtual_router_id 103
  priority 90
  advert_int 2
  state BACKUP
  virtual_ipaddress {
    192.168.26.27 dev ens8
  }
  track_script {
    proxy_check weight 20
  }
  authentication {
    auth_type PASS
    auth_pass SecretPassword2
  }
}

За основу взята конфигурация с основной ноды и внесены правки в параметры:

  • router_id — укажите уникальные названия для каждой ноды;
  • priority — приоритет ноды внутри виртуального роутера (рекомендуется установка значения ниже чем у предыдущей);
  • state — тип роли ноды в виртуальном роутере (для последующих указывается BACKUP).

2.5. Перезапустите на всех нодах сервисы

systemctl restart nginx keepalived

3. Настройка Корпоративного сервера

3.1. Внесите правки в конфигурации на всех нодах api

/opt/r7-office/Api/appsettings.json:

"serviceRegistry": {
    "address": "http://192.168.25.27:7777"
  },

/opt/r7-office/Sso.Api/appsettings.json:

"serviceRegistry": {
    "address": "http://192.168.25.27:7777"
  },

И нодах processing.

/opt/r7-office/Processing/appsettings.json:

"serviceRegistry": {
    "address": "http://192.168.25.27:7777",
  },

C указанием параметров подключения к виртуальному IP адресу 192.168.25.27

3.2. Перезапустите на нодах api и processing службы

supervisorctl restart all

4. Потребуется дополнительная настройка firewall для всех нодах Nginx

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

Была ли эта статья полезной?

Поделитесь пожалуйста своим мнением

      В статье есть ошибкиРекомендации не помоглиТекст трудно понятьСодержание статьи не соответствует заголовкуДругое