HAproxy Single-Arm-Lastausgleich

HAproxy Single-Arm-Lastausgleich

Ich versuche, ein Lastausgleichslabor für HAproxy im Single-Arm-Modus einzurichten (wenn sich die tatsächliche Frontend-IP und die Backend-Server im selben Subnetz befinden, während die tatsächlichen Clients immer remote sind). Eine weitere Anforderung besteht darin, Client-Quell-IPs für Backend-Knoten sichtbar zu machen. Da wir eine benutzerdefinierte TCP-basierte App lastausgleichen, scheint die Option „source 0.0.0.0 usersrc clientip“ hier die richtige Wahl zu sein. Außerdem habe ich Backends so konfiguriert, dass Standard-Gateways auf die IP-Adresse von HAproxy verweisen.

Allerdings passieren seltsame Dinge, wenn ich diese Backend-Option aktiviere: Ich sehe, dass die Verbindung zum Frontend-VIP ordnungsgemäß hergestellt und ein 3-Wege-Handshake gebildet wurde. Aber wenn der HAproxy-Server versucht, eine zweite Sitzung aufzubauen, um mit der gefälschten IP eines Clients auf Backend-Server zuzugreifen, sehe ich genau das Folgende:

  1. Der Proxy sendet SYN mit der gefälschten IP-Adresse des Clients an eines der Backends.
  2. Das Backend antwortet normalerweise mit einem SYN-ACK-Paket;
  3. Der Proxy sendet KEIN letztes ACK, sondern sendet nach dem Timeout einfach blind SYN-Pakete mit demselben Ergebnis;
  4. Auf einem Proxy sehe ich, dass diese Verbindung in der Netstat-Ausgabe als SYN_SENT markiert ist. Es sieht also so aus, als ob der Proxyserver aus irgendeinem Grund das eigentliche SYN-ACK-Paket nicht akzeptiert.

Ich freue mich über jedes Lob.

verwandte Informationen