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