HAProxy — инструмент обеспечения высокой доступности и балансировки нагрузки. В статье описана установка HAProxy и keepalived для ОС Ubuntu Linux 20.04 и 22.04.
Установка состоит из шести этапов:
- Подготовка нод (серверов)
- Установка HAProxy
- Установка keepalived
- Настройка keepalived
- Настройка базовой конфигурации HAProxy
- Создайте две ноды (сервера) с последовательно пронумерованными именами хостов:
- haproxy-server1.your_domain, 192.168.1.1;
- haproxy-server2.your_domain, 192.168.1.2.
-
Создайте сопоставления имен хостов в DNS-сервере и внесите соответствующую А-запись для виртуального IP:
haproxy-server.your_domain A 192.168.1.13Если такой возможности нет, внесите нужные записи в
/etc/hosts. -
Включите параметры ядра
net.ipv4.ip_nonlocal_bind,net.ipv4.ip_forward, выполнив следующие команды:sudo echo net.ipv4.ip_nonlocal_bind=1 >> /etc/sysctl.confsudo echo net.ipv4.ip_forward=1 >> /etc/sysctl.confsudo sysctl -p
-
Установите HAProxy на все узлы, выполнив команду:
sudo apt install haproxy -y -
Запустите сервис HAProxy на всех узлах и добавьте его в автозагрузку:
sudo systemctl enable --now haproxy
Установите keepalived на все узлы:
sudo apt updatesudo apt install keepalived
-
Создайте директорию keepalived:
sudo mkdir -p /usr/libexec/keepalived -
Создайте файл скрипта
haproxy_check.shдля отслеживания работоспособности HAProxy:sudo nano /usr/libexec/keepalived/haproxy_check.sh -
Добавьте в файл
haproxy_check.shскрипт проверки работоспособности HAProxy:#!/bin/bash/bin/kill -0 $(cat /var/run/haproxy.pid) -
Создайте файл конфигурации keepalived на каждой ноде:
sudo nano /etc/keepalived/keepalived.conf -
Добавьте в файл
keepalived.confпример конфигураций keepalived для узлаhaproxy-server1.your_domain:global_defs {router_id haproxy-server1enable_script_securityscript_user root}vrrp_script haproxy_check {script "/usr/libexec/keepalived/haproxy_check.sh"interval 2weight 2}vrrp_instance VI_1 {interface eth0virtual_router_id 101priority 100advert_int 2state MASTERvirtual_ipaddress {192.168.1.13}track_script {haproxy_check}authentication {auth_type PASSauth_pass SecretPassword}} -
Добавьте в файл
keepalived.confпример конфигураций keepalived для узлаhaproxy-server2.your_domain:global_defs {router_id haproxy-server2enable_script_securityscript_user root}vrrp_script haproxy_check {script "/usr/libexec/keepalived/haproxy_check.sh"interval 2weight 2}vrrp_instance VI_1 {interface eth0virtual_router_id 101priority 90advert_int 2state BACKUPvirtual_ipaddress {192.168.1.13}track_script {haproxy_check}authentication {auth_type PASSauth_pass SecretPassword}}Где введенные параметры:
- outer_id — ID роутера, уникальное значение на каждом узле;
- script_user — пользователь, от имени которого будут запускаться скрипты VRRP;
- interface — наименование интерфейса, к которому будет привязан keepalived;
- virtual_router_id — ID виртуального роутера, общее значение на всех узлах;
- priority — приоритет нод внутри виртуального роутера;
- state — тип роли ноды в виртуальном роутере;
- virtual_ipaddress — виртуальный IP;
- auth_type — тип аутентификации в виртуальном роутере;
- auth_pass — пароль.
-
Перезапустите keepalived на всех узлах:
sudo systemctl restart keepalived
-
Переместите конфигурационный файл по умолчанию:
sudo mv /etc/haproxy/haproxy.cfg{,.original} -
Создайте и откройте для редактирования новый конфигурационный файл с помощью команды:
sudo nano /etc/haproxy/haproxy.cfgПример базовой конфигурационный HAProxy для файла haproxy.cfg Базовая часть описывает параметры работы сервера HAProxy: режим работы, таймауты, количество подключений, включение web‑интерфейса и т.д. В примере приведена необходимая конфигурация параметров для работы сервера HAProxy. Подробнее об используемых параметрах читайте в официальной документации HAProxy.
globalmaxconn 100000log /dev/log local0log /dev/log local1 noticechroot /var/lib/haproxystats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listenersstats timeout 30suser haproxygroup haproxydaemondefaultsmode tcplog globalretries 2timeout queue 5stimeout connect 5stimeout client 60mtimeout server 60mtimeout check 15slisten statsmode httpbind haproxy-server.your_domain:7000stats enablestats uri /### RabbitMQ ###### RabbitMQ ###### S3 MinIO ###### S3 MinIO ###### Redis ###### Redis ### -
Перезапустите HAProxy:
sudo systemctl restart haproxy
Технический писатель: Белова Ирина