Описание

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

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

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

В статье используется внутренний IP адрес 192.168.26.27 как VRRP  (Virtual Router Redundancy Protocol) — это сетевой протокол, предназначенный для обеспечения отказоустойчивости маршрутизаторов или шлюзов в локальной сети. При настройке использовался на сервере с одним портом с внутренним IP. В дальнейшем к этому интерфейсу будет привязан виртуальный адрес 192.168.26.27

Установка

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

dnf install keepalived -y

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

dnf install haproxy keepalived -y

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

systemctl enabled keepalived haproxy

Настройка

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

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

mkdir -p /usr/libexec/keepalived

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

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

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

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

/etc/keepalived/keepalived.confГде введённые параметры:

global_defs {
  router_id haproxy-server1
  enable_script_security
  script_user root
}
 
vrrp_script haproxy_check {
  script "/usr/libexec/keepalived/haproxy_check.sh"
  interval 1
  weight -20
  fall 2
  rise 2
}
 
vrrp_instance VI_1 {
  interface ens3
  virtual_router_id 101
  priority 100
  advert_int 1
  state MASTER
  virtual_ipaddress {
    192.168.26.27
  }
  track_script {
    haproxy_check weight 20
  }
  authentication {
    auth_type PASS
    auth_pass SecretPassword
  }
}

Где введённые параметры:

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

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

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

2.2 Скопируйте конфигурацию /etc/haproxy/haproxy.cfg и укажите конфигурацию на новых нодах

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 haproxy-server2
  enable_script_security
  script_user root
}
 
vrrp_script haproxy_check {
  script "/usr/libexec/keepalived/haproxy_check.sh"
  interval 1
  weight -20
  fall 2
  rise 2
}
 
vrrp_instance VI_1 {
  interface ens3
  virtual_router_id 101
  priority 90
  advert_int 1
  state BACKUP
  virtual_ipaddress {
    192.168.26.27
  }
  track_script {
    haproxy_check weight 20
  }
  authentication {
    auth_type PASS
    auth_pass SecretPassword
  }
}

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

  • router_id — укажите уникальные названия для каждой ноды
  • priority — приоритет нод внутри виртуального роутера;
  • state — тип роли ноды в виртуальном роутере;

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

systemctl restart keepalived haproxy

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

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

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

"ConnectionStrings": {
    "R7StorageServerUserActions": "Database=cddisk;Username=cddisk;Password=cddisk;Host=192.168.26.27;Port=5000;",
    "R7StorageServer": "Database=cddisk;Username=cddisk;Password=cddisk;Host=192.168.26.27;Port=5000;",
    "CommunityRepository": "Server=localhost;UserID=root;Password=test;Database=r7-office",
    "Payments": "Database=Payments;Username=cddisk;Password=cddisk;Host=192.168.26.27;Port=5000;",
    "GeoNames": "Database=GeoNames;Username=cddisk;Password=cddisk;Host=192.168.26.27;Port=5000;"
  },
  "rabbitMq": {
    "host": "192.168.26.27",
    "username": "r7office",
    "password": "r7office",
    "timeout": 10
  },

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

"ConnectionStrings": {
    "R7StorageServerUserActions": "Database=cddisk;Username=cddisk;Password=cddisk;Host=192.168.26.27;Port=5000;",
    "R7StorageServer": "Database=cddisk;Username=cddisk;Password=cddisk;Host=192.168.26.27;Port=5000;",
    "CommunityRepository": "Server=localhost;UserID=root;Password=p@ssw0rd;Database=r7-office",
    "Payments": "Database=Payments;Username=cddisk;Password=cddisk;Host=192.168.26.27;Port=5000;",
    "GeoNames": "Database=GeoNames;Username=cddisk;Password=cddisk;Host=192.168.26.27;Port=5000;"
  },
"rabbitMq": {
    "host": "192.168.26.27",
    "username": "r7office",
    "password": "r7office",
    "timeout": 10
  },

и нодах processing

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

"ConnectionStrings": {
    "R7StorageServerUserActions": "Database=cddisk;Username=cddisk;Password=cddisk;Host=192.168.26.27;Port=5000;",
    "R7StorageServer": "Database=cddisk;Username=cddisk;Password=cddisk;Host=192.168.26.27;Port=5000;",
    "CommunityRepository": "Server=localhost;UserID=root;Password=test;Database=r7-office",
    "Payments": "Database=Payments;Username=cddisk;Password=cddisk;Host=192.168.26.27;Port=5000;",
    "GeoNames": "Database=GeoNames;Username=cddisk;Password=cddisk;Host=192.168.26.27;Port=5000;"
  },
  "DbType": "postgre",
  "rabbitMq": {
    "host": "192.168.26.27",
    "username": "r7office",
    "password": "r7office",
    "timeout": 10
  }

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

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

supervisorctl restart all

4. Настройка Сервера документов

4.1 Выполните повторную конфигурацию

скриптом documentserver-configure.sh по пункту 6.3.1 и укажите параметры с виртуальным IP адресом 192.168.26.27

4.2 Далее внесите правки

в /etc/r7-office/documentserver/local.json и в /etc/r7-office/documentserver/default.json, указав параметры с виртуальным IP адресом 192.168.26.27

4.3 Выполните перезапуск служб сервера документов:

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