HAProxy wechselt zur Sicherung bei 500 Fehlern und / oder Serverausfall


8

Ich richte einen HAProxy vor nur 2 Backend-Servern mit einer bestimmten Konfiguration ein: Jede Anfrage sollte an Server A gehen; Wenn jedoch Server A einen 5xx-Fehlercode zurückgibt, sollten alle Anforderungen an einen Sicherungsserver B gesendet werden. Wenn A "up" zurückgibt, sollten alle Anforderungen an A gesendet werden.

Ich versuche diese Konfiguration:

backend example_cluster
        balance roundrobin
        option httpclose
        option forwardfor

        option httpchk HEAD /ping.html HTTP/1.0\r\nHost:www.example.com
        http-check disable-on-404
        default-server error-limit 1 on-error mark-down

        redirect scheme https if !{ ssl_fc }
        server node1 1.2.3.4:80 check observe layer7
        server node_back 5.6.7.8:443 backup ssl verify none

Aber es funktioniert aus zwei Gründen nicht:

  1. Alle Anforderungen werden an den Server node_back (B) weitergeleitet, auch wenn node1 (A) aktiv ist.
  2. Es scheint, dass keine httpchecks für Server A durchgeführt werden; oder besser, in Syslog sehe ich keinen Fehler bezüglich des Ausfalls von Server A.

Wenn ich die Zeile "Option httpchk" und die beiden Zeilen direkt darunter entferne; und ich entferne auch die "beobachtungsschicht7" in Server A; HAProxy leitet alle Anforderungen an Knoten A weiter. Wenn der Server A jedoch 500 zurückgibt, wechselt HAProxy offensichtlich nicht zu B. Daher gehe ich davon aus, dass das Problem möglicherweise in der Option httpchk configuration liegt.


1
Mit Nginx ist das perfekt machbar. Tatsächlich vermeide ich Haproxy beim Web-Balancing, da Nginx flexibler und einfacher ist, da es sich um einen Webserver handelt. Da es sich bei der ersten Frage jedoch um Haproxy handelte, habe ich nicht das Recht, eine Antwort zu Nginx zu geben. Aber wenn du es willst, kann ich. Immerhin ist fast ein Jahr vergangen, ich denke, Sie haben trotzdem eine Lösung gefunden.
Drookie

Antworten:


1

Aus der offiziellen Dokumentation: Aktiver passiver Lastausgleich mit HAProxy

defaults
  mode http
  option http-server-close
  timeout client 20s
  timeout server 20s
  timeout connect 4s

frontend ft_app
  bind 10.0.0.100:80 name app
  default_backend bk_app

backend bk_app
  server s1 10.0.0.1:80 check
  server s2 10.0.0.2:80 check backup

0

Übrigens habe ich eine Pre-Nginx-Konfiguration für meinen Haproxy gefunden, und ich denke, Sie sollten es versuchen:

frontend foo
    bind 192.168.0.1:9080
    option httpchk
    default_backend bar-web

backend bar-web
    mode http
    balance roundrobin
    server bar1 192.168.1.2:9080 check observe layer4 weight 50
    server bar2 192.168.1.3:9080 check observe layer4 weight 50
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.