HAProxy: раздельное проксирования на мастер и реплики для Patroni кластера
ля настройки проверки состояния (health check) в HAProxy для кластера Patroni, используется параметр httpchk
. В Patroni обычно предоставляется HTTP API для мониторинга состояния кластера и отдельных узлов, включая лидера и реплики. HAProxy может использовать этот API для определения статуса каждого сервера и принимать решения о маршрутизации запросов в зависимости от их состояния.
Пример настройки HAProxy с использованием httpchk
для Patroni
Шаги:
- Настройка Patroni: Patroni предоставляет HTTP API на каждом узле, которое можно использовать для проверки состояния кластера. Обычно это порт, указанный в конфигурации Patroni (например, 8008).
- HAProxy конфигурация:
- Вы отправляете HTTP-запросы к API Patroni для проверки того, является ли узел лидером или репликой.
- Например, можно использовать
GET /master
для проверки, является ли узел мастером, или/replica
для проверки, является ли узел репликой.
Пример конфигурации HAProxy для Patroni с httpchk
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
frontend pgsql_frontend bind *:5432 mode tcp default_backend patroni_pgsql_backend backend patroni_pgsql_backend mode tcp option httpchk GET /master HTTP/1.1\r\nHost:\ localhost http-check expect status 200 default-server inter 3s fall 3 rise 2 on-marked-down shutdown-sessions server pg_node1 192.168.1.101:5432 check port 8008 server pg_node2 192.168.1.102:5432 check port 8008 server pg_node3 192.168.1.103:5432 check port 8008 |
Объяснение конфигурации:
- frontend pgsql_frontend — Определяет, что запросы будут приниматься на порту 5432 и перенаправляться на бэкенд Patroni.
- option httpchk GET /master HTTP/1.1 — Выполняет HTTP GET-запрос по пути
/master
на API Patroni, чтобы убедиться, что этот узел является лидером. - http-check expect status 200 — Ожидается HTTP-ответ с кодом 200, который подтверждает, что узел активен и может принимать запросы.
- server pg_node1 — Настраиваются отдельные узлы Patroni с указанием IP-адреса и порта для базы данных (5432) и API для проверки состояния (8008).
Дополнительные проверки для реплик
Чтобы проксировать запросы также на реплики, можно добавить аналогичные проверки для них:
1 2 3 4 5 6 7 |
backend patroni_readonly mode tcp option httpchk GET /replica HTTP/1.1\r\nHost:\ localhost http-check expect status 200 server pg_node2 192.168.1.102:5432 check port 8008 server pg_node3 192.168.1.103:5432 check port 8008 |
Описание ролей:
- Лидер (master): Используется для записи данных.
- Реплики (replica): Могут использоваться для чтения данных.
Этот подход позволяет HAProxy проверять актуальное состояние узлов Patroni и направлять запросы только на те узлы, которые находятся в работоспособном состоянии, с учетом их роли в кластере.
Recommended Posts
Плейбук Ansible по развертыванию haproxy
15.02.2024