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 + keepalived22 CPU, 4 GB RAM, 20 GB HDD.
Сервер Postgres Pro BiHA32 CPU, 4 GB RAM, 20 GB HDD.
Виртуальный статический IP-адрес1Адрес должен быть исключён из пула DHCP. Дополнительно можно создать DNS A-запись для этого IP-адреса.

Чтобы установить PPEM в режиме высокой доступности:

  1. Установите Postgres Pro Enterprise с решением BiHA.

  2. Чтобы обеспечить серверам 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
  3. Настройте менеджер:

    # 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.

  4. На серверах HAProxy установите haproxy, keepalived и требуемые инструменты:

    sudo apt-get install haproxy keepalived psmisc
  5. Настройте 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-2 PPEM_server_address-2:8080 cookie ppem-server-2 check

    В этом примере используется метод cookie-based persistence, который устанавливает пользователям cookie с именем сервера PPEM. Это необходимо, чтобы все запросы в рамках сеанса HTTP попадали на один сервер менеджера.

  6. Настройте сервер 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 меняются местами.

  7. Настройте агенты на всех серверах BiHA.

    Подключение к менеджеру должно быть настроено через виртуальный IP.

  8. Проверьте работоспособность, убедившись, что:

    • База данных кластера 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