2017-11-26 8 views
0

Ich muss HAProxy konfigurieren, um Anfragen von verschiedenen Pfaden an verschiedene Backends weiterzuleiten, und einige der Backends müssen Lasten-ausgeglichen werden. So bin ich auf this question gestoßen, und die dort zur Verfügung gestellte Lösung funktioniert, aber aufgrund unserer Konventionen muss ich listen und use-server anstelle von frontend und use_backend verwenden.HAProxy - URL-basiertes Routing mit Load Balancing - mit listen und verwenden-Server

So jetzt habe ich etwas wie folgt aus:

listen poq [url]:[port] 
    acl has_cool_url path_beg -i /cool 
    use-server cool if has_cool_url 
    server cool [ip]:[port] check 
    server default [ip]:[port] check 

Und ich kann dies nicht nutzen:

listen poq [url]:[port] 
    acl has_cool_url path_beg -i /cool 
    use_backend cool if has_cool_url 
    use_backend notcool if !has_cool_url 

backend cool 
    balance roundrobin 
    server first [ip]:[port] check 
    server second [ip]:[port] check 

backend notcool 
    server third [ip]:[port] check 

Weil unsere Konventionen sagen uns, alles innerhalb des listen Block zu definieren.

Also meine Frage ist: Gibt es so etwas wie folgt aus:

listen poq [url]:[port] 
    acl has_cool_url path_beg -i /cool 
    use-server {first, second} if has_cool_url 
    server first [ip]:[port] check 
    server second [ip]:[port] check 
    server default [ip]:[port] check 

Wo first und second verwenden Round-Robin-Lastausgleich?

Antwort

0

Ihre Konventionen sind willkürlich und schränken Ihre Funktionalität ein. Ein listen Block ist funktionell ähnlich einem einzelnen frontend und einem backend Block mit dem gleichen Namen und einem impliziten default_backend, der vom Frontend zum Backend zeigt. listen Blöcke sollen für einfache Konfigurationen verwendet werden.

Der Punkt eines Back-Ends ist, dass alle Server im Back-End den gleichen Dienst bereitstellen. use-server können Sie genau einen Server auswählen.

Das nur, was Sie mit listen tun können, ist eine einzige Standardgruppe von Servern ausgleichen, sowie einem oder mehr einzelnen Server, einzeln adressierbare mit Bedingung Streichhölzern, aber sie können nicht ausgeglichen werden.

In dieser Konfiguration wird/warm zum Warm-Server,/Hot zum Hot-Server. Diese beiden Server werden mit 0 gewichtet, um zu verhindern, dass sie andere Anfragen bearbeiten.

Alles andere ist zwischen default1 und default2 ausgewogen. Diese

ist die ganze Flexibilität, die Sie mit listen haben, weil HAProxy hat nur einen Satz pro Backend-Ausgleich, und, wie oben erwähnt, ein listen Abschnitt ist eine implizite Kombination der Funktionalität eines abgestimmten Satz von frontend und backend.

+0

Die von Ihnen angebotene Lösung funktioniert perfekt für meinen Zweck, danke. Ich stimme zu, dass die Konventionen willkürlich sind! – ezer1337