Описание

Продолжение пункта 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

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

Была ли полезна статья?
Позвольте нам стать лучше