Назад | Перейти на главную страницу

Как настроить / заставить Haproxy отправлять запросы на чтение и запись на основе метода REST

Как настроить / заставить Haproxy отправлять запросы чтения-записи, приходящие на тот же порт 5432 от приложения, на внутренние серверы кластера postgres-patroni на основе метода REST.

У меня есть кластер postgres-patroni с тремя узлами, работающий как служба / контейнеры докеров за Haproxy. Я хочу отправить запрос чтения / получения, исходящий из моего приложения на порт 5432, в реликвии моего кластера и отправить запрос записи / (Delete | Post | Update), исходящий из моего приложения, также на порт 5432 на главный сервер.

Я попытался добиться этого с помощью конфигурации ниже. Но пока не удалось.

Любая идея Как заставить Haproxy достичь вышеуказанного сценария.

Вот мой файл Haproxy.cfg

global
        maxconn 100

defaults
        log     global
        mode    tcp
        retries 2
        timeout client 30m
        timeout connect 4s
        timeout server 30m
        timeout check 5s
        # never fail on address resolution
        default-server init-addr none

resolvers docker_resolver
        nameserver dns 127.0.0.11:53
listen stats
    mode http
    bind *:7000
    stats enable
    stats uri /

frontend master_postgresql
        bind *:5432
        acl is_post method "POST|UPDATE|DELETE"
        use_backend backend_master if is_post
        default_backend backend_master

frontend replicas_postgresql
        bind *:5432
        acl is_get  method GET
        use_backend backend_replicas  if is_get
        default_backend backend_replicas

frontend patroni_api
        bind *:8008
        default_backend backend_api

backend backend_master
        balance source
        hash-type consistent
        option httpchk OPTIONS /master
        server postgres1 postgres1:5432 maxconn 100 check port 8008 resolvers docker_resolver resolve-prefer ipv4
        server postgres2 postgres2:5432 maxconn 100 check port 8008 resolvers docker_resolver resolve-prefer ipv4
        server postgres3 postgres3:5432 maxconn 100 check port 8008 resolvers docker_resolver resolve-prefer ipv4

backend backend_replicas
        option httpchk OPTIONS /replica
        server postgres1 postgres1:5432 maxconn 100 check port 8008 resolvers docker_resolver resolve-prefer ipv4
        server postgres2 postgres2:5432 maxconn 100 check port 8008 resolvers docker_resolver resolve-prefer ipv4
        server postgres3 postgres3:5432 maxconn 100 check port 8008 resolvers docker_resolver resolve-prefer ipv4

backend backend_api
        option httpchk OPTIONS /master
        server postgres1 postgres1:8008 maxconn 100 check port 8008 resolvers docker_resolver resolve-prefer ipv4
        server postgres2 postgres2:8008 maxconn 100 check port 8008 resolvers docker_resolver resolve-prefer ipv4
        server postgres3 postgres3:8008 maxconn 100 check port 8008 resolvers docker_resolver resolve-prefer ipv4