So führen Sie ein Failover durch, wenn Varnish zwischen HAProxy und Apache liegt

So führen Sie ein Failover durch, wenn Varnish zwischen HAProxy und Apache liegt

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:

  1. 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
    
  2. 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
    

verwandte Informationen