Содержание
Описание
Продолжение пункта 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/haproxy.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.4. Перезапустите на всех нодах сервисы:
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", },
с указанием параметров подключения к виртуальному IP адресу 192.168.25.27
3.2. Перезапустите на нодах api и processing службы:
supervisorctl restart all
4. Потребуется дополнительная настройка firewall для всех нодах Nginx
Рекомендуется разделение зон с привязкой к внутренним и внешним интерфейсам, чтобы была возможность обезопасить комплекс из вне