HAProxy hat keinen Server verfügbar

7

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 Port 80 abhört, als auch HAProxy, um Port 80 abzuhören und Port 80 im Backend zu verwenden, 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 jedoch alle Ports 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 überwacht das Backend-Programm node.js jetzt Port 8124.

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

wget http://10.0.4.51:8124/action

funktioniert perfekt mit dem Load Balancer, was darauf hinweist, dass der Load Balancer tatsächlich auf das Backend zugreifen kann.

Unter diesen Umständen scheint HAProxy nicht gestartet zu werden, da Port 8124 bei LISTENVerwendung nicht in dem Status angezeigt wird, in dem ich ihn verwende netstat -an.

Dies ist das erste Mal, dass ich HAProxy verwende, daher fehlt mir möglicherweise etwas wirklich Triviales.

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

Panda Pyjama
quelle

Antworten:

4

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 Erzwingungsmodus eingestellt ist. Es scheint, dass die Standardkonfiguration von SELinux HAProxy nur auf Port 80 zulässt.

Das Problem wurde behoben, indem SELinux in den zulässigen Modus versetzt, ganz deaktiviert oder SELinux auf andere Weise zugelassen wurde, dass HAProxy andere Ports verwendet.

Sie können Semanage verwenden, um HAProxy über den Port zuzulassen:

sudo semanage port -a -p tcp -t http_port_t 8124
Panda Pyjama
quelle
Was kann ich überprüfen, um zu überprüfen, ob ich das gleiche Problem habe? Ich habe den gleichen Fehler im Protokoll, aber wie kann ich die Ursache des Problems überprüfen?
Realtebo