Hi all,
I'm trying to set up our haproxys according to the following cascaded schema:
HTTP CLIENT:
--> HAPROXY1 HTTP Frontend --> HAPROXY 1 Backend (/health monitoring, RR to
Haproxy2's frontends and Haproxy3's frontends)
--> HAPROXY2 HTTP Frontend (exposing /health monitor-uri) --> HAPROXY2 Backend
(RR)--> Backend Servers (SITE 1)
--> HAPROXY3 HTTP Frontend (exposing /health monitor-uri) --> HAPROXY3 Backend
(RR)--> Backend Servers (SITE 2)
HAPROXY1 :
backend client-backend-name:
mode http
balance roundrobin
option httpchk GET /health
http-check expect status 200
timeout check 6s
server haproxy2 1.2.3.2:80 check inter 10s fall 3 rise 2
server haproxy3 1.2.3.3:80 check inter 10s fall 3 rise 2
HAPROXY2 & HAPROXY3 :
frontend haproxy2-frontend-name
mode http
bind 1.2.3.2:80
monitor-uri /health
monitor fail if { nbsrv(haproxy2-backend-name) eq 0 }
<cut>
use_backend haproxy2-backend-name
backend haproxy2-backend-name:
mode http
balance roundrobin
option httpchk GET /health
http-check expect status 200
timeout check 6s
server one 1.2.3.10:80 check inter 10s fall 3 rise 2
server two 1.2.3.11:80 check inter 10s fall 3 rise 2
I have set up our Haproxy2's and Haproxy3's HTTP frontends to expose the
monitor-uri that is returning http status != 200 when all the servers in the
provided backend are unavailable.
I can then have the Haproxy1 know if one of them didn't have backend servers
available to handle the request anymore.
Now I'd want to force our monitor-uri on Haproxy2 or Haproxy3 to return http
status != 200, just to let Haproxy1 know when we are about to shutdown the
site/node for maintenance before the service really becomes unavailable.
Can you please suggest me the cleanest way to have such control of monitor-uri
returned status, forcing the http returned status to someting != 200 when
needed and leaving it sticky to the nbsrv(backend-name) eq 0 as per default?
Thanks,
Matteo