How to setup/make Haproxy send read-write request coming on same port 5432 from application, to backend servers of postgres-patroni cluster based on REST method.
I have three node postgres-patroni cluster running as docker service/containers behind Haproxy. I wanna sent read/get request coming from my-application on port 5432 to relicas of my cluster and sent write/(Delete|Post|Update) request coming from my-application also on port 5432 to master server.
I have tried to achieve it with below config. But didn’t succeed as of now.
Any idea How to make Haproxy achieve above scenario.
Here is my Haproxy.cfg file
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