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