Blog Johannes

Blog Johannes

johannes blog ohne logo

Blog Johannes

Ein zweiter SCAN-Listener

Veröffentlicht: 20. Juni 2016
Geschrieben von Johannes Ahrends

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.

  1. Ein Netzwerk hinzufügen
  2. srvctl add network -netnum 2 -subnet 172.17.0.0/255.255.0.0/eth2 -nettype static
  3. Die VIP-Adressen hinzufügen und starten
  4. 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
  5. Den Scan hinzufügen
  6. srvctl add scan -scanname doors-dg -netnum 2
    srvctl start scan -netnum 2
  7. Jetzt ist es Zeit die Listener zu konfigurieren, also müssen wir in die Grid-Infrastructure Owner wechseln (oragrid in meinem Beispiel).
  8. 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.

Johannes Ahrends

CarajanDB GmbH

Siemensstr. 25  50374 Erftstadt

Fon: +49 (2235) 170 91 83

Fax: +49 (2235) 170 79 78

Mail: info@carajandb.com

 

carajan-db-logo