Seit Oracle 12c kann man einen zweiten (oder noch mehr) SCAN-Listener fürs Load-Balancing, Failover o.ä. erstellen und verwenden. Das kann nützlich sein um Network-Traffic aufzuteilen z.B. für Dataguard oder Shareplex-Replication. Genau wie beim gewöhnlichen SCAN-Listener braucht man zwei zusätzliche VIP- und drei zusätzliche SCAN-Adressen. Im folgenden Beispiel möchte ich den Dataguard-Traffic aufteilen auf eine RAC-Datenbank mit zwei Knoten (morrison und manzarek) und einer RAC-Datenbank mit einem Knoten (daltrey) als Standby.
Konfigurierungsdetails
Man benötigt natürlich zuerst ein physikalisches Netzwerk. So wie eth0 oder bond0 nehmen wir in diesem Beispiel eth2. Alle Dataguard-Netzwerk-spezifischen Namen können durch das Suffix „_dg“ identifiziert werden. Um die Konfigurierung realistischer zu gestalten, verwende ich nicht die Standard-Ports, sondern zugehörige Ports sowohl für den Dataguard-Listener (1853) als auch den Dataguard-SCAN-Listener (1854).
Also fangen wir an mit dem root-Teil der Installation. Ich werde nur die Befehle für die RAC-Datenbank zeigen, weil die Standby-Datenbank die gleichen Befehle wieder verwendet.
- Ein Netzwerk hinzufügen
- Die VIP-Adressen hinzufügen und starten
- Den Scan hinzufügen
- Jetzt ist es Zeit die Listener zu konfigurieren, also müssen wir in die Grid-Infrastructure Owner wechseln (oragrid in meinem Beispiel).
srvctl add network -netnum 2 -subnet 172.17.0.0/255.255.0.0/eth2 -nettype static
srvctl add vip -node morrison -netnum 2 -address morrison-dg-vip/255.255.0.0/eth2 srvctl add vip -node manzarek -netnum 2 -address manzarek-dg-vip/255.255.0.0/eth2 srvctl start vip -node morrison -netnum 2 srvctl start vip -node manzarek -netnum 2
srvctl add scan -scanname doors-dg -netnum 2 srvctl start scan -netnum 2
srvctl add listener -listener listener_dg -netnum 2 -endpoints "TCP:1653" srvctl start listener -listener listener_dg srvctl add scan_listener -netnum 2 -listener doors-dg -endpoints "TCP:1654" srvctl start scan_listener -netnum 2
Das war’s. Unser zweiter SCAN-Listener und der Listener laufen und wie durch Magie nehmen die Datenbankparameter automatisch die Konfiguration an (listener_networks)
SQL> show parameter listener NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ listener_networks string (( NAME=net2)(LOCAL_LISTENER=( DESCRIPTION=(ADDRESS=(PROTOCOL =TCP)(HOST=172.17.30.77)(PORT= 1853))))), ((NAME=net2)(REMOTE _LISTENER=doors-dg:1854)) local_listener string (ADDRESS=(PROTOCOL=TCP)(HOST= 172.16.30.77)(PORT=1851)) remote_listener string doors.carajandb.intra:1852
Leider funktioniert dies nur mit der Basis-Version (12.1.0.2.0) und den ersten PSUs. Seit PSU 5 (ich habe es mit 5 (Oktober 2015) und 6 (Januar 2016) getestet) ist listener_networks leer.
SQL> show parameter listener NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ listener_networks string local_listener string (ADDRESS=(PROTOCOL=TCP)(HOST= 172.16.30.77)(PORT=1851)) remote_listener string doors.carajandb.intra:1852, d oors.carajandb.intra:1852, doo rs.carajandb.intra:1852
Um die Konfigurierung zu verändern, muss man zuerst das Patch 19884033 anwenden, weil es den Bug löst, dass listener_networks nicht modifiziert werden kann.
Jetzt muss man dieParameter listener_networks, local_listener und remote_listener manuell hinzufügen:
ALTER SYSTEM SET listener_networks='((NAME=net2)(LOCAL_LISTENER="(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=morrison-dg-vip)(PORT=1853)))")(REMOTE_LISTENER=doors-dg:1854))'; ALTER SYSTEM SET remote_listener='doors.carajandb.intra:1652'; ALTER SYSTEM SET local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=172.16.30.78)(PORT=1651))' SCOPE=BOTH SID='*';
Das war’s dann um ein zugehöriges Netzwerk für den Dataguard- oder Shareplex-Traffic zu verwenden. Alle HA-Funktionen sind wie üblich verfügbar.