Hinzufügen einer Virtual IP zu einem Oracle RAC

Inhaltsverzeichnis[Verbergen]

Ziel

In diesem Blogeintrag wird gezeigt, wie man eine zusätzliche Virtual IP-Adresse (VIP) zu einem bestehenden Oracle Real Application Cluster (RAC) hinzufügt. Bei einem RAC System besitzt jeder Knoten im Cluster eine virtuelle IP-Adresse, die bei Ausfall des Knotens auf einen der überlebenden Knoten hinüber schwenkt. Möchte man zum Beispiel eine IP-Adresse eines alten System (ggf. im Zuge einer Migration) mit auf das neue System nehmen, bietet sich die Möglichkeit an, eine zusätzliche virtuelle IP-Adresse zum RAC hinzuzufügen.

 

Voraussetzungen

Um die in diesem Blogeintrag bezeigten Schritte durchführen zu können, sollte ein funktionstüchtiger Oracle RAC (ab Version 10g) bereits eingerichtet sein.

 

Meine Testumgebung verwendet die folgende Oracle Clusterware Version und läuft unter CentOS 5.6 x86_64:

[root@rac01 ~]# uname -a
Linux rac01.gohmann.de 2.6.18-274.7.1.el5 #1 SMP Thu Oct 20 16:21:01 EDT 2011 x86_64 x86_64 x86_64 GNU/Linux

[root@rac01 ~]# /u01/app/11.2.0/grid/bin/crsctl query crs softwareversion
Oracle Clusterware version on node [rac01] is [11.2.0.1.0]

 

Umsetzung

Im ersten Schritt sollte der virtuellen IP-Adressen ein Name zugewiesen werden. Über diesen Namen können Clients dann von außen auf die virtuelle IP Adresse zugreifen. Für Produktivumgebungen sollte der Name im DNS-Server registriert werden. 

 

Ich verwende an dieser Stelle die /etc/hosts Datei auf jeden der RAC Knoten zur Namensauflösung. Die virtuelle IP-Adresse nenne ich rac-app.

[root@rac01 ~]# vi /etc/hosts
# Virtual Application IP
192.168.200.239         rac-app.gohmann.de              rac-app

Anschließend kann die neue VIP als Clusterresource zum RAC hinzugefügt werden.

 

Im Folgenden werden zwei Möglichkeiten vorgestellt, die je nach eingesetzter Oracle Version verwendet werden müssen.

 

Vor Oracle 11g Release 2

Um eine virtuelle IP Adresse zur Clusterkonfiguration hinzuzufügen müssen die crs_* Werkzeuge verwendet werden.

 

Hinweis: Die hier vorgestellte Möglichkeit funktioniert auch noch unter Oracle 11g Release 2.

 

Im ersten Schritt wird eine neue Resource vom Typ Application angelegt. Der folgende Befehl muss mit dem Oracle Software Besitzer, in meinem Fall grid, ausgeführt werden. 

[grid@rac01 ~]$ $ORACLE_HOME/bin/crs_profile -create racappvip \
-t application \
-a $ORACLE_HOME/bin/usrvip \
-o oi=eth0,ov=192.168.200.239,on=255.255.255.0
Parameter Beschreibung
-create Legt eine neue Resource mit dem gewünschten Namen, in diesem Fall racappvip an.
-t Typ der Resource. Der Typ muss auf Application gesetzt sein.
-a Action Script für die Resource. Es wird das von Oracle mitgelieferte Action Script usrvip verwendet.
-o Über diesen Parameter können weitere Optionen gesetzt werden. Hier werden die VIP Einstellungen vorgenommen.
oi: Legt das zu verwendeden Netzwerkinterface fest. Es muss das gleiche Interface sein, das als Public Interface verwendet wird.
ov: IP-Adresse der VIP.
on: Subnetzmaske der VIP

 

Wurde der Befehl erfolgreich ausgeführt, erfolgt keine Ausgabe.

 

Im nächsten Schritt muss die neue Resource in der Clusterware registriert werden. Dafür wird crs_register als grid Benutzer ausgeführt.

[oracle@rac01 ~]$ $ORACLE_HOME/bin/crs_register racappvip

Die Zuweisung der IP Adressen erfolgt durch den root Benutzer während des Starts der Clusterware. Aus diesem Grund muss der Besitzer der neuen Resource auf root gesetzt werden. Der folgende Befehl muss als root ausgeführt werden.

[root@rac01 ~]# $ORACLE_HOME/bin/crs_setperm racappvip -o root

Damit auch der grid Benutzer, die VIP starten und stoppen kann, werden ihm Lese- und Ausführungsrechte auf die neue Resource gewährt. Der crs_setperm Befehl muss wiederum als root ausgeführt werden.

[root@rac01 ~]# $ORACLE_HOME/bin/crs_setperm racappvip -u user:grid:r-x

Zum Abschluss der Konfiguration kann die VIP gestartet werden.

[grid@rac01 ~]$ $ORACLE_HOME/bin/crs_start racappvip

Versuch, `racappvip` auf Member `rac02` zu starten
Starten von `racappvip` auf Member `rac02` erfolgreich.

Die VIP wurde erfolgreich gestartet. Dies kann man nun noch einmal mit dem folgendem crs_stat Befehl überprüfen.

[grid@rac01 ~]$ $ORACLE_HOME/bin/crs_stat racappvip -t

Name           Type           Target    State     Host
------------------------------------------------------------
racappvip      application    ONLINE    ONLINE    rac02

 

Oracle 11g Release 2

In Oracle 11g Release 2 hat Oracle das Anlegen einer zusätzlichen virtuellen IP Adresse stark vereinfacht. Es wird das neu eingeführte Werkezug appvipcfg verwendet. Im ersten Schritt wird die Resource angelegt. Dafür wird das appvipcfg Kommando als root ausgeführt.

[root@rac01 ~]# $GRID_HOME/bin/appvipcfg create -network=1 -ip=192.168.200.240 -vipname=racappvip -user=root

Die Ausgabe des Befehls sollte in etwa wie folgt aussehen.

Production Copyright 2007, 2008, Oracle.All rights reserved
2011-11-29 13:20:22: Creating Resource Type
2011-11-29 13:20:22: Executing cmd: /u01/app/11.2.0/grid/bin/crsctl add type app.appvip.type -basetype cluster_resource -file /u01/app/11.2.0/grid/crs/template/appvip.type
2011-11-29 13:20:23: Create the Resource
2011-11-29 13:20:23: Executing cmd: /u01/app/11.2.0/grid/bin/crsctl add resource racappvipNeu -type app.appvip.type -attr USR_ORA_VIP=192.168.200.240,START_DEPENDENCIES=hard(ora.net1.network) pullup(ora.net1.network),STOP_DEPENDENCIES=hard(ora.net1.network),ACL='owner:root:rwx,pgrp:root:r-x,other::r--,user:root:r-x'
Parameter Beschreibung
-network Netwerknummer die verwendet werden soll. Siehe Hinweis zur Ermittlung.
-ip IP Adresse der VIP.
-vipname Name der neuen VIP Resource

 

Hinweis: Um die richtige Netzwerknummer ausfindig zu machen, kann der folgende Befehl verwendet werden.

[root@rac01 ~]# $GRID_HOME/bin/crsctl stat res -p |grep -ie .network -ie subnet | grep -ie name -ie subnet
NAME=ora.net1.network
USR_ORA_SUBNET=192.168.200.0

Im nächsten Schritt muss der Besitzer der Grid Infrastructure Installation das Recht zum Starten und Stoppen der VIP gegeben werden. Der folgende Befehl muss als root ausgeführt werden.

[root@rac01 ~]# $GRID_HOME/bin/crs_setperm racappvip -u user:grid:r-x

Anschließend wird die VIP mit dem grid Benutzer gestartet.

[grid@rac01 ~]$ $GRID_HOME/bin/crs_start racappvip

Versuch, `racappvip` auf Member `rac02` zu starten
Starten von `racappvip` auf Member `rac02` erfolgreich.

Überprüfung der VIP Resource

[grid@rac01 ~]$ $GRID_HOME/bin/crsctl status resource racappvip -t

--------------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
racappvip
      1        ONLINE  ONLINE       rac02

Die neue VIP wurde erfolgreich gestartet.

 

Referenzen