
우리는 Amazon EC2 인스턴스에서 HA 프록시를 사용하여 특정 요청을 EC2 ELB(Elastic Load Balancer)인 두 개의 서로 다른 내부 로드 밸런서로 라우팅하고 있습니다.
HA 프록시 구성은 다음과 같습니다.
defaults
mode http
log global
no option redispatch
retries 25
timeout connect 10000 # default 10 second time out if a backend is not found
timeout client 30000
timeout server 30000
maxconn 20000
stats uri /haproxy?stats
option http-server-close
timeout http-request 100s
timeout http-keep-alive 124s
backend main-service-backend
option httpchk GET /ping
server main-service internal-main-service:80 check inter 5s fall 10
backend micro-service-backend
option httpchk GET /ping
server micro-service internal-micro-service:80 check inter 5s fall 10
frontend shared-frontend *:80
acl is-micro-service-url path_reg ^/(/rest/user/.*/?)
use_backend micro-service-backend if is-micro-service-url
default_backend main-service-backend
일반적으로 서버 중 하나를 잠시 종료하면 HA 프록시가 복구됩니다. 그러나 일부 네트워크/라우팅 오류가 발생하고 HA 프록시가 복구되지 않는 것 같습니다.
HA 프록시 로그는 다음과 같습니다.
Server micro-service-backend/micro-service is DOWN, reason: Layer4 connection problem, info: "No route to host", check duration: 998ms. 0 active and 0 backup servers left. 1 sessions active, 0 requeued, 0 remaining in queue.
backend micro-service-backend has no server available!
HA 프록시는 서버 검사를 중지하고 계속 DOWN으로 표시합니다. 그러나 HA 프록시 상자에서 내부 로드 밸런서까지 http 상태 확인을 성공적으로 수행할 수 있습니다.
curl -i http://internal-micro-service:80/ping
HTTP/1.1 200 OK
Content-Type: text/plain;charset=UTF-8
Date: Fri, 12 Jun 2015 23:08:29 GMT
Server: Apache-Coyote/1.1
Content-Length: 2
Connection: keep-alive
UP
무엇이 잘못되었을지 아시나요? 또 무엇을 조사해야 합니까?
답변1
인터넷 검색을 통해 HA 프록시는 시작 시에만 DNS를 확인한다는 사실을 발견했습니다. HA 프록시는 상태 확인을 수행하기 전에 DNS 확인을 수행하지 않으므로 EC2 ELB는 IP 주소를 무작위로 변경하여 상태 확인이 실패할 수 있습니다.