
Ich denke darüber nach, Varnish zwischen HAProxy und Apache zu platzieren. Das funktioniert, allerdings überwacht HAProxy Varnish, wenn Varnish dazwischen ist. Wenn Apache ausfällt, wird kein Failover zum anderen Apache durchgeführt.
Gibt es in HAProxy eine Konfiguration, die dieses Problem behebt?
Antwort1
Wenn Varish zwischen HAproxy und Apache liegt, können Sie Varish einfach dieLastverteilung, obwohl es nicht annähernd so robust ist wie die von HAproxy bereitgestellten Optionen.
Besser wäre es vielleicht, wenn HAproxy statische Inhalte an Varnish und den Rest direkt an die Backend-Server senden würde.
Auf Haproxy.com gibt es einen sehr guten Artikel dazuHier.
Wenn Sie wirklich möchten, dass HAproxy den Status von Varnish überprüftUndApache gleichzeitig (die sich auf demselben Host befinden) haben Sie zwei Möglichkeiten:
Richten Sie Dummy-Backends/Server in HAProxy ein, die Apache prüfen, und lassen Sie den Dummy vom passenden Varnish-Server verfolgen:
frontend HTTP-IN mode http default_backend Varnishes # All traffic goes here backend Varnishes mode http balance roundrobin server Varnish-1 1.1.1.1:80 track Apache-1/Apache-1 server Varnish-2 2.2.2.2:80 track Apache-2/Apache-2 # No traffic ever goes here # Just used for taking servers out of rotation in 'backend Varnishes' backend Apache-1 server Apache-1 1.1.1.1:8080 check backend Apache-2 server Apache-2 2.2.2.2:8080 check
Lassen Sie Varnish ein Integritätsprüfergebnis zurückgeben, das dem Status von Apache entspricht (OK, wenn Apache aktiv ist, andernfalls FEHLGESCHLAGEN).
lack.vcl
backend default { .host = "127.0.0.1"; .port = "8080"; } # Health Check if (req.url == "/varnishcheck") { if (req.backend.healthy) { return(synth(751, "OK!")); } else { return(synth(752, "FAILED!")); } } sub vcl_synth { # Health Checks if (resp.status == 751) { set resp.status = 200; return (deliver); } if (resp.status == 752) { set resp.status = 503; return (deliver); } }
haproxy.cfg
frontend HTTP-IN mode http default_backend Varnishes backend Varnishes mode http balance roundrobin option httpchk HEAD /varnishcheck http-check expect status 200 server Varnish-1 1.1.1.1:80 check server Varnish-2 2.2.2.2:80 check