Featured image of post High Availability Cluster HAProxy + Patroni

High Availability Cluster HAProxy + Patroni

Настройка HAProxy под высокую нагрузку

Появилась необходимость сделать отказоустойчивый кластер БД, так как Patroni уже используется и давно в качестве проксирования запросов выбор пал на HAProxy.

HAProxy установим в качестве контейнера в docker-compose

  • IP: 192.168.10.9

Сервера Patroni:

  • IP: 192.168.10.10
  • IP: 192.168.10.11

Конфигурирование HAProxy состоит из 3 основных частей:

  • Секция global параметры здесь устанавливаются для всего конфига
  • Аргументы из командной строки имеют наивысший приоритет
  • В блоках defaults, listen, frontend, backend указываем настройки проксирования запросов

Приступим.

Шаг 1. Конфигурирование сервера

Создаем директории:

1
sudo mkdir -p /opt/haproxy/config

Создаем файл:

1
sudo touch /opt/haproxy/config/haproxy.cfg

Открываем на редактирование haproxy.cfg

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

global
  maxconn 4096

defaults
  mode http
  timeout connect 5000
  timeout client 50000
  timeout server 50000

listen stats
  bind *:8443
  mode tcp
  stats enable
  stats uri /stats
  stats refresh 10s

frontend balancer
  bind *:5432
  mode tcp
  default_backend web_backends

backend web_backends
  mode tcp
  option httpchk
  http-check expect status 200
  balance roundrobin
  default-server inter 3s fall 3 rise 2 on-marked-down shutdown-sessions
  server serv1 192.168.9.228:5432 maxconn 100 check port 8008
  server serv2 192.168.9.229:5432 maxconn 100 check port 8008

Описание блоков настроек:

  • defaults - параметры по умолчанию для всех блоков, которые находятся ниже.
  • listen stats - настройки страницы статистики.
  • frontend - указываем где будут приниматься клиентские запросы.
  • backend - указываем сервера Patroni, на которые будут перенаправляться запросы.

В секции backend указано:

1
default-server inter 3s fall 3 rise 2 on-marked-down shutdown-sessions

Если выполнено 3 попытки с интервалом по 3 секунды и сервер не ответил, то соединение будет прервано и переключено на другой сервер.

Шаг 2. Запуск HAProxy в docker-compose

Создаём docker-compose файл с образом HAProxy:

1
sudo touch /opt/haproxy/docker-compose.yaml

Содержимое файла:

1
2
3
4
5
6
7
8
9
version: "3.9"
services:
  haproxy:
    image: haproxy:2.8.0
    volumes:
      - ./config/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro
    ports:
      - "8443:8443"
      - "5432:5432"

Сохраняем и запускаем:

1
2
cd /opt/haproxy
sudo docker-compose up -d

Заходим в веб-интерфейс и проверяем статусы наших серверов Patroni

1
http://192.168.10.9:8443

Установка и настройка завершена.

Информацию можно использовать в свободном доступе, с указанием ссылки на сайт
Создано при помощи Hugo
Тема Stack, дизайн Jimmy