Отказоустойчивый HAProxy
HAProxy — инструмент обеспечения высокой доступности и балансировки нагрузки. В статье описана установка HAProxy и keepalived для ОС Ubuntu Linux 20.04 и 22.04.
Установка состоит из шести этапов:
- Подготовка нод (серверов)
- Установка HAProxy
- Установка keepalived
- Настройка keepalived
- Настройка базовой конфигурации HAProxy
Шаг 1: Подготовка нод (серверов)
-
Создайте две ноды (сервера) с последовательно пронумерованными именами хостов:
-
haproxy-server1.your_domain, 192.168.1.1;
-
haproxy-server2.your_domain, 192.168.1.2.
-
Создайте сопоставления имён хостов в DNS-сервере и внесите соответствующую А-запись для виртуального IP:
Если такой возможности нет, внесите нужные записи в
/etc/hosts. -
Включите параметры ядра
net.ipv4.ip_nonlocal_bind,net.ipv4.ip_forward, выполнив следующие команды:
Шаг 2: Установка HAProxy
-
Установите HAProxy на все узлы, выполнив команду:
-
Запустите сервис HAProxy на всех узлах и добавьте его в автозагрузку:
Шаг 3: Установка keepalived
Установите keepalived на все узлы:
Шаг 4: Настройка keepalived
-
Создайте директорию keepalived:
-
Создайте файл скрипта
haproxy_check.shдля отслеживания работоспособности HAProxy: -
Добавьте в файл
haproxy_check.shскрипт проверки работоспособности HAProxy: -
Создайте файл конфигурации keepalived на каждой ноде:
-
Добавьте в файл
keepalived.confпример конфигураций keepalived для узлаhaproxy-server1.your_domain:global_defs { router_id haproxy-server1 enable_script_security script_user root } vrrp_script haproxy_check { script "/usr/libexec/keepalived/haproxy_check.sh" interval 2 weight 2 } vrrp_instance VI_1 { interface eth0 virtual_router_id 101 priority 100 advert_int 2 state MASTER virtual_ipaddress { 192.168.1.13 } track_script { haproxy_check } authentication { auth_type PASS auth_pass SecretPassword } } -
Добавьте в файл
keepalived.confпример конфигураций keepalived для узлаhaproxy-server2.your_domain:global_defs { router_id haproxy-server2 enable_script_security script_user root } vrrp_script haproxy_check { script "/usr/libexec/keepalived/haproxy_check.sh" interval 2 weight 2 } vrrp_instance VI_1 { interface eth0 virtual_router_id 101 priority 90 advert_int 2 state BACKUP virtual_ipaddress { 192.168.1.13 } track_script { haproxy_check } authentication { auth_type PASS auth_pass SecretPassword } }Где введённые параметры:
- outer_id — ID роутера, уникальное значение на каждом узле;
- script_user — пользователь, от имени которого будут запускаться скрипты VRRP;
- interface — наименование интерфейса, к которому будет привязан keepalived;
- virtual_router_id — ID виртуального роутера, общее значение на всех узлах;
- priority — приоритет нод внутри виртуального роутера;
- state — тип роли ноды в виртуальном роутере;
- virtual_ipaddress — виртуальный IP;
- auth_type — тип аутентификации в виртуальном роутере;
- auth_pass — пароль.
-
Перезапустите keepalived на всех узлах:
Шаг 5: Настройка базовой конфигурации HAProxy
-
Переместите конфигурационный файл по умолчанию:
-
Создайте и откройте для редактирования новый конфигурационный файл с помощью команды:
Пример базовой конфигурационный HAProxy для файла haproxy.cfg Базовая часть описывает параметры работы сервера HAProxy: режим работы, таймауты, количество подключений, включение web‑интерфейса и т.д. В примере приведена необходимая конфигурация параметров для работы сервера HAProxy. Подробнее об используемых параметрах читайте в официальной документации HAProxy.
global maxconn 100000 log /dev/log local0 log /dev/log local1 notice chroot /var/lib/haproxy stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners stats timeout 30s user haproxy group haproxy daemon defaults mode tcp log global retries 2 timeout queue 5s timeout connect 5s timeout client 60m timeout server 60m timeout check 15s listen stats mode http bind haproxy-server.your_domain:7000 stats enable stats uri / ### RabbitMQ ### ### RabbitMQ ### ### S3 MinIO ### ### S3 MinIO ### ### Redis ### ### Redis ### -
Перезапустите HAProxy: