2016-06-02 5 views
0

Verzeihen Sie mein Nullwissen über F5 und dessen Implementierung. Wir haben 4 Web-Server, auf denen wir die Last mit F5 verteilen wollen. Wir ersetzen Apache Camel Software Load Balancer.Apache Camel durch F5 ersetzen, um die Belastung auf 4 Webservern auszugleichen

Aktuelle Umsetzung:

  1. Jeder Kunde erzeugt eine Session-ID, wenn Interaktion mit dem Kunden zu initiieren und SOAP-Anforderung sendet LB URL auf SW. http://Server1:7001/WebService

  2. Der SW Load Balancer verwendet den Round-Robin-Algorithmus, um den geeigneten Server aus den folgenden vier Zielen zu finden und erstellt eine Zuordnung des Server-Endpunkts und der Sitzungs-ID. http://Server1:9080/WebService http://Server2:9080/WebService http://Server3:9080/WebService http://Server4:9080/WebService

  3. SW LB hält diese Sitzung für 10 Minuten. Innerhalb dieser Zeit, wenn die Anforderung erneut für dieselbe Sitzungs-ID kommt, wird derselbe Zielserver zum Verarbeiten der Anforderung verwendet. Wenn der Benutzer also eine Sitzung mit Server2 hat, wird dieser Server ihn weiterhin bedienen, bis der Benutzer die Sitzung (oder das Sitzungszeitlimit) beendet.

Da es auf Server1 zu sehen ist haben wir Load Balancer + Web-Service. Wir sind in SW Load Balancer dekompensieren, um auf F5 zu ändern.

Das obige Schema kann auf F5 implementiert werden? Und wird F5 uns eine neue URL geben? Welche werden wir mit unseren Kunden teilen, um Anfragen zu erhalten? Wie

Wird es Session ID aus der eingehenden Anfrage extrahieren können und Sticky Session Map beibehalten?

Antwort

2

Ja, Sie können Apache Camel durch F5 ersetzen, und Ihr Setup ist ziemlich Standard. Erstellen Sie 4 Knoten, einen Pool mit 4 Mitgliedern und den virtuellen Server.

Die F5 wird eine neue IP-Adresse [URL] müssen, es sei denn, Server1 die Adresse aufgibt. Sie können auch einen Standardport verwenden (80 für HTTP, 443 für HTTPS).

Der schwierigste Teil ist die Session ID Persistenz. Sie müssen ein universelles Persistenzprofil erstellen (Lokaler Datenverkehr »Profile» Persistenz) mit einem Timeout von 600 Sekunden und einen iRule erstellen, um den Datensatz basierend auf dem XML-Format zu erstellen. iRules kann schwierig sein, aber die DevCentral-Community hat bereits eine Lösung, die Sie anpassen können.

Kredit zu Stanislas von DevCentral: how get response parameters. Dieser iRule erfasst den Parameter innerhalb des XML-Tags <uid>.

when HTTP_RESPONSE { 
    # Trigger collection for up to 1MB of data 
    if {[HTTP::header exists "Content-Length"] && [HTTP::header "Content-Length"] <= 1048576}{ 
    set content_length [HTTP::header "Content-Length"] 
    } else { 
     set content_length 1048576 
    } 
    # Check if $content_length is not set to 0 
    if { ([HTTP::status] == 200) && ($content_length > 0)} { 
    HTTP::collect $content_length 
    } 
} 

when HTTP_RESPONSE_DATA { 
    # do stuff with the payload 
    #find the application unique identifier between <uid> and </uid> (5 is the length of <uid> string) 
    persist add uie [string trim [findstr [HTTP::payload] "<uid>" 5 "</uid>"]] 
} 

when HTTP_REQUEST { 
    persist uie [string trim [findstr [HTTP::payload] "<uid>" 5 "</uid>"]] 

}