Ich bin mit dem folgenden Problem konfrontiert: Server werden gesättigt, da die aktuelle Lastausgleichsstrategie auf der Client-IP basiert. Einige Unternehmensclients greifen hinter großen Proxys auf unsere Server zu, sodass alle Clients für unseren Load Balancer mit derselben IP-Adresse angezeigt werden. Ich denke, wir verwenden ein Hardware-Lastausgleichsgerät (kann bei Bedarf weitere Untersuchungen durchführen). Wir müssen die Sitzungsaffinität beibehalten (Site wird in ASP erstellt), damit alle Anforderungen mit derselben IP an denselben Knoten weitergeleitet werden.
Da die gesamte Kommunikation über das HTTPS erfolgt, stehen Balancer als Client-Diskriminator keine Anforderungsdaten (wie die Sitzungs-ID) zur Verfügung. Gibt es eine Möglichkeit, neben der IP-Adresse noch andere Daten zu verwenden, um zwischen Clients zu unterscheiden und die Clients weiterzuleiten, selbst wenn sie von derselben IP zu verschiedenen Knoten kommen?
Hinweis: Ich muss den Datenverkehr zwischen dem Balancer und den Knoten sicher (verschlüsselt) halten.
Hierfür gibt es drei gängige Methoden:
Zuerst können Sie Ihre Load-Balancer-Weiterleitungslogik ändern (entweder die Anzahl der Verbindungen zu jedem Host verfolgen und versuchen, die Last gleichmäßig zu verteilen, ein einfaches Round-Robin durchführen usw.). Jede der genannten Optionen beseitigt die deterministische Natur Ihres aktuellen Setups (Clients von IP X gehen nicht mehr zu Server Y), wodurch auch Ihr Problem beseitigt (oder verringert) wird.
Zweitens können Sie die Informationen entschlüsseln, eine Server-ID daraus lesen und sie dann weitergeben (entweder neu verschlüsseln oder im Klartext über Ihr Back-End-Netzwerk weitergeben). Beachten Sie, dass diese in großem Maßstab , es sei denn Ihr Load-Balancing - Hardware nicht wirklich praktisch ist , SSL-Beschleunigung (zB Cisco Content Switch mit SSL - Module) , da das Gerät Sie schleusen den gesamten Verkehr durch zu tun hat ALL die SSL - Arbeit.Die dritte Methode, die ich nicht empfehle: Einrichten von Split-Horizon- oder Round-Robin-DNS für Ihren Zielserver (entweder direkt auf einen Back-End-Server oder auf separate IPs auf dem Load Balancer, die statisch an einen Back-End-Server gebunden sind) Ende haben unterschiedliche Ausgleichspools usw.) - Dies ist bei kleineren Vorgängen als "Ghetto-Lastausgleich" ziemlich häufig, aber in Ihrer Situation (in der Sie bereits über eine Lastausgleichsausrüstung verfügen) führt dies im Vergleich zu den anderen Lösungen zu unnötiger Komplexität .
quelle
Die einzige Möglichkeit, das zu tun, was Sie möchten, besteht darin, SSL auf oder vor Ihrem Load Balancer zu beenden und dann den Load Balancing basierend auf der Sitzungs-ID durchzuführen. Open-Source-Lösungen für beide Schritte in einer Software sind Nginx, Haproxy, Lack und viele andere.
Einige Hardware-Load-Balancer wurden zum Ausgleich basierend auf der SSL-Sitzungs-ID verwendet, aber Browser verhandeln jetzt SSL-Sitzungen neu, sodass dies nicht mehr zuverlässig funktioniert.
quelle
Hängt vom genauen Typ der Box ab, aber wenn Sie den Lastausgleichsdiskriminator ändern können, um ihn zu berücksichtigen,
(src ip + src port)
anstatt nur(src ip)
, wären Sie fertig. Ich weiß, dass Citrix Netscaler dies unterstützt, wahrscheinlich auch andere Geräte.quelle
Ich weiß nicht, ob Ihr Problem behoben ist. In jedem Fall besteht eine gute Lösung darin, die Sitzungsaffinität basierend auf der SSL-ID zu verwenden.
In diesem Fall merkt sich Ihr Gerät die SSL-ID in der Speichertabelle, um Benutzeranforderungen mit derselben SSL-ID an denselben Serverknoten weiterzuleiten.
Sie müssen also weiter untersuchen, ob Ihr Lastausgleichsgerät kompatibel ist.
quelle