В этом разделе описан пример установки и настройки 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_3
target_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-1PPEM_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 {
interface interface
state MASTER
virtual_router_id 124
priority 100
unicast_src_ip HAproxy-1_server_IP_address
unicast_peer {
HAproxy-2_server_IP_address
}
virtual_ipaddress {
virtual_IP_address/subnet_class_(for_example_16_or_24) dev interface
}
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