haproxy health-check 시 http status 에 따라 서비스에 포함시키기

HAProxy

haproxy로 reverse proxy구성 시 backend 구성 서버들의 health check를 한다.
down된 서버는 proxy에서 제외시켜주고 up된 서버는 다시 포함시켜 주는 역할을 하는데
문제는 backend에 포함된 서버가 boot 시간이 소요되는 서버라면..?
예를들면 작은 사이즈의 spring boot 앱의 경우 약 10초 미만의 부트시간을 갖는데, 부트가 완료되어서 response를 할 수 있는 상태가 되기 전에 haproxy의 서비스에 포함되어서 그 순간 접속한 클라이언트는 response를 받을 수 없게 된다.
이를 방지하기 위해 특정한 http status일 경우에만 다시 서비스에 포함시키도록 할 수 있지 않을까 하는 생각에 검색을 하다가 발견한 방법이다.

<br>backend app<br>    http-check expect status 200<br>    server app1 127.0.0.1:8081 check fail 3 rise 2<br>    server app2 127.0.0.1:8082 check fail 3 rise 2<br>

위와 같은 경우 app1이나 app2가 응답하지 않을 경우 바로 서비스에서 제외되고, 재시작이 되었을 경우에도 http status가 200이 될때까지 서비스에 포함시키지 않는다.
200을 응답하는 경우 바로 서비스에 재투입되므로 간단한 무중단 배포시에 편리하게 이용 가능하다.

http-check expect ! rstatus ^5

위와같이 작성을 하면 5xx대의 모든 응답은 에러로 인식..