
Wir verwenden einen HA-Proxy in einer Amazon EC2-Instanz, um bestimmte Anfragen an zwei verschiedene interne Lastenausgleichsmodule weiterzuleiten, bei denen es sich um EC2 ELBs (Elastic Load Balancer) handelt.
Hier ist die HA-Proxy-Konfiguration:
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
Normalerweise wird der HA-Proxy wiederhergestellt, wenn ich einen der Server für eine gewisse Zeit herunterfahre. Es scheint jedoch ein Netzwerk-/Routingfehler aufzutreten und der HA-Proxy wird nicht wiederhergestellt.
Hier sind die HA-Proxy-Protokolle:
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!
Der HA-Proxy hört auf, den Server zu überprüfen und markiert ihn weiterhin als DOWN. Ich kann jedoch erfolgreich den HTTP-Integritätscheck von der HA-Proxy-Box zum internen Load Balancer durchführen:
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
Irgendeine Idee, was falsch sein könnte? Was sollte ich sonst noch untersuchen?
Antwort1
Nach einigem Googeln fand ich heraus, dass der HA-Proxy DNS nur beim Start auflöst. Die EC2-ELBs können IP-Adressen zufällig ändern, was dazu führt, dass die Integritätsprüfungen fehlschlagen, da der HA-Proxy keine DNS-Auflösung vor der Integritätsprüfung durchführt.
Elastic Load Balancer ändern IP-Adressen