Ich bin neu in diesem Lastausgleichsszenario und muss herausfinden, wie dieser Lastausgleich funktioniert.
Meine Umgebung:
Centos 6.4 64 Bit
Webserver: Lighttpd
All running in ESXI
virtual IP: 192.168.1.6
LB1: 192.168.1.4
LB2: 192.168.1.5
Webserver 1: 192.168.1.12
Webserver 2: 192.168.1.13
Gateway: 192.168.1.1
Der Versuch, vor der Produktion mit HAproxy einen Test im Labor durchzuführen und zu erhalten. Folgendes habe ich in meiner Keepalived-Umgebung:
! Konfigurationsdatei für Keepalived
global_defs {
notification_email {
[email protected]
}
notification_email_from [email protected]
smtp_server 192.168.1.4
smtp_connect_timeout 30
router_id 192.168.1.1
}
vrrp_script chk_haproxy {
script "killall -0 haproxy"
interval 1 # check every second
weight 2 # add 2 points of prio if OK
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 101 #priority 101 for master
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.6
}
track_script {
chk_haproxy
}
}
und hier ist meine Einstellung für HAproxy
#---------------------------------------------------------------------
# Example configuration for a possible web application. See the
# full configuration options online.
#
# http://haproxy.1wt.eu/download/1.4/doc/configuration.txt
#
#---------------------------------------------------------------------
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
# to have these messages end up in /var/log/haproxy.log you will
# need to:
#
# 1) configure syslog to accept network log events. This is done
# by adding the '-r' option to the SYSLOGD_OPTIONS in
# /etc/sysconfig/syslog
#
# 2) configure local2 events to go to the /var/log/haproxy.log
# file. A line like the following can be added to
# /etc/sysconfig/syslog
#
# local2.* /var/log/haproxy.log
#
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
# turn on stats unix socket
stats socket /var/lib/haproxy/stats
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend main *:80
# acl url_static path_beg -i /static /images /javascript /stylesheets
# acl url_static path_end -i .jpg .gif .png .css .js
# use_backend static if url_static
# default_backend view
#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#---------------------------------------------------------------------
#backend static
# balance roundrobin
# server static 127.0.0.1:4331 check
#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend app
mode tcp
balance roundrobin
server server1 192.168.1.12:80 check inter 2000 rise 2 fall 5
server server2 192.168.1.13:80 check inter 2000 rise 2 fall 5
Als ich den HAproxy gestartet habe, ist dieser Fehler aufgetreten und ich bin mir nicht ganz sicher, wo ich anfangen soll, ihn zu beheben. Vielleicht kann mir jemand, der dies schon oft getan hat, helfen, etwas Licht ins Dunkel zu bringen?
503 Service Unavailable No server is available to handle this request.
Die manuelle Verbindung zum Webserver1 und zum Webserver2 funktioniert jedoch einwandfrei.
Ich möchte nur einen einfachen Lastausgleich für den Webserver, der sich hinter dem HAproxy befindet. Jeder Rat oder Vorschlag wird absolut geschätzt. Bitte helfen Sie? Danke vielmals.
Das Problem liegt in Ihrer HAProxy-Konfiguration. Wenn ich alle Kommentare aus Ihrer Konfiguration entferne, erhalte ich Folgendes:
Und jetzt können Sie deutlich sehen, dass es überhaupt keine Konfiguration des Frontends gibt. Anfragen kommen über HAProxy über,
frontend main
aber HAProxy weiß nicht, welche Server zuverlässig dafür sind, und gibt daher 503 zurück.Sie müssen das Backend mit
default_backend
oder mit acl mit dem Frontend verknüpfen.Sie sollten auch Statistiken verwenden, nicht nur mit Socket, sondern auch mit geschützter Weboberfläche. Ich kann Ihnen Informationen über Cluster hinter Haproxy zeigen, welche Server offline sind, welche Probleme auftreten, über Antwortzeiten und so weiter. Sehr nützlich zum Debuggen.
quelle
Ich habe einen ähnlichen Fehler erhalten, weil HAProxy meinte, mein Backend sei aufgrund der standardmäßigen Integritätsprüfung nicht verfügbar. Ich habe den Gesundheitscheck deaktiviert und der 503 ist weggegangen.
Ich benutze pfsense GUI:
quelle
Ich hatte eine etwas andere Konfiguration, daher ist dies nicht die Antwort auf Ihr spezifisches Problem, aber es kann anderen helfen, die den 503-Fehler mit HAProxy haben.
Mein Haproxy wurde folgendermaßen konfiguriert:
Dies bedeutet, dass das Backend nur verwendet wird, wenn der Host-Header mit external-service-1-0 beginnt.
In meinem Fall war der Grund für den 503-Fehler, dass der Client die folgenden Anforderungsheader gesendet hat:
X-App-ID: 98d77fae1082342342323423423452ae203489234
Host: external-service-1-0.prod-drb-external.svc.cluster.local: 8080 Verbindung: Keep-Alive
Beachten Sie die zusätzliche Zeile zwischen X-App-ID und Host. Eine leere Zeile lässt HAProxy glauben, dass dies das Ende der HTTP-Header ist. Daher wurde der Host-Header ignoriert und das richtige Backend konnte nicht gefunden werden.
quelle
PFSense fügt automatisch (und etwas unsichtbar) zusätzliche ACLs hinzu, wenn Sie ein TLS-Zertifikat verwenden. Ich habe einen zweiten virtuellen Host und ein zweites Zertifikat im Abschnitt "Zusätzliche Zertifikate" hinzugefügt. Dadurch wurden die Standardzertifikat-ACLs beibehalten.
Das Deaktivieren dieser ACLs und der Neustart haben den Trick getan.
quelle
In meinem Fall schien die Konfiguration korrekt zu sein, aber ich bekam immer noch den Fehler. Das Update bestand einfach darin, Haproxy unter Selinux laufen zu lassen oder Selinux auf einer Test-VM vollständig zu deaktivieren.
setsebool -P haproxy_connect_any 1
setenforce 0
quelle