Конфигурация HAProxy для PostgreSQL
Архитектура высокодоступного кластера ELMA365 подразумевает взаимодействие микросервисов приложения ELMA365 с кластером базы данных PostgreSQL. Чтобы обеспечить надёжную балансировку нагрузки в системе, создайте конфигурацию HAProxy для PostgreSQL. Так, в случае сбоя весь трафик будет перенаправлен в кластер Master-Replica(s), что гарантирует непрерывную работу системы.
Примеры настройки HAProxy:
- Пример конфигураци HAProxy для подключения к PostgreSQL.
- Пример конфигураци HAProxy для подключения к PGBouncer.
Пример конфигурации HAProxy для подключения к PostgreSQL
В этой статье конфигурация подготовлена для балансировки трафика в кластер PostgreSQL, развёрнутый согласно описанию из статьи «Кластер PostgreSQL». Для балансировки используется HAProxy. С его помощью автоматически проверяется порт 8008
сервиса Patroni на серверах PostgreSQL с ролью master
.
Трафик операций в кластер распределяется следующим образом:
- операции записи, приходящие на
haproxy-server.your_domain:5000
, направляются на сервер с ролью master
; - операции чтения, приходящие на
haproxy-server.your_domain:5001
, направляются на сервера с ролью slave
.
В случае сбоя весь трафик будет перенаправлен в кластер Master-Replica(s), т. е. операции записи и чтения начнут поступать именно сюда.
Чтобы создать конфигурацию HAProxy для PostgreSQL выполните следующие действия:
- Откройте для редактирования конфигурационный файл
haproxy.cfg
с помощью команды:
sudo nano /etc/haproxy/haproxy.cfg
- Внесите изменения в конфигурационный файл
haproxy.cfg
:
Пример конфигурации:
### PostgreSQL ###
listen postgres_master
bind haproxy-server.your_domain:5000
option tcplog
option httpchk OPTIONS /master
http-check expect status 200
default-server inter 3s fastinter 1s fall 3 rise 4 on-marked-down shutdown-sessions
server postgres-server1 postgres-server1.your_domain:5432 check port 8008
server postgres-server2 postgres-server2.your_domain:5432 check port 8008
server postgres-server3 postgres-server3.your_domain:5432 check port 8008
listen postgres_replicas
bind haproxy-server.your_domain:5001
option tcplog
option httpchk OPTIONS /replica
balance roundrobin
http-check expect status 200
default-server inter 3s fastinter 1s fall 3 rise 2 on-marked-down shutdown-sessions
server postgres-server1 postgres-server1.your_domain:5432 check port 8008
server postgres-server2 postgres-server2.your_domain:5432 check port 8008
server postgres-server3 postgres-server3.your_domain:5432 check port 8008
### PostgreSQL ###
|
Пример конфигурации HAProxy с использованием SSL
Включение SSL возможно, если встроена поддержка OpenSSL. В параметре crt укажите путь до файла PEM, содержащего требуемые сертификаты и связанные закрытые ключи (fullchain-сертификат). Eсли файл не содержит закрытого ключа, HAProxy попытается загрузить ключ по тому же пути с суффиксом .key.
Если вместо файла PEM используется имя каталога, то все файлы, найденные в этом каталоге, будут загружены в алфавитном порядке, кроме файлов, заканчивающихся на .issuer, .ocsp или .sctl (зарезервированные решения). Подробнее читайте в Configuration Manual для используемой версии HAProxy. Пример для HAProxy 2.5:
### PostgreSQL ###
listen postgres_master
bind haproxy-server.your_domain:5000 ssl crt /etc/haproxy/ssl/haproxy-server.your_domain.pem
option tcplog
option httpchk OPTIONS /master
http-check expect status 200
default-server inter 3s fastinter 1s fall 3 rise 4 on-marked-down shutdown-sessions
server postgres-server1 postgres-server1.your_domain:5432 check port 8008 ssl crt /etc/haproxy/ssl/haproxy-server.your_domain.pem ca-file /etc/haproxy/ssl/rootCA_your_domain.pem
server postgres-server2 postgres-server2.your_domain:5432 check port 8008 ssl crt /etc/haproxy/ssl/haproxy-server.your_domain.pem ca-file /etc/haproxy/ssl/rootCA_your_domain.pem
server postgres-server3 postgres-server3.your_domain:5432 check port 8008 ssl crt /etc/haproxy/ssl/haproxy-server.your_domain.pem ca-file /etc/haproxy/ssl/rootCA_your_domain.pem
listen postgres_replicas
bind haproxy-server.your_domain:5001 ssl crt /etc/haproxy/ssl/haproxy-server.your_domain.pem
option tcplog
option httpchk OPTIONS /replica
balance roundrobin
http-check expect status 200
default-server inter 3s fastinter 1s fall 3 rise 2 on-marked-down shutdown-sessions
server postgres-server1 postgres-server1.your_domain:5432 check port 8008 ssl crt /etc/haproxy/ssl/haproxy-server.your_domain.pem ca-file /etc/haproxy/ssl/rootCA_your_domain.pem
server postgres-server2 postgres-server2.your_domain:5432 check port 8008 ssl crt /etc/haproxy/ssl/haproxy-server.your_domain.pem ca-file /etc/haproxy/ssl/rootCA_your_domain.pem
server postgres-server3 postgres-server3.your_domain:5432 check port 8008 ssl crt /etc/haproxy/ssl/haproxy-server.your_domain.pem ca-file /etc/haproxy/ssl/rootCA_your_domain.pem
### PostgreSQL ###
|
- Перезапустите HAProxy для применения изменений:
sudo systemctl restart haproxy
Пример конфигураци HAProxy для подключения к PGBouncer
В этой статье представлена конфигурация для балансировки трафика в кластер PostgreSQL, развёрнутый согласно описанию из статьи «Кластер PostgreSQL», через программу PGBouncer. Для балансировки используется HAProxy. С его помощью автоматически проверяется порт 8008
сервиса Patroni на серверах PostgreSQL с ролью master
.
Трафик операций в кластер распределяется следующим образом:
- операции записи, приходящие на
haproxy-server.your_domain:5000
, направляются на сервер с ролью master
; - операции чтения, приходящие на
haproxy-server.your_domain:5001
, направляются на сервера с ролью slave
.
В случае сбоя весь трафик будет перенаправлен в кластер Master-Replica(s), т. е. операции записи и чтения начнут поступать именно сюда.
Чтобы создать конфигурацию HAProxy для PostgreSQL через программу PGBouncer выполните следующие действия:
- Откройте для редактирования конфигурационный файл
haproxy.cfg
с помощью команды:
sudo nano /etc/haproxy/haproxy.cfg
- Внесите изменения в конфигурационный файл
haproxy.cfg
:
Пример конфигурации:
### PostgreSQL ###
listen postgres_master
bind haproxy-server.your_domain:5000
option tcplog
option httpchk OPTIONS /master
http-check expect status 200
default-server inter 3s fastinter 1s fall 3 rise 4 on-marked-down shutdown-sessions
server postgres-server1 postgres-server1.your_domain:6432 check port 8008
server postgres-server2 postgres-server2.your_domain:6432 check port 8008
server postgres-server3 postgres-server3.your_domain:6432 check port 8008
listen postgres_replicas
bind haproxy-server.your_domain:5001
option tcplog
option httpchk OPTIONS /replica
balance roundrobin
http-check expect status 200
default-server inter 3s fastinter 1s fall 3 rise 2 on-marked-down shutdown-sessions
server postgres-server1 postgres-server1.your_domain:6432 check port 8008
server postgres-server2 postgres-server2.your_domain:6432 check port 8008
server postgres-server3 postgres-server3.your_domain:6432 check port 8008
### PostgreSQL ###
|
Пример конфигурации HAProxy с использованием SSL
Включение SSL возможно, если встроена поддержка OpenSSL. В параметре crt укажите путь до файла PEM, содержащего требуемые сертификаты и связанные закрытые ключи (fullchain-сертификат). Eсли файл не содержит закрытого ключа, HAProxy попытается загрузить ключ по тому же пути с суффиксом .key.
Если вместо файла PEM используется имя каталога, то все файлы, найденные в этом каталоге будут загружены в алфавитном порядке, кроме файлов, заканчивающихся на .issuer, .ocsp или .sctl (зарезервированные решения).
В параметре ca-file укажите путь до файла PEM, содержащего корневой сертификат. Подробнее читайте в Configuration Manual для используемой версии HAProxy. Пример для HAProxy 2.5:
### PostgreSQL ###
listen postgres_master
bind haproxy-server.your_domain:5000 ssl crt /etc/haproxy/ssl/haproxy-server.your_domain.pem
option tcplog
option httpchk OPTIONS /master
http-check expect status 200
default-server inter 3s fastinter 1s fall 3 rise 4 on-marked-down shutdown-sessions
server postgres-server1 postgres-server1.your_domain:6432 check port 8008 ssl crt /etc/haproxy/ssl/haproxy-server.your_domain.pem ca-file /etc/haproxy/ssl/rootCA_your_domain.pem
server postgres-server2 postgres-server2.your_domain:6432 check port 8008 ssl crt /etc/haproxy/ssl/haproxy-server.your_domain.pem ca-file /etc/haproxy/ssl/rootCA_your_domain.pem
server postgres-server3 postgres-server3.your_domain:6432 check port 8008 ssl crt /etc/haproxy/ssl/haproxy-server.your_domain.pem ca-file /etc/haproxy/ssl/rootCA_your_domain.pem
listen postgres_replicas
bind haproxy-server.your_domain:5001 ssl crt /etc/haproxy/ssl/haproxy-server.your_domain.pem
option tcplog
option httpchk OPTIONS /replica
balance roundrobin
http-check expect status 200
default-server inter 3s fastinter 1s fall 3 rise 2 on-marked-down shutdown-sessions
server postgres-server1 postgres-server1.your_domain:6432 check port 8008 ssl crt /etc/haproxy/ssl/haproxy-server.your_domain.pem ca-file /etc/haproxy/ssl/rootCA.your_domain.pem
server postgres-server2 postgres-server2.your_domain:6432 check port 8008 ssl crt /etc/haproxy/ssl/haproxy-server.your_domain.pem ca-file /etc/haproxy/ssl/rootCA.your_domain.pem
server postgres-server3 postgres-server3.your_domain:6432 check port 8008 ssl crt /etc/haproxy/ssl/haproxy-server.your_domain.pem ca-file /etc/haproxy/ssl/rootCA_your_domain.pem
### PostgreSQL ###
|
- Перезапустите HAProxy для применения изменений:
sudo systemctl restart haproxy