TAF, FCF, FAN und mehr

Werbung
<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
Herunterladen