4.2. Установка в режиме высокой доступности #
В этом разделе описан пример установки и настройки PPEM в режиме высокой доступности и отказоустойчивости. В примере используется следующее ПО:
ОС Debian Linux 12
HAProxy 2.6.12 (входит в репозиторий Debian)
keepalived 2.2.7 (входит в репозиторий Debian)
Postgres Pro Enterprise 17.2.2 + BiHA (входит в пакет
postgrespro-ent-17-contrib)
Рекомендованная архитектура кластера PPEM высокой доступности содержит следующие компоненты:
Отказоустойчивый кластер на базе решения BiHA, доступного в Postgres Pro Enterprise 16 и выше.
Кластер BiHA состоит из трёх и более узлов. Один из узлов выступает в роли лидера. Менеджер автоматически подключается к лидеру. В случае отказа лидера один из оставшихся серверов становится лидером автоматически.
Кластер серверов HAProxy + keepalived.
На одном из серверов автоматически активируется виртуальный IP-адрес с помощью службы keepalived. Пользователи и агенты взаимодействуют с менеджерами через этот виртуальный IP-адрес. В случае отказа активного сервера с виртуальным IP один из оставшихся серверов поднимает виртуальный IP.
HAProxy также распределяет HTTP-запросы клиентов между всеми доступными менеджерами. Чтобы запросы конкретного клиента попадали на тот же самый менеджер, используется функционал HAProxy «IP-based stickiness» или «cookie session stickiness».
Этот компонент можно развёртывать как на отдельных серверах, так и на менеджерах.
Менеджер.
Два или более серверов в активном режиме.
Компоненты, необходимые для рекомендуемой архитектуры, описаны в таблице ниже.
| Компонент | Количество | Минимальные требования |
|---|---|---|
| Сервер менеджера + HAProxy + keepalived | 2 | 2 CPU, 4 GB RAM, 20 GB HDD. |
| Сервер Postgres Pro BiHA | 3 | 2 CPU, 4 GB RAM, 20 GB HDD. |
| Виртуальный статический IP-адрес | 1 | Адрес должен быть исключён из пула DHCP. Дополнительно можно создать DNS A-запись для этого IP-адреса. |
Чтобы установить PPEM в режиме высокой доступности:
Чтобы обеспечить серверам PPEM доступ к СУБД, отредактируйте файл
pg_hba.conf, например:# cat /var/lib/pgpro/ent-17/data/pg_hba.conf host all all 192.168.1.0/24 scram-sha-256
# cat /etc/ppem-manager.yml http: server: address: "сетевой_адрес_для_входящих_подключений" port: "порт_для_входящих_подключений" repo: url: postgres://ppem:пароль_пользователя_СУБД@biha-server-1/ppem fallback_addresses: -сервер_biha_2-сервер_biha_3target_session_attrs: read-writeГде:
http.server.addressиhttp.server.port: сетевой адрес сервера и номер порта для входящих сетевых подключений.В терминах HAProxy — это backend-параметры.
repo.url: сетевой адрес первого узла кластера BiHA.fallback_addresses: сетевые адреса остальных узлов кластера BiHA.target_session_attrs: условие атрибута сеанса, которое определяет, когда менеджер может автоматически подключиться к лидеру BiHA-кластера.Укажите
read-write.
На серверах HAProxy установите haproxy, keepalived и требуемые инструменты:
sudo apt-get install haproxy keepalived psmisc
Настройте HAProxy с помощью файла конфигурации
haproxy.cfg, например:global log /dev/log local0 log /dev/log local1 notice stats socket /var/lib/haproxy/stats level admin chroot /var/lib/haproxy user haproxy group haproxy daemon defaults log global mode http option httplog option dontlognull timeout connect 5000 timeout client 50000 timeout server 50000 errorfile 400 /etc/haproxy/errors/400.http errorfile 403 /etc/haproxy/errors/403.http errorfile 408 /etc/haproxy/errors/408.http errorfile 500 /etc/haproxy/errors/500.http errorfile 502 /etc/haproxy/errors/502.http errorfile 503 /etc/haproxy/errors/503.http errorfile 504 /etc/haproxy/errors/504.http frontend hafrontend bind *:80 mode http default_backend habackend backend habackend mode http balance roundrobin option forwardfor option httpchk http-check send meth HEAD uri / cookie SERVERID insert indirect server ppem-server-1
PPEM_server_address-1:8080 cookie ppem-server-1 check server ppem-server-2PPEM_server_address-2:8080 cookie ppem-server-2 checkВ этом примере используется метод cookie-based persistence, который устанавливает пользователям cookie с именем сервера PPEM. Это необходимо, чтобы все запросы в рамках сеанса HTTP попадали на один сервер менеджера.
Настройте сервер
HAProxy-1с помощью файла конфигурацииkeepalived.conf:global_defs { enable_script_security } vrrp_script chk_haproxy { script "/usr/bin/killall -0 haproxy" interval 3 fall 2 rise 3 timeout 3 user root } vrrp_instance internal { interfaceinterfacestate MASTER virtual_router_id 124 priority 100 unicast_src_ipHAproxy-1_server_IP_addressunicast_peer {HAproxy-2_server_IP_address} virtual_ipaddress {virtual_IP_address/subnet_class_(for_example_16_or_24)devinterface} track_script { chk_haproxy } }На сервере
HAProxy-2настройка идентичная, только IP-адреса вunicast_src_ipиunicast_peerменяются местами.Настройте агенты на всех серверах BiHA.
Подключение к менеджеру должно быть настроено через виртуальный IP.
Проверьте работоспособность, убедившись, что:
База данных кластера BiHA доступна на всех серверах PPEM.
Системный сервер
ppemзапущен на всех серверах PPEM:systemctl status ppem
Веб-приложение доступно на всех серверах PPEM:
на порту 8080:
curl http://
IP-адрес_сервера_PPEM:8080на порту 80 через HAProxy:
curl http://
IP-адрес_сервера_PPEM:80через виртуальный IP-адрес:
curl http://
виртуальный_IP-адрес:80
Службы HAProxy и keepalived запущены на всех серверах PPEM:
systemctl status haproxy systemctl status keepalived