HAProxy unterhält (wie viele Load Balancer) im Allgemeinen zwei Konversationen. Der Proxy hat eine Sitzung (in diesem Fall TCP) mit dem Client und eine weitere Sitzung mit dem Server. Daher sehen Sie bei Proxys am Ende 2x die Verbindungen auf dem Load Balancer. Daher fließt der gesamte Datenverkehr durch den Load Balancer.
Wenn es um die Skalierung über mehrere Load Balancer geht, müssen Sie das meines Erachtens nicht. Ein praktischer und ziemlich einfacher Weg, dies zu tun, ist die Verwendung von Keepalived mit zwei Floating-IPs und Round-Robin-DNS zwischen diesen beiden IPs. Wenn bei keepalived einer der Load Balancer ausfällt, hält der andere beide IPs, sodass Sie auf diese Weise eine hohe Verfügbarkeit erhalten. Abgesehen davon denke ich, dass Sie mit einer aktiven Haproxy-Instanz mit Ihrer Last gut zurechtkommen werden.
HAProxy skaliert sehr gut. In einem Beispiel verwendet das Stack Exchange-Netzwerk Web-Sockets, die offene TCP-Verbindungen aufrechterhalten. Während ich dies poste, haben wir 143.000 eingerichtete TCP-Sockets auf einer virtuellen VMware-Maschine ohne Probleme. Die CPU-Auslastung der VM beträgt ca. 7%.
Stellen Sie bei dieser Art der Einrichtung mit HAProxy sicher, dass Sie maxconn
hoch genug eingestellt haben. Hier ist ein Beispiel für eine HAProxy-Konfiguration:
frontend fe_websockets
bind 123.123.123.123:80
mode tcp
log global
option tcplog
timeout client 3600s
backlog 4096
maxconn 50000
default_backend be_nywebsockets
backend be_nywebsockets
mode tcp
option log-health-checks
option redispatch
option tcplog
balance roundrobin
server web1 10.0.0.1:1234
server web2 10.0.0.2:1234
timeout connect 1s
timeout queue 5s
timeout server 3600s
Ja, der gesamte Datenverkehr sollte normalerweise über den Load Balancer geleitet werden. Die Anforderungen werden vom Load Balancer empfangen und die Antworten an den Load Balancer zurückgesendet, der sie an die Clients zurücksendet.
Für die Auswahl des richtigen Werkzeugs habe ich nicht viel Erfahrung mit den anderen Optionen. Ich verwende Haproxy und es ist wirklich gut und stabil und kann eine große Menge an Verkehr verarbeiten. Auch die ACL-Funktionen sind hervorragend.
quelle
Es besteht die Möglichkeit, DSR (Direct Server Return) zu verwenden und zu konfigurieren. Dies hat jedoch nichts mit dem Loadbalancer zu tun, sondern wird im TCP-Stack (Routing-Tabellen) konfiguriert. Wir haben dies für ein großes Video-Streaming-Portal verwendet. Obwohl es funktioniert, bereitet es Ihnen erhebliche Kopfschmerzen in Bezug auf die Komplexität des notwendigen Routings.
Daher würde ich nicht empfehlen, diese Technik zu verwenden, ohne die Verwendung und die Nachteile sehr gründlich in Betracht zu ziehen.
Vielleicht gibt es einige Hinweise, um dort anzufangen:
Habe Spaß!
quelle