HAProxy hat keinen Server verfügbar

HAProxy hat keinen Server verfügbar

Ich versuche, einen sehr einfachen HTTP-Load Balancer mit Node.js-Backends in CentOS 7 einzurichten. Die Backends sind alle HTTP-Server.

Wenn ich sowohl das Backend so einstelle, dass es auf Port 80 lauscht, als auch HAProxy so einstelle, dass es auf Port 80 lauscht und Port 80 auf dem Backend verwendet, funktioniert alles einwandfrei. So sieht die Konfigurationsdatei in einer solchen Konfiguration aus:

global
    log         127.0.0.1 local2 info
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     256
    user        haproxy
    group       haproxy
    daemon

defaults
    mode               http
    log                global
    option             httplog
    timeout connect    10s
    timeout client     30s
    timeout server     30s

frontend http-in
    bind               :80
    default_backend    backend_servers
    option             forwardfor

backend backend_servers
    balance            roundrobin
    server             backend1 10.0.4.51:80 check
#    server             backend2 10.0.4.52:80 check
#    server             backend3 10.0.4.53:80 check
#    server             backend4 10.0.4.54:80 check
#    server             backend5 10.0.4.55:80 check
#    server             backend6 10.0.4.56:80 check

Wenn ich aber alle Ports beispielsweise auf 8124 ändere, zeigt HAProxy beim Start den folgenden Fehler an:

haproxy[3324]: backend backend_servers has no server available!

So sieht die neue Konfiguration aus

global
    log         127.0.0.1 local2 info
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     256
    user        haproxy
    group       haproxy
    daemon

defaults
    mode               http
    log                global
    option             httplog
    timeout connect    10s
    timeout client     30s
    timeout server     30s

frontend http-in
    bind               :8124
    default_backend    backend_servers
    option             forwardfor

backend backend_servers
    balance            roundrobin
    server             backend1 10.0.4.51:8124 check
#    server             backend2 10.0.4.52:8124 check
#    server             backend3 10.0.4.53:8124 check
#    server             backend4 10.0.4.54:8124 check
#    server             backend5 10.0.4.55:8124 check
#    server             backend6 10.0.4.56:8124 check

Sicherlich lauscht das Backend-Node.js-Programm jetzt auf Port 8124.

Die Firewall ist für Port 8124 im Backend geöffnet und der folgende Befehl:

wget http://10.0.4.51:8124/action

funktioniert vom Load Balancer aus einwandfrei, was darauf hindeutet, dass der Load Balancer tatsächlich auf das Backend zugreifen kann.

Unter diesen Umständen scheint der Start von HAProxy fehlgeschlagen zu sein, da ich Port 8124 nicht im LISTENStatus sehen kann, wenn ich verwende netstat -an.

Dies ist das erste Mal, dass ich HAProxy verwende, daher kann es sein, dass mir etwas ganz Triviales entgeht.

Gibt es sonst noch etwas, das ich überprüfen sollte?

Antwort1

Ich habe es gerade herausgefunden.

Das Problem liegt nicht in der Konfiguration von HAProxy, sondern in SELinux, das unter CentOS 7 standardmäßig aktiviert und auf den Durchsetzungsmodus eingestellt ist. Es scheint, als ob die Standardkonfiguration von SELinux HAProxy nur auf Port 80 zulässt.

Das Problem wurde behoben, indem SELinux auf den permissiven Modus eingestellt, vollständig deaktiviert oder SELinux anderweitig erlaubt wurde, HAProxy die Verwendung anderer Ports zu gestatten.

Sie können semanage verwenden, um HAProxy die Verwendung des Ports zu erlauben:

sudo semanage port -a -p tcp -t http_port_t 8124

verwandte Informationen