View
370
Download
1
Category
Preview:
DESCRIPTION
Folien zum Vortrag auf der JAX 2013
Citation preview
Dirk Weil | GEDOPLAN
Java EE hochverfügbar
dirk.weil@gedoplan.de
Dirk Weil
• GEDOPLAN GmbH, Bielefeld• Java EE seit 1998• Konzeption und
Realisierung• Vorträge• Seminare• Veröffentlichungen
2 Java EE hochverfügbar
dirk.weil@gedoplan.de
Hochverfügbarkeit
• Lastverteilung– Große Menge von Anfragen– Verteilung auf mehrere
Cluster-Knoten– Verschiedene
Lastverteilungsverfahren– Einzelne Anfrage wird i. d. R. verlangsamt!
3 Java EE hochverfügbar
dirk.weil@gedoplan.de
Hochverfügbarkeit
• Ausfallsicherheit– Mehrere redundante Cluster-Knoten– Transparentes „Fail-Over“ bei
Knotenausfall– Replikation von Sitzungsdaten
4 Java EE hochverfügbar
dirk.weil@gedoplan.de
Cluster-Architekturen
• EinfacherCluster-Aufbau
5
Client
Load
Bal
ance
r
DB
Cluster
Server 1Web Logic
Server 1Web Logic
Servlet EJBCDIJPAJMS
Server 2Web Logic
Server 2Web Logic
Servlet EJBCDIJPAJMS
Java EE hochverfügbar
dirk.weil@gedoplan.de
Cluster-Architekturen
• Mehrstufiger Cluster-Aufbau
6
Cluster 2
Client
Load
Bal
ance
r
DB
Server 3Logic
Server 3Logic
EJBCDIJPAJMS
Server 4Logic
Server 4Logic
EJBCDIJPAJMS
Cluster 1
Server 1Web
Server 1Web
Servlet
Server 2Web
Server 2Web
Servlet
Java EE hochverfügbar
dirk.weil@gedoplan.de
Cluster-Architekturen
• SegmentierterCluster-Aufbau
7
Cluster 1
Server 1Web Logic
Server 1Web Logic
Serv-let
EJBCDIJPAJMS
Server 2Web Logic
Server 2Web Logic
Serv-let
EJBCDIJPAJMS
Cluster 2
Server 3Web Logic
Server 3Web Logic
Serv-let
EJBCDIJPAJMS
Server 4Web Logic
Server 4Web Logic
Serv-let
EJBCDIJPAJMS
DBClient
Load
Bal
ance
r
Java EE hochverfügbar
dirk.weil@gedoplan.de
Cluster-Architekturen
• Load-Balancer = Illusion „1 Server“• Implementierungsvarianten:
– Hardware– Webserver-Proxy– Cluster-aware Proxies
8
Load BalancerClient
10.1.2.101Server 1
10.1.2.102Server 2
10.1.2.103Server 3
Java EE hochverfügbar
dirk.weil@gedoplan.de
Cluster-Architekturen
• Lastverteilungsverfahren:– Round-Robin– Random– Gewichtet
• Sticky Session
9
Load BalancerClient
10.1.2.101Server 1
10.1.2.102Server 2
10.1.2.103Server 3
Java EE hochverfügbar
dirk.weil@gedoplan.de
JBoss 7 im Clusterbetrieb
• „Work in Progress“• Viele Änderungen
7.0.x � 7.1.0 � 7.1.1 (� 7.1.3)• Dokumentation
unvollständig,teilweiseveraltet
10 Java EE hochverfügbar
dirk.weil@gedoplan.de
JBoss 7 im Clusterbetrieb
• Standalone-Modus– Konfiguration …-ha.xml– Kein gemeinsames Deployment!– Autodeployment möglich.
11
StandaloneServer
StandaloneServer
StandaloneServer
Java EE hochverfügbar
dirk.weil@gedoplan.de
JBoss 7 im Clusterbetrieb
• Domänen-Modus– Profil ha oder full-ha– Gemeinsames Deployment
mittels Admin-Tools– Kein Autodeployment
12 Java EE hochverfügbar
dirk.weil@gedoplan.de
JBoss 7 im Clusterbetrieb
13
JGroups
Infinispan
Stat
eful
Sess
ion B
eans
Hib
ernat
e(J
PA)
Web
Sess
ion
Hor
net
Q(J
MS)
dirk.weil@gedoplan.de
Konfiguration eines Clusters
• Domain• Server Group im
Profil haoder full-ha
14 Java EE hochverfügbar
dirk.weil@gedoplan.de
Konfiguration eines Clusters
• Demo:– Master auf
Windows-PC– 2 virtuelle
Linux-Maschinen mit je 2 Slaves
15 Java EE hochverfügbar
dirk.weil@gedoplan.de
Web-Anwendungenim JBoss-7-Cluster
• Lastverteilung mittelsmod_cluster möglich– Dynamische Konfiguration– Lastverteilung mit serverbasierten Metriken– HTTP, HTTPS oder AJP
16
ApacheHTTP Server
10.1.2.101JBoss1
10.1.2.102JBoss2
10.1.2.103JBoss3
HTTP/HTTPS/AJPHTTP/HTTPS
Java EE hochverfügbar
dirk.weil@gedoplan.de
Web-Anwendungenim JBoss-7-Cluster
• Demo:– Clusterfähige Web-Anwendung
im JBoss-Cluster– Apache Webserver mit mod_cluster auf
Windows-PC
17 Java EE hochverfügbar
dirk.weil@gedoplan.de
EJBs im JBoss-7-Cluster
• Proxies implementieren Lastverteilungsverfahren
• Erster Zugriff auf beliebigen Knoten• Weitere Zugriffe durch Proxy verteilt• Kein externer Loadbalancer nötig!• Lastverteilung nur bei Remote-Zugriffen
18
Node 2EJB
Node 1EJBClient
Proxy
Java EE hochverfügbar
dirk.weil@gedoplan.de
EJBs im JBoss-7-Cluster
• Demo:– Remote-Aufruf von Stateless und Stateful
Session Beans
19 Java EE hochverfügbar
dirk.weil@gedoplan.de
Messaging im JBoss-7-Cluster
• Verbindungsaufbau (ConnectionFactory, Connection) geschieht zufällig zu einem Knoten
• Meldungsversand– PtP-Meldungen werden lastverteilt– Pub/Sub-Meldungen gehen an alle Knoten– Knoten ohne passende Consumer werden
nicht bedient20 Java EE hochverfügbar
dirk.weil@gedoplan.de
Messaging im JBoss-7-Cluster
• Meldungsempfang– Nur von einem Knoten– aber: Knoten ohne passende Consumer
erhalten keine Meldungen
21 Java EE hochverfügbar
dirk.weil@gedoplan.de
Messaging im JBoss-7-Cluster
• Ein Ausfall eines Knotens …
• … wird serverseitig automatisch behandelt– Das Lastverteilungsverfahren wird
reorganisiert– Zwischenzeitlich für den ausgefallenen
Knoten vorgesehene Meldungen werden zugestellt, wenn er wieder läuft
22 Java EE hochverfügbar
dirk.weil@gedoplan.de
Messaging im JBoss-7-Cluster
• Ein Ausfall eines Knotens …
• … führt clientseitig zum Abbruch– sofortiges Reconnect (an anderen Knoten)
möglich
• Keine Meldung geht verloren, wenn Auslieferung persistent!
23 Java EE hochverfügbar
dirk.weil@gedoplan.de
JPA-Entitiesim JBoss-7-Cluster
• Profitieren nur indirekt– Lastverteilung �Webanwendung bzw.
EJBs– Failover � Datenbank
– Performanceerhöhung• 2nd Level Cache• Query Cache
24 Java EE hochverfügbar
dirk.weil@gedoplan.de
JPA-Entitiesim JBoss-7-Cluster
• Default-Verfahren: Cache mit Invalidierung– Jeder Knoten füllt den 2nd Level Cache
selbsttätig– Schreiboperation invalidiert betroffene
Einträge auf den anderenCluster-Knoten
• Andere Verfahrenmöglich, aberselten sinnvoll
25
JBoss1
L2C
JBoss2
L2C
JBoss3
L2C
Java EE hochverfügbar
dirk.weil@gedoplan.de
Infinispan-Repl.-Verfahren
• Session-Replikation– Default: An alle, asynchron
• Skaliert nicht• Hohe Verfügbarkeit
– Synchron– Distributed
• 1 … n Kopien• Skaliert• Verringerte Verfügbarkeit
26 Java EE hochverfügbar
dirk.weil@gedoplan.de
Session Replication
• Für Web-App in web.xml aktivieren
• Für EJBs serverabhängig
Java EE hochverfügbar27
<web-app …>
…
<distributable />
<jboss …>
<jee:assembly-descriptor>
<c:clustering>
<jee:ejb-name>CounterBean</jee:ejb-name>
<c:clustered>true</c:clustered>
</c:clustering>
dirk.weil@gedoplan.de
Session Replication
• Nur Serializable!• Fat Session Problem• Braucht N-fach Speicher• Skaliert nicht, wenn Replikation an alle• Unterschiedliche Trigger• Verschiedene Granularitäten
Java EE hochverfügbar28
dirk.weil@gedoplan.de
GlassFish
• Domäne– Dedizierter
Admin-Server– Vollständige Kontrolle
der Cluster-Serverper SSH möglich
Java EE hochverfügbar29
Das Bild kann zurzeit nicht angezeigt werden.
dirk.weil@gedoplan.de
GlassFish
• Lastverteilung & Failover– Web-App: HTTP Load Balancer Plug-In– EJBs: InitialContext: Random node
EJB Proxy: Sticky / Per-Req. LBTransparent Failover
– JMS: Message BrokerVerteilte DestinationsTransparent Failover möglich
Java EE hochverfügbar30
dirk.weil@gedoplan.de
GlassFish
• Replikationsverfahren– In Memory– Je ein Replikat– Consistent Hash
Algorithm
Java EE hochverfügbar31
dirk.weil@gedoplan.de
WebLogic
• Domäne– Dedizierter Admin-Server– Rechnerübergreifend
mittels Node Manager– Deployment auch auf
Cluster-Teile möglich
Java EE hochverfügbar32
dirk.weil@gedoplan.de
WebLogic
• Lastverteilung & Failover– Web-App: Webserver-Plugin– EJBs: Replica-aware Stubs– JMS: Distributed Destinations
Migratable JMS Servers
Java EE hochverfügbar33
dirk.weil@gedoplan.de
WebLogic
• Replikationsverfahren– In Memory (Primär/Sekundär)– Filesystem– Datenbank
Java EE hochverfügbar34
Schön, dass Sie da waren!
Fr, 15:30: Java EE – Lessons Learned
dirk.weil@gedoplan.de
Recommended