
Der SAP NetWeaver Application Server für ABAP und der SAP NetWeaver Application Server für Java bestehen aus mehreren Instanzen auf verschiedenen Hosts, um das System zu skalieren und Verfügbarkeit sicherzustellen. Jede Instanz ist ein eigener HTTP-Server. HTTP-Requests müssen zwischen den Instanzen verteilt werden.
Es gibt prinzipiell 2 Lösungsmöglichkeiten:
SAP Web Dispatcher ist eine selbstkonfigurierende, innovative Lösung für HTTP/HTTPS Lastverteilung in SAP NetWeaver Application Server Umgebungen.
Andere HTTP Lastverteilungslösungen, ob Hardware oder Software.
Im SAP NetWeaver Application Server gibt es einen Webservice, der dem Lastverteiler eine Liste aller momentan aktiven Applikationsserver bereitstellt. Anhand der Informationen dieses Webservice kann die Konfiguration des Lastverteilers automatisiert werden, sodass er dynamisch auf Änderungen im System, wie z.B. das Starten oder Herunterfahren einer Instanz, reagieren kann.
Diese Dokumentation enthält eine detaillierte Spezifikation dieses Webservice, der auch vom SAP Web Dispatcher verwendet wird.
Diese Dokumentation konzentriert sich auf die grundlegende Lastenverteilung von HTTP-Requests. Die Lastverteilung kann bei stateless Requests und bei dem ersten Request einer stateful Session stattfinden. Alle darauf folgenden Requests, die zu dieser Session gehören, müssen auf den selben Applikationsserver geleitet werden.
In diesem Dokument wird nicht beschrieben, wie man die Stickiness eines Request aktiviert.
Bestimmte Aspekte der komplexen SAP-Request-Routing-Logik, wie das Mapping zwischen URLs und SAP-Logon-Gruppen, können nicht auf eine Standard-Web-Switch-Konfiguration gemappt werden.
Grundbegriffe
Kenntnisse über die NetWeaver-Applikationsserverarchitektur und Grundlagen sowie Grundeinstellungen des SAP Web Dispatcher sind für das Verständnis dieser Dokumentation hilfreich. Links zur Dokumentation zu diesen Themen finden Sie am Ende dieses Dokuments. Für dieses Dokument müssen hauptsächlich folgende Begriffe verstanden werden.
Ein SAP-System besteht aus einer oder mehreren Dialoginstanzen und einer Sonderinstanz, die den restlichen Instanzen zentrale Dienste zur Verfügung stellt. Eine der Instanzen ist der sogenannte Message-Server (Programmname: msg_server), der Informationen über alle anderen Instanzen des SAP-Systems zur Verfügung stellt und auf den im Folgenden Bezug genommen wird.
Jede SAP-Instanz hat eine Substruktur, die als „Stack“ bezeichnet wird. Stacks von SAP-Instanzen können ABAP- oder Java-Stacks sein. Eine SAP-Instanz kann einen ABAP-Stack, einen Java-Stack oder beide Stacks zusammen enthalten ( „Dual-Stack-Instanz“).
Der Lastverteiler holt in regelmäßigen Abständen eine Liste aller aktiven Applikationsserver eines SAP-Systems von dessen Message-Server via HTTP ein. Die Liste enthält die Hostnamen sowie einen statischen Wert, der die Kapazität jedes Servers angibt (siehe unten). Die Kapazität wird nach Stacks unterteilt, d.h. eine Dual-Stack-Instanz hat eine ABAP-Kapazität und eine Java-Kapazität.
Wenn eine Instanz herunterfährt oder ihr Herunterfahren geplant ist, wird die Kapazität der Instanz auf 0 gesetzt. Dies heißt, dass stateful Requests für bestehende Sessions immer noch an diese Instanz geschickt werden können, die Instanz aber aus der Lastverteilung herausgenommen werden sollte, weil sie keine neuen Logons mehr akzeptiert.
Server werden dynamisch von der Liste entfernt oder ihr hinzugefügt, wenn der SAP-Message-Server feststellt, dass ein neuer Server gestartet wurde oder ein laufender Sever herunterfährt (oder abstürzt).
Aus folgenden Gründen ist es erforderlich, dass ein Lastverteilungsgerät abgestürzte Server sofort von seiner internen Serverliste entfernt:
Es kann bis zu zehn Minuten dauern, bis der Message-Server einen Serverabsturz bemerkt. Deshalb ist es möglich, dass die Serverliste nicht den aktuellen Status der Server anzeigt.
Der Lastverteiler sollte die Liste nur periodisch aktualisieren (z.B. im Abstand von einigen Minuten).
Verfügbarkeit
Diese Spezifikation gilt für alle SAP-Produkte, die auf Application Server Release 6.20 oder höher mit SAP kernel 6.40 oder höher basieren. Dies entspricht SAP NetWeaver '04 und höher.
Kapazität
Der Kapazitätswert ist ein Integer, der die ungefähre Stärke des Servers angibt. Der Wert 0 (Null) bedeutet, dass der Applikationsserver herunterfährt und aus der Lastverteilung herausgenommen werden muss.
Momentan stellt die vom SAP-System verwendete Heuristik die statische Kapazitätswerte wie folgt fest:
AS ABAP: Anzahl der Dialogprozesse in der Instanz.
AS Java: Anzahl der Java-Server-Prozesse.
Die Heuristik kann ohne vorherige Ankündigung von SAP geändert werden.
Der Lastverteiler sollte nie den Absolutwert dieser Kapazitätswerte verwenden oder ihnen eine Bedeutung zuordnen. Nur das Verhältnis der Kapazitäten zwischen den einzelnen Servern ist signifikant.
Gibt es einen HTTP(S)-Port in der Liste, ist das System entweder ein ABAP-System oder ein Dual-Stack-System. Senden Sie in diesem Fall alle Requests zum HTTP(S)-Port und verwenden Sie den LB-Wert von der DIAG Line, um die Serverkapazität zu berechnen.
Gibt es keinen HTTP(S)-Port in der Liste, handelt es sich um ein Java-System. Senden Sie in diesem Fall alle Requests zum J2EE(S)-Port und verwenden Sie den LB-Wert von der J2EE Line, um die Serverkapazität zu berechnen.
Der Lastverteiler muss die Kapazitätswerte nicht zur Entscheidung über die Lastverteilung verwenden. Es können auch andere Mechanismen, wie Response Time Measurments oder Host-Last, verwendet werden. Es muss jedoch die Bedeutung des Werts 0 (Null) beachtet werden (siehe oben).
Host- und Port-Konfiguration
Der Hostname des Netzwerks und der HTTP-Port des Message-Servers werden über die SAP-Konfigurationsparameter rdisp/mshost im Standardprofil und ms/http_port im Profil des Message-Server konfiguriert.
Aus Gründen der Einfachheit und zur Verbesserung der Performance wird im HTTP-Message-Body ein Klartextformat verwendet, um die Serverliste als eine Menge an Server-Description-Datensätzen (getrennt durch leere Zeilen) wie folgt zu beschreiben ( CRLF gibt den Control/LineFeed als End-of-Line-Indicator an).
Die Lastverteilung bei Single-Track-Systemen (ABAP- oder Java-Systeme) ist einfacher als bei Dual-Stack-Systemen, da der Request-Typ klar ist. Wollen Sie bei einem Dual-Stack-System die Last verteilen, müssen folgende Voraussetzungen erfüllt sein:
Das System ist homogen, d.h. alle Instanzen enthalten AS ABAP und AS Java.
Sollen zwei Message-Server konfiguriert werden (einer für ABAP und einer für JAVA) müssen die Informationen vom ABAP-Message-Server abgerufen werden.
Bevor ein Request zum Server geschickt wird, überprüft der Lastverteiler, ob beide Stacks in der Applikationsserverliste vorhanden sind.
Der Body der HTTP-Response-Nachricht ist anhand folgender Syntax strukturiert.
<server-list> = "version" <major>"."<minor> CRLF
<sap-server-name> CRLF
<protocol-type> <host> <port> <description> CRLF
...
<protocol-type> <host> <port> <description> CRLF
CRLF
<sap-server-name> CRLF
<protocol-type> <host> <port> <description> CRLF
...
<protocol-type> <host> <port> <description> CRLF
CRLF steht für „Carriage Return Line Feed“ (neue Zeile).
Folgende Tabelle erklärt mögliche Werte für die Variablen. Beispiele finden Sie unten.
Die folgenden Erklärungen beziehen sich auf Version 1.2 des Protokolls (siehe erste Zeile der HTTP-Antwort).
Sie können auch HTTPS verwenden, um die Daten vom Message-Server abzurufen. Dazu muss der Message-Server für HTTPS konfiguriert werden. Weitere Informationen finden Sie in der am Ende dieses Dokuments verlinkten Dokumentation.
Sie erhalten die Aplikationsserverliste über den folgenden HTTP-Request vom Message Server (Release 6.40 und höher):
http://<msg_server_host>: <msg_server_port>/msgserver/text/logon?version=1.2
Die Liste wird im Klartextformat angezeigt. Folgende Tabelle zeigt die Antwort im Detail.
Variable |
Wert |
Beschreibung |
|
|---|---|---|---|
<major>.<minor> |
zwei durch einen Punkt getrennte Zahlen |
Typische Versionsbeschreibung: die erste Zahl gibt die Major-Version, die zweite Zahl die Minor-Version an. Im Folgenden verwenden wir Version 1.2. |
|
<sap-server-name> |
Zeichenkette |
Instanzname
Hinweis
Verwenden Sie diese Strings nicht, um Informationen über den Server zu erhalten. Die Informationen befinden sich in den Zeilen darunter. Der Instanzname kann ein anonymisierter String sein, wenn Hash-Verschlüsselung im Profilparameter is/instname_encoding im Systemprofil DEFAULT.PFL konfiguriert ist. In der Standardeinstellung hat der Parameter den Wert none, d.h. der Instanzname wird als Klartext übertragen. |
|
<protocol- type> |
AS ABAP |
HTTP |
Es ist ein HTTP-Port des Server im ICM konfiguriert. |
HTTPS |
Es ist ein HTTPS-Port des Server im ICM konfiguriert. |
||
DIAG |
Server hat Dialog-Work-Prozesse; diese Zeile enthält die LB-Kapazität des AS ABAP. |
||
... |
Andere Werte können hier aufgelistet werden: RFC, RFCS, SMTP und andere. Diese Protokolle sind für die Lastverteilung nicht relevant. |
||
AS Java |
J2EE |
AS Java ist aktiv und ein HTTP-Port ist konfiguriert. |
|
!J2EES |
AS Java ist aktiv und SSL-fähig. HTTPS-Port ist konfiguriert. |
||
... |
Andere Werte können hier aufgelistet werden: P4, P4S, IIOP, IIOPS und andere. Diese Protokolle sind für die Lastverteilung nicht relevant. |
||
<host> |
Zeichenkette |
Hostname |
|
<port> |
Zahl |
Port-Nummer |
|
<description> |
Zeichenkette |
Folgende Strings sind möglich:
|
Java-System
Folgendes Beispiel zeigt die Applikationsserverliste eines Java-Systems mit zwei Instanzen.
Der HTTP-Request http://ld8060: 8081/msgserver/text/logon?version=1.2 an den Message-Server mitt HTTP-Port 8081 könnte folgende Antwort erhalten:
version 1.2
J2EE187834720
J2EE ld8060.wdf.sap.corp 51800 LB=2
J2EES ld8060.wdf.sap.corp 51801 LB=2
P4 ld8060.wdf.sap.corp 51804 LB=2
P4S ld8060.wdf.sap.corp 51805 LB=2
IIOP ld8060.wdf.sap.corp 51806 LB=2
IIOPS ld8060.wdf.sap.corp 51807 LB=2
TELNET ld8060.wdf.sap.corp 51808 LB=2
J2EE507834720
J2EE ld8060.wdf.sap.corp 55000 LB=1
P4 ld8060.wdf.sap.corp 55004 LB=1
IIOP ld8060.wdf.sap.corp 55007 LB=1
TELNET ld8060.wdf.sap.corp 55008 LB=1
Hier sind zwei AS-JAVA-Instanzen auf einem physikalischen Host konfiguriert. Einer davon ist SSL-fähig und bietet Ports für alle Protokolle an. Die Instanz J2EE187834720 hat Doppelkapazität (zwei Java-Server-Prozesse sind aktiv) und erhält dadurch vom Web Dispatcher zwei mal so viele Requests wie die andere Instanz J2EE507834720 (solange die Requests stateless sind).
ABAP-System
version 1.2
WDFD00146517A_BIN_53
DIAG WDFD00146517A 3253 LB=3
RFC WDFD00146517A 3353
HTTP WDFD00146517A 1080
SMTP WDFD00146517A 8025
HTTP WDFD00146517A 1080 VHOST=0
SMTP WDFD00146517A 8025 VHOST=0
ld8060_BIN_12
DIAG ld8060.wdf.sap.corp 3212 LB=7
RFC ld8060.wdf.sap.corp 3312
HTTP ld8060.wdf.sap.corp 8888
SMTP ld8060.wdf.sap.corp 2500
HTTP ld8060.wdf.sap.corp 8888 VHOST=0
SMTP ld8060.wdf.sap.corp 2500 VHOST=0
pwdf2310_BIN_53
DIAG pwdf2310.wdf.sap.corp 3253 LB=10
DIAGS pwdf2310.wdf.sap.corp 3253 p/secude:CN=BIN, O=SAP-AG, C=DE
RFC pwdf2310.wdf.sap.corp 3353
RFCS pwdf2310.wdf.sap.corp 4853 p/secude:CN=BIN, O=SAP-AG, C=DE
HTTP pwdf2310.wdf.sap.corp 8080
HTTPS pwdf2310.wdf.sap.corp 8443
SMTP pwdf2310.wdf.sap.corp 25053
HTTP pwdf2310.wdf.sap.corp 8080 VHOST=0
HTTPS pwdf2310.wdf.sap.corp 8443 VHOST=0
SMTP pwdf2310.wdf.sap.corp 25053 VHOST=0
Hier sind drei verschiedene AS-ABAP-Instanzen auf verschiedenen Hosts konfiguriert. Sie haben verschiedene Kapazitäten und Protokolle.
Die vom Lastverteiler benötigten Informationen sind die Kapazität in der ersten Zeile und die Ports für HTTP und HTTPS.
Dual-Stack-System
version 1.2
us4251_BCO_27
DIAG us4251 3227 LB=8
RFC us4251 3327
HTTP us4251.wdf.sap.corp 50027
HTTPS us4251.wdf.sap.corp 44327
SMTP us4251.wdf.sap.corp 25027
J2EE us4251.wdf.sap.corp 50027 LB=1
J2EES us4251.wdf.sap.corp 44327 LB=1
P4 us4251.wdf.sap.corp 52704 LB=1
IIOP us4251.wdf.sap.corp 52707 LB=1
TELNET us4251.wdf.sap.corp 52708 LB=1
HTTP us4251.wdf.sap.corp 52700 VHOST=0
HTTPS us4251.wdf.sap.corp 44327 VHOST=0
SMTP us4251.wdf.sap.corp 25027 VHOST=0
bcomain_BCO_27
DIAG bcomain 3227 LB=20
RFC bcomain 3327
HTTP bcomain.wdf.sap.corp 52700
HTTPS bcomain.wdf.sap.corp 44327
SMTP bcomain.wdf.sap.corp 25027
J2EE bcomain.wdf.sap.corp 52700 LB=2
J2EES bcomain.wdf.sap.corp 44327 LB=2
P4 bcomain.wdf.sap.corp 52704 LB=2
P4S bcomain.wdf.sap.corp 52705 LB=2
IIOP bcomain.wdf.sap.corp 52707 LB=2
TELNET bcomain.wdf.sap.corp 52708 LB=2
HTTP bcomain.wdf.sap.corp 52700 VHOST=0
HTTPS bcomain.wdf.sap.corp 44327 VHOST=0
SMTP bcomain.wdf.sap.corp 25027 VHOST=0
Das System hat zwei Instanzen, die ABAP und Java bereitstellen. Das erste hat die ABAP-Kapazität 8 und die Java-Kapazität 1. Das zweite hat die Kapazitäten 20 und 2. Wenn Sie die Last in einem Dual-Stack-System verteilen, können Sie einen der Werte als Kapazität nehmen oder eine Berechnung anstellen.
SAP-Web-Dispatcher-Dokumentation auf dem Help Portal: http://help.sap.com/saphelp_nwce711/helpdata/en/42/5cfd3b0e59774ee10000000a114084/frameset.htm
Architektur des SAP NetWeaver Application Servers 7.1: http://help.sap.com/saphelp_nwpi71/helpdata/en/84/54953fc405330ee10000000a114084/frameset.htm