<Insert Picture Here> Hochverfügbarkeit in der Anwendungsentwicklung: TAF, FCF, FAN und mehr ... Carsten Czarski ORACLE Deutschland GmbH Hochverfügbarkeit und die Anwendung • Eine hochverfügbare Datenbank alleine ... ... reicht nicht aus! • Application Server muss ebenfalls hochverfügbar sein • Client/Anwendung muss mit dem Failover umgehen können => Aufgabe des Anwendungsentwicklers! DB Session Session Web Client Application Server Cluster Datenbank Cluster (RAC) Hochverfügbarkeit und die Anwendung • Eine hochverfügbare Datenbank alleine ... ... reicht nicht aus! • Application Server muss ebenfalls hochverfügbar sein • Client/Anwendung muss mit dem Failover umgehen können => Aufgabe des Anwendungsentwicklers! Server Down DB Session Session Web Client Application Server Cluster Datenbank Cluster (RAC) Hochverfügbarkeit und die Anwendung • Eine hochverfügbare Datenbank alleine ... ... reicht nicht aus! • Application Server muss ebenfalls hochverfügbar sein • Client/Anwendung muss mit dem Failover umgehen können => Aufgabe des Anwendungsentwicklers! Session Session Failover: • Transparent ...? • Was ist mit dem Session State ...? Web Client Failover Application Server Cluster Datenbank Cluster (RAC) Hochverfügbarkeit und die Anwendung • Eine hochverfügbare Datenbank alleine ... ... reicht nicht aus! • Application Server muss ebenfalls hochverfügbar sein • Client/Anwendung muss mit dem Failover umgehen können => Aufgabe des Anwendungsentwicklers! Clusterknoten startet wieder: • Fallback ...? Session • J2EE vs. Client/Server ...? ? DB Session Web Client Application Server Cluster Datenbank Cluster (RAC) Grundsätzliches ... • Was passiert mit der Datenbank-Session ... • • • • Transaktionskontext (offene Transaktionen) Offene Cursor PL/SQL Package State Java Session State (Datenbank JVM) Server Down DB Session Session Web Client Application Server Cluster Datenbank Cluster (RAC) Was passiert mit der Session ...? • Session State wird im Server-Prozeß gehalten • • • • Transaktionskontext (offene Transaktionen) Offene Cursor PL/SQL Package State Java Session State (Datenbank JVM) Der Server-Prozess stirbt ... ... und damit der gesamte Session State! DB Session Application Server Server-Prozess auf Clusterknoten Storage Failover und Session State • Session State ist im Fokus bei Failover-Betrachtungen • Varianten aus Sicht der Anwendungsentwicklung • Gar kein Failover: Endanwender erhält Fehlermeldung und muss sich neu anmelden • Failover-Implementierung in der Anwendung: Entwickler fängt Fehler ab und verbindet sich neu mit der Datenbank • Failover-Implementierung durch DB-Software: Failover ist transparent (wie weit?) für den Entwickler Failover und Anwendungsarchitektur • Unterschiedliche Anwendungsarchitekturen • Client-Server • Web (J2EE, .NET, PHP) • Unterschiedliche Failover-Anforderungen • Client-Server • PC wird abends abgeschaltet: DB-Session endet • Web • J2EE, .NET mit Connection Pool Die DB Session endet niemals • PHP ohne Connection Pool Die DB Session endet nach jedem Seitenaufbau Oracle Failover-Technologie • Varianten • TAF: Transparent Application Failover • MDS: WLS Multi Data Source (BEA Failover Technologie) • FCF: Fast Connection Failover Session Web Client Application Server Cluster Datenbank Cluster (RAC) TAF: Transparent Application Failover • Transparent Application Failover • OCI-Funktionalität • Server- oder Clientseitige Aktivierung möglich • Client-Einstellungen durch TNS Connect-String • Server-Einstellungen gehen vor! • Session-Failover • OCI verbindet automatisch neu • Cursor einer SELECT-Anweisung kann "übernommen" werden • Callback-API TAF: Funktionsweise ... • TAF ist OCI-Funktionalität • Nicht verfügbar im JDBC "thin"-Treiber • Failover wird vom Client aus durchgeführt • Failover-Erkennung anhand Netzwerkfehler Für Experten: Unterstützung durch FAN Events möglich OCI Application Server Datenbank Cluster (RAC) TAF: Funktionsweise ... • TAF ist OCI-Funktionalität • Nicht verfügbar im JDBC "thin"-Treiber • Failover wird vom Client aus durchgeführt • Failover-Erkennung anhand Netzwerkfehler Für Experten: Unterstützung durch FAN Events möglich 1. Server Down: Der Client bekommt (noch) nichts mit OCI Application Server Datenbank Cluster (RAC) TAF: Funktionsweise ... • TAF ist OCI-Funktionalität • Nicht verfügbar im JDBC "thin"-Treiber • Failover wird vom Client aus durchgeführt • Failover-Erkennung anhand Netzwerkfehler Für Experten: Unterstützung durch FAN Events möglich 2. Client sendet eine (SQL)-Anweisung OCI Application Server SQL Datenbank Cluster (RAC) TAF: Funktionsweise ... • TAF ist OCI-Funktionalität • Nicht verfügbar im JDBC "thin"-Treiber • Failover wird vom Client aus durchgeführt • Failover-Erkennung anhand Netzwerkfehler Für Experten: Unterstützung durch FAN Events möglich 3. Netzwerkfehler - OCI "weiss" nun: Knoten down ! OCI Application Server SQL Datenbank Cluster (RAC) TAF: Funktionsweise ... • TAF ist OCI-Funktionalität • Nicht verfügbar im JDBC "thin"-Treiber • Failover wird vom Client aus durchgeführt • Failover-Erkennung anhand Netzwerkfehler Für Experten: Unterstützung durch FAN Events möglich 4. OCI verbindet sich neu ... ... und setzt SQL SELECT ggfs. neu ab (TYPE=SELECT) ! OCI Application Server SQL Datenbank Cluster (RAC) TAF: 100% Transparent ...? • OCI verbindet sich automatisch auf anderen Knoten • Verbindungen "auf Vorrat" (METHOD=PRECONNECT) • Session-State geht verloren • Erneutes Ausführen eines offenen Cursors (TYPE=SELECT) • SELECT-Anweisung wird neu abgesetzt • Fetch wird bei letzter Cursor-Position wieder aufgenommen • In jedem Fall verloren sind ... • Offene Transaktionen • PL/SQL-Variablen • Inhalte von Temporary Tables TAF Callbacks Auf den Failover-Fall reagieren • Callbacks für OCI, Java und .NET • Beispiel: JDBC (OCI-Treiber) TAF: Knoten fährt wieder hoch • TAF ist OCI-Funktionalität • Nicht verfügbar im JDBC "thin"-Treiber • Failover wird vom Client aus durchgeführt • Failover-Erkennung anhand Netzwerkfehler 4. Keine Aktion, da kein Netzwerkfehler ! OCI Application Server SQL Datenbank Cluster (RAC) MDS: Bea WLS Multi Data Source • Failover Architektur für BEA WLS Server • Oracle JDBC OCI Treiber von BEA nicht unterstützt: Daher kein TAF • Prinzip • Einrichtung einer DataSource für jede DB Instanz • Periodische Tests • Data Source wird deaktiviert, wenn Test fehlschlägt http://edocs.bea.com/wls/docs100/jdbc_admin/oracle_rac.html#wp1084373 MDS: Funktionsweise ... • MDS ist Oracle WLS-Funktionalität • Failover wird vom J2EE-Server aus durchgeführt • Failover-Erkennung anhand fehlgeschlagener Tests • Fallback möglich 0. Application Server testet periodisch ... JDBC thin Application Server Test SQL Datenbank Cluster (RAC) MDS: Funktionsweise ... • MDS ist Oracle WLS-Funktionalität • Failover wird vom J2EE-Server aus durchgeführt • Failover-Erkennung anhand fehlgeschlagener Tests • Fallback möglich 1. Server Down: J2EE-Server erfährt (noch) nichts JDBC thin Application Server Datenbank Cluster (RAC) MDS: Funktionsweise ... • MDS ist Oracle WLS-Funktionalität • Failover wird vom J2EE-Server aus durchgeführt • Failover-Erkennung anhand fehlgeschlagener Tests • Fallback möglich 2. Nächster (periodischer) Test schlägt fehl ... JDBC thin Application Server Test SQL Datenbank Cluster (RAC) MDS: Funktionsweise ... • MDS ist Oracle WLS-Funktionalität • Failover wird vom J2EE-Server aus durchgeführt • Failover-Erkennung anhand fehlgeschlagener Tests • Fallback möglich 3. Test fehlgeschlagen: DataSource wird deaktiviert JDBC thin ! Application Server Datenbank Cluster (RAC) MDS: Funktionsweise ... • MDS ist Oracle WLS-Funktionalität • Failover wird vom J2EE-Server aus durchgeführt • Failover-Erkennung anhand fehlgeschlagener Tests • Fallback möglich 4. J2EE-Server verwendet andere DataSource JDBC thin Application Server SQL Datenbank Cluster (RAC) MDS: Funktionsweise ... • MDS ist Oracle WLS-Funktionalität • Failover wird vom J2EE-Server aus durchgeführt • Failover-Erkennung anhand fehlgeschlagener Tests • Fallback möglich 5. Deaktivierte DataSource wird weiter getestet Test SQL JDBC thin Application Server Datenbank Cluster (RAC) MDS: Funktionsweise ... • MDS ist Oracle WLS-Funktionalität • Failover wird vom J2EE-Server aus durchgeführt • Failover-Erkennung anhand fehlgeschlagener Tests • Fallback möglich 6. Test wieder erfolgreich: Reaktivierung der DataSource JDBC thin ! Application Server Test SQL Datenbank Cluster (RAC) MDS: Fazit • MDS Failover findet komplett im J2EE-Server statt • Basis: Periodisches Testen • Failover-Zeit hängt von Testperiode ab • Eine MDS pro DB-Instanz • MDS 1: jdbc:oracle:thin:@dbclust1:1521:SID1 • MDS 2: jdbc:oracle:thin:@dbclust2:1521:SID2 • Kein Runtime Load Balancing • Keine Erkennung neuer Clusterknoten Fast Connection Failover • Basierend auf Fast Application Notification (FAN) • Oracle Connection Cache und Universal Connection Pool • Java (JDBC OCI und thin Treiber) und .NET • Bei "Service Down" Ereignis • Benachrichtigung des Connection Pools • Connection Pool invalidiert DB-Verbindungen • Anwendung bekommt SQL-Exception bei nächster DB-Aktion Fast Application Notification (FAN) Basis für Fast Connection Failover • Notification Server (ONS) überwacht die Knoten • Ereignisse führen zum Senden einer Benachrichtigung • Knoten fährt herunter • Knoten fährt hoch • Subscription des Clients zu einem ONS Web Client Application Server Cluster Datenbank Cluster (RAC) Fast Application Notification (FAN) Basis für Fast Connection Failover • Notification Server (ONS) überwacht die Knoten • Ereignisse führen zum Senden einer Benachrichtigung • Knoten fährt herunter • Knoten fährt hoch • Subscription des Clients zu einem ONS Server Down Web Client Application Server Cluster Datenbank Cluster (RAC) Fast Application Notification (FAN) Basis für Fast Connection Failover • Notification Server (ONS) überwacht die Knoten • Ereignisse führen zum Senden einer Benachrichtigung • Knoten fährt herunter • Knoten fährt hoch • Subscription des Clients zu einem ONS ONS Event propagation ! Web Client Application Server Cluster Datenbank Cluster (RAC) Fast Connection Failover • Basierend auf Fast Application Notification (FAN) • Oracle Connection Cache • Java (JDBC OCI und thin Treiber) und .NET • Wichtig: J2EE-Architektur • DB-Verbindungen werden nur kurz aus dem Pool geholt ... • Rückgabe in den Pool, sobald möglich Connection Pool Application Server Datenbank Cluster (RAC) Fast Connection Failover • Basierend auf Fast Application Notification (FAN) • Oracle Connection Cache • Java (JDBC OCI und thin Treiber) und .NET 1. Server Down: Benachrichtigung via FAN ! Connection Pool Application Server Datenbank Cluster (RAC) Fast Connection Failover • Basierend auf Fast Application Notification (FAN) • Oracle Connection Cache • Java (JDBC OCI und thin Treiber) und .NET 2. Freie DB Verbindungen werden deaktiviert Connection Pool Application Server Datenbank Cluster (RAC) Fast Connection Failover • Basierend auf Fast Application Notification (FAN) • Oracle Connection Cache • Java (JDBC OCI und thin Treiber) und .NET 3. Aktive DB Verbindung bekommt SQL Exception ! Connection Pool Application Server Datenbank Cluster (RAC) Fast Connection Failover • Basierend auf Fast Application Notification (FAN) • Oracle Connection Cache • Java (JDBC OCI und thin Treiber) und .NET 4. Entwickler: Exception abfangen Neue Verbindung aus dem Pool holen, TX wiederholen ! Connection Pool Application Server Datenbank Cluster (RAC) Fast Connection Failover • Basierend auf Fast Application Notification (FAN) • Oracle Connection Cache • Java (JDBC OCI und thin Treiber) und .NET 5. Server Up: Benachrichtigung via FAN ! Connection Pool Application Server Datenbank Cluster (RAC) Fast Connection Failover • Basierend auf Fast Application Notification (FAN) • Oracle Connection Cache • Java (JDBC OCI und thin Treiber) und .NET 6. Allmähliches Fallback der DB-Verbindungen Connection Pool Application Server Datenbank Cluster (RAC) Fast Connection Failover • Basierend auf Fast Application Notification (FAN) • Oracle Connection Cache • Java (JDBC OCI und thin Treiber) und .NET 6. Allmähliches Fallback der DB-Verbindungen Connection Pool Application Server Datenbank Cluster (RAC) FAN mit implizitem JDBC Connection Cache • Konfiguration einer Data Source • Einstellungen auch im EM oder "data-sources.xml" möglich • Beispielkonfiguration JAVA-Code: OracleDataSource ods = new OracleDataSource(); ods.setURL(url); ods.setUser(user); ods.setPassword(pwd); ods.setConnectionCachingEnabled(true); ods.setFastConnectionFailoverEnabled(true); ods.setONSConfiguration("nodes=[ons nodes]"); Connection con = ods.getConnection() // Java Code goes here ... FCF: Exception Handling • FCF ist nicht transparent ... • ... und soll es auch gar nicht sein! • Aufgabe des Entwicklers: Exception Handling try { // JDBC work } catch (SQLException e) { if (e.getErrorCode() == 17008) { // ORA-17008: Closed Connection con = ods.getConnection(); // Retry JDBC work } } Bonus Track: Universal Connection Pool (UCP) ab 11.1.0.7 • Ein universeller Connection Pool für alles: • Jede Art von JAVA Connection: JDBC, XA, JCA, LDAP ... • Jede Datenbank • Jeder Applikationsserver • Optimale Integration mit Oracle Datenbanken • Data Guard • FCF (Fast Connect Failover) • Runtime Connection Load Balancing (RCLB) • WebSession basierende Affintät zu RAC Instanzen • Transaktionsbasierende Affinität (XA) zu RAC Instanzen Weitere Informationen • White Paper: Client Failover Best Practices http://www.oracle.com/technology/deploy/availability/pdf/ MAA_WP_10gR2_ClientFailoverBestPractices.pdf • Oracle Dokumentation: • Net Services Developers' Guide: TAF http://download.oracle.com/docs/cd/B28359_01/network.111/ b28316/advcfg.htm#i473297 • JDBC Developer's Guide • Transparent Application Failover http://download.oracle.com/docs/cd/B28359_01/java.111/ b31224/ocitaf.htm#BABGIDEE • Fast Connection Failover http://download.oracle.com/docs/cd/B28359_01/java.111/ b31224/fstconfo.htm#CIHJBFFC Fragen & Antworten