
|
TAF Transparent Application Failover. Automatischer Session Failover einer Datenbank-Session. Für die Anwendung verhält sich der Failover transparent. Sessions werden z. B. bei einem Ausfall eines Knotens auf einen anderen Knoten reconnected. |
|
Load Balancing Mechanismus zur Lastverteilung von Aufgaben auf mehrere Komponenten eines Systems, meist eines Clusters. |
|
|||||||||||||||||||||||||||||||
Die ersten drei Teile dieser Reihe [1 - 3] befassten sich mit der RAC-Architektur. Hier wurden die Anforderungen und technischen Details vom Betriebssystem-Layer bis hin zum Storage Management Layer dargestellt (siehe Abbildung 1).
Durch die Verwendung von virtuellen IP-Adressen und dessen Übernahme im Failover-Fall wird sichergestellt, dass immer mindestens ein Cluster-Knoten erreichbar ist. Allerdings muss die RAC-Architektur deutlich mehr leisten als nur die Übernahme der virtuellen IP-Adressen. Neben dem verteilten Speichermanagement (Cache Fusion) muss jede RAC-Instanz auch in der Lage sein, das Instanz-Recovery von anderen Instanzen zu übernehmen. Das bedeutet, im Fall eines Instance Crash muss die überlebende Instanz sofort aus den Online Redo Logs der abgestürzten Instanz ein Crash Recovery durchführen.
Die Skalierbarkeit der RAC-Architektur basiert auf dem dynamischen Hinzunehmen und Entfernen von Knoten aus dem System. So können quasi Speicher und CPUs von Servern zusammengefasst werden.
Welche Vorteile ergeben sich nun für die Anwendung? Zum einen wird die Verfügbarkeit verbessert, da beim Ausfall eines Cluster-Knotens alle Sessions auf die oder den "überlebenden" Knoten reconnected werden können. Zum anderen besteht die Möglichkeit, die Leistung zu steigern, da RAC über die Grenzen eines physikalischen Rechners skalieren kann.
Failover und Load Balancing werden nun im Einzelnen dargestellt.
Das Failover sollte für die Anwendung möglichst transparent sein. Das bedeutet, der Anwender sollte keine oder nur eine kurze Unterbrechung wahrnehmen. RAC unterscheidet die folgenden Failover-Methoden.
Mit der Konfiguration des CONNECT TIME FAILOVER wird sichergestellt, dass der Client eine Verbindung zur Datenbank aufbauen kann, wenn ein funktionsfähiger Knoten des RAC-Systems den gewünschten Net-Service zur Verfügung stellt.
Entscheidend ist dabei, dass zumindest die Verbindung zu einem laufenden Listener-Prozess aufgenommen werden kann. Dieser entscheidet dann, welcher Knoten den in der Verbindungsdefinition genannten Servicenamen bedient. Zu diesem Zweck müssen alle vorhandenen virtuellen Adressen des Knotens in der Adressliste angegeben und der Zusatzparameter FAILOVER definiert werden. Bei einer Verbindungsaufnahme wird dann diese Liste der Adressen durchprobiert, bis eine Verbindung zur Datenbank zustande kommt (siehe Abbildung 2).
Mit der Oracle-Eigenschaft TAF (Transparent Application Failover) kann auch eine Failover-Funktionalität bei bestehender Verbindung mit der Datenbank realisiert werden. TAF ermöglicht bei einem Knotenausfall den unbemerkten Übergang einer Session auf einen anderen Knoten.
Hierbei bestehen jedoch einige Einschränkungen, die von der Applikation adäquat behandelt werden müssen. Zum einen werden bestehende, noch nicht mittels commit bestätigte Transaktionen abgebrochen, da Transaktionen immer an die ausführende Instanz gebunden sind.
Zum anderen werden Einstellungen zur aktuellen Session (alter session ...), ebenso bei der Datenbankinstanz, gehalten und gehen bei dem Übergang verloren (siehe Abbildung 3).
Definiert wird TAF durch den Bereich FAILOVER_MODE in der TNS-Alias-Definition. Abhängig von den Einstellungen der Parameter kann das Failover-Verhalten gesteuert werden. Maßgebend dabei sind die Parameter in Abbildung 4.
Ziel des Load Balancing ist es, die Kapazitäten des RAC-Systems bezüglich des Hauptspeichers und der CPU-Zeit möglichst effektiv zu nutzen. Die Gesamtlast soll gleichmäßig über den Cluster verteilt werden. Erreicht wird dies entweder durch Einstellungen auf dem Server/Listener (Server-side Load Balancing) oder durch Einstellungen beim Client in der TNS-Spezifikation (Client-side Load Balancing).
Client-side Load Balancing
Das Client-side Load Balancing wird in der TNSNAMES.ORA des Clients mit dem Parameter LOAD_BALANCE eingestellt.
Steht LOAD_BALANCE auf on, so wird die Liste von Adressen in einer zufälligen Reihenfolge abgearbeitet, bis eine
erfolgreiche Verbindung hergestellt werden kann. Dies führt zu einer fast gleichmäßigen Verteilung neuer Verbindungen
auf die Clusterknoten, allerdings ohne Berücksichtigung des aktuellen Zustands bzw. der Last der Server (siehe Abbildung 5).
Server-side Load Balancing
Neben der Möglichkeit, das Load Balancing beim Client zu realisieren, kann das Load Balancing auch auf der Server-Seite konfiguriert werden.
Wird diese Funktionalität genutzt, entscheidet der Listener, mit welcher Instanz des Knotens der Client verbunden werden soll.
Die Entscheidungskriterien werden bei dem Listener und der Datenbankinstanz konfiguriert.
Einerseits muss die Datenbank die aktuellen Werte der verwendeten Kriterien an den eigenen Listener weitergeben.
Andererseits müssen sich die Listener aller Knoten miteinander unterhalten können, um diese Kriterien zu vergleichen
und entsprechend über die zu wählende Instanz entscheiden.
Die Einstellung des Server-side Load Balancing erfolgt über den Aufruf der Routine dbms_service. Mittels der PL/SQL-Prozedur dbms_service.modify_service können die Eigenschaften des Load Balancing modifiziert werden. Der Parameter clb_goal gibt an, welches Kriterium als Basis für das Load Balancing genutzt werden soll (LONG, SHORT). Der Parameter goal stellt ein, ob Load Balancing verwendet und in welcher Form es auf Basis der Serverlast gestaltet wird (siehe Abbildung 8).
Wichtige Parameter des PL/SQL Packages dbms_service.modify_service werden in Abbildung 9 beschrieben.
Wird für den Parameter clb_goal der Wert long gewählt, so wird das Load Balancing auf Basis der Anzahl der aktuell vorhandenen Verbindungen auf den einzelnen Knoten gemacht. Die Verbindungen werden gleichmäßig auf die Instanzen verteilt. Diese Einstellung zielt u. a. auf Applikationsserver, die einen Verbindungspool zur Datenbank mit lang bestehenden Verbindungen aufbauen und selbst die Anfragen auf diese Verbindungen verteilen.
Wird der Parameter auf den Wert short eingestellt, wird erwartet, dass Verbindungen zur Datenbank nur kurzfristig existieren und direkt nach der Verbindungsaufnahme Aktionen auf die Datenbank durchgeführt werden. Diese werden dann auf dem aktuell am wenigsten belasteten Knoten ausgeführt. Das Lastprofil der Datenbank wird regelmäßig durch die Datenbankinstanzen ermittelt und an die Listener weitergegeben. Abhängig vom Parameter goal entscheiden dann entweder die Antwortzeiten oder der aktuelle Durchsatz der Instanzen, welche Knoten verwendet werden.
Erst wenn alle vorgestellten Einstellungen und Konfigurationen auf dem Client und auf Seite des Clusters beachtet werden, können die vollen Möglichkeiten der RAC-Technologie genutzt werden. Durch das Failover erreicht man eine hohe Ausfallsicherheit der Datenbankverbindung und durch das Load Balancing können die Kapazitäten des Gesamtsystems effektiver genutzt werden.
Klaus Garstecki (info@ordix.de).