Logo Oracle Deutschland   DBA Community  -  April 2014
Rolling OS Upgrade mit RAC
von Sebastian Solbach ORACLE Deutschland B.V. & Co.KG

Ein Real Application Cluster unterstützt ein sogenanntes rollierendes Upgrade. Konkret bedeutet das, dass ein Knoten nach dem anderen im Cluster gepatched werden kann. Dies betrifft vor allem Hardware Änderungen, wie Firmware Upgrades, Betriebssystem Upgrades, Grid Infrastruktur Patch und die sogenannten Patch Set Updates und OneOff Patches der Oracle Datenbank, die als Rolling Upgrade markiert sind. Ob ein Datenbank Patches für ein rollierendes Upgrade (rolling patch) in Frage kommt, findet man über den Befehl "$ORACLE_HOME/OPatch/opatch query -all". Details hierzu finden Sie auch im Community Tipp zum OPatch Utility.

Bei einfachen Betriebssystemupgrades (bzw. Betriebssystem Patches) ist dies dann auch meistens genau so möglich: Clusterware auf einem Knoten herunterfahren, dann das Betriebssystem patchen und im Anschluss die Clusterware auf dem Knoten wieder starten. Die gleiche Prozedur dann auf dem nächsten Knoten.

Wie muss man nun aber vorgehen, wenn sich das Betriebssystem nicht mit einem einfachen Patch Update upgraden lässt, sondern eigentlich eine Neuinstallation vorgenommen werden muss bzw. sollte, wie es z.B. beim Umstieg von Oracle Linux 5 auf Oracle Linux 6 der Fall ist? In diesem Fall ist die oben beschriebene "einfache" Prozedur so nicht möglich, da durch die Neuinstallation auch die Oracle Software betroffen ist und meist mit gelöscht wird, wenn die Systemplatte neu installiert wird. Selbst wenn die Software auf einer anderen Partition ausgelagert sein sollte, fehlen die wichtigen Ankerpunkte im Betriebssystem, wie das automatische Hochfahren der Clusterware in den Init. Verzeichnissen.

Da ein Cluster während des laufenden Betriebs erweitert werden kann, könnte der neu installierte Knoten einfach zum Cluster hinzugefügt werden. Allerdings würde dies unter Umständen bedeuten, dass sich der Hostname ändert. Zumindest hätte es aber Auswirkungen auf die Knotennummer bzw. die Instanz IDs auf dem neuen Rechner. Genau dies möchte aber vielleicht der Administrator gerade nicht, wenn er bis jetzt immer gewohnt war, auf RACKnoten 1 auch die Instanz 1 zu finden. Des weiteren gibt es durch die neue Betriebssystemversion einige Notwendigkeiten, die über das normale, in der Dokumentation beschriebene "addnode" hinausgehen.

Das Vorgehen beim Rolling OS Upgrades

Da während des Upgrades weiterhin Hochverfügbarkeit gewährleistet werden sollte, ist es empfehlenswert bei einem 2 Knoten Cluster temporär einen zusätzlichen Knoten hinzuzufügen, da ansonsten während des Upgrade nur noch ein Knoten verfügbar wäre. Als Beispiel dient hier ein Oracle RAC Cluster 11.2.0.3.2 auf Basis Oracle Linux 5.8 mit dem Ziel Oracle Linux 6.5 mit dem RHEL Kernel und ASMLib. Ein mögliches Vorgehen, wie ein solches Betriebssystem Upgrade von OL5 auf OL6 vorgenommen werden kann, gliedert sich in folgende einzelne Schritte.

Anmerkung: Grundsätzlich unterstützt Oracle beim RAC Cluster, dass die Knoten für 24 Stunden unterschiedliche Betriebssytemstände haben. Siehe hierzu auch: Oracle Clusterware (CRS or GI) Rolling Upgrades (Doc ID 338706.1)

In diesem Beispiel heißen die bestehenden Knoten orac-s1 und orac-s2, der neue temporäre Knoten orac-s3.

Optional: Patchen des Clusters

Bevor das Betriebssystem Upgrade in Angriff genommen wird, sollte geprüft werden, ob die Voraussetzungen der Oracle Software für das neue OS auch gegeben sind. Ein wichtiger Bestandteil ist hier z.B. die Verwendung von ASMLIB und ASM Cluster Filesystem, weil beide Funktionen kernelabhängige Treiber beinhalten. Für ASMLIB muss lediglich die entsprechende Software vorher auf den OL6 Rechner installiert werden und die Funktion geprüft werden. Der Zugriff auf den gesharten Storage sollte selbstverständlich vorhanden sein, da dies die Voraussetzung dafü ist, einen neuen Knoten zum Cluster hinzuzufügen. Auch hier ist der temporäre Knoten von Vorteil, da solche Tatsachen unabhängig vom produktiven Cluster bereits festgestellt werden können.

Im Falle von ACFS gestaltet sich dies aber anders, da ACFS erst mit neueren Patchleveln Oracle Linux 6 unterstützt. Die Informationen findet man in MOS Note 1369107.1 "ACFS Support On OS Platforms (Certification Matrix)." Daher sollte in diesem Fall der Cluster erst auf den aktuellen PSU (11.2.0.3.9) gepatched werden.

In unserem Testfall wurde dies auf den bestehenden Knoten, inklusive Datenbank mit einem "oaptch auto" als Root durchgeführt, wie im Readme des PSUs beschrieben. Auch dies kann selbstverständlich Rolling passieren und sollte unabhängig vom eigentlichen OS Upgrade betrachtet und durchgeführt werden.

[root@orac-s1 11_2_0_3_9]# $ORACLE_HOME/OPatch/opatch auto /stage/11_2_0_3_9 -ocmrf /stage/rsp/ocm.rsp

Hinzufügen des Temporären Knoten

Zur Vorbereitung des neuen OL6 Knoten wurde das neue oracle-rdbms-server-11gR2-preinstall RPM Packet verwendet (Nachfolger von oracle-validated), welches auf der OL6 CD enthalten ist und über den Linux Befehl "yum" installiert werden kann. Ebenfalls wurde ASMLIB mit denselben Berechtigungen konfiguriert, wie es auch auf den bestehenden Knoten der Fall ist. Über "scandisks -s" bzw. "listdisks" wurde dann geprüft, ob der neue Knoten auch die entsprechenden ASM Platten findet:

[root@orac-s3 ~]# yum install oracle-rdbms-server-11gR2-preinstall
[root@orac-s3 ~]# /etc/init.d/oracleasm configure
Configuring the Oracle ASM library driver.
[root@orac-s3 ~]# /etc/init.d/oracleasm scandisks -s
Scanning the system for Oracle ASMLib disks:               [  OK  ]
[root@orac-s3 ~]# /etc/init.d/oracleasm listdisks
ASM_DISK_00_01
ASM_DISK_00_02
ASM_DISK_00_03
ASM_DISK_00_04
ASM_DISK_V1_00
ASM_DISK_V2_00
Wichtig ist hierbei der Aufruf von "scandisk" mit dem -s Parameter, da hierbei die Partitionstabelle nicht neu ausgelesen werden muss. Das Auslesen der Partitionstabelle führte bei älteren ASMLIB Versionen und älteren Linux Kerneln zu einer Unterbrechung bei den bestehenden Clusterknoten.

Sollte wie in unserem Fall die dritte Voting Disks auf NFS liegen, so sollte dringend der NFS Mount geprüft werden. In unserem Fall fehlte der Eintrag der Voting Disk in der /etc/fstab, was im Nachhinein beim Ausführen des root.sh auf dem neuen Knoten zu Problemen führte.

Das eigentliche Hinzufügen eines neuen Knotens ist in der Oracle Dokumentation gut beschrieben. Allerdings unterscheidet es sich vom Hinzufügen eines Knotens mit derselben Betriebssystem Version darin, dass die Oracle Software neu "gelinked" werden sollte, um die aktuellen Libraries des neuen Betriebssystem zu berücksichtigen. Es gliedert sich demnach in folgende Schritte:
  • Aufsetzen von SSH
  • Prüfen mit CLUVFY
  • Addnode und root.sh der GI
  • Relink der GI
  • Addnode des DB Homes
  • Relink des DB Homes
  • Instanz und Service Management
SSH Setup:
[oracle@orac-s1 sysconfig]$ /opt/grid/11.2.0.3/deinstall/sshUserSetup.sh -user oracle 
-hosts "orac-s1 orac-s2 orac-s3" -advanced -noPromptPassphrase
Prüfen mit CLUVFY:
[oracle@orac-s1 sysconfig]$ cluvfy stage -pre nodeadd -n orac-s3 -verbose
Performing pre-checks for node addition

Pre-check for node addition was unsuccessful on all the nodes.
Grundsätzlich sollten alle Fehler von CLUVFY genau analysiert werden. Fehlende Packages sollten nachinstalliert werden. Bei uns fehlte trotz Installation von oracle-rdbms-server-11gR2-preinstall das elfutils-devel Paket. Ist man sich 100% sicher, dass alles stimmt und CLUVFY findet trotzdem noch einen Fehler, muss man für den folgenden Schritt die Umgebungsvariable "IGNORE_PREADDNODE_CHECKS" auf "Y" setzen.

Addnode und root.sh der Grid Infrastruktur:
[oracle@orac-s1 bin]$ cd $ORACLE_HOME/oui/bin
[oracle@orac-s1 bin]$ export IGNORE_PREADDNODE_CHECKS=Y
[oracle@orac-s1 bin]$ ./addNode.sh "CLUSTER_NEW_NODES={orac-s3}" "CLUSTER_NEW_VIRTUAL_HOSTNAMES={oracv-s3}"
Starting Oracle Universal Installer...
..
The Cluster Node Addition of /opt/grid/11.2.0.3 was successful.
Please check '/tmp/silentInstall.log' for more details.
Wichtig: Da die Schritte als Oracle User ausgeführt werden können auch nur Dateien kopiert werden die Oracle gehören. Dies ist im Normalfall auch kein Problem, da alle Clusterware Binaries, die Root gehören, in der Exklusionsliste enthalten sind und auf dem neuen Knoten via. root.sh später angelegt werden. Allerdings sollte man selber keine eigenen Dateien als der Benutzer "root" im Oracle Home abgelegt haben, da dies dazu führt, dass der Kopiervorgang abbricht. So geschehen bei uns, da ein altes OPATCH Verzeichnis als root gesichert wurde. In diesem Fall muss das kopierte Verzeichnis auf dem Zielknoten gelöscht werden und der AddNode Befehl nochmals durchgeführt werden.

Ausführen von orainstroot.sh und root.sh auf dem neuen Knoten:
[root@orac-s3 home]# /opt/oracle/oraInventory/orainstRoot.sh
[root@orac-s3 home]# cd /opt/grid/11.2.0.3
[root@orac-s3 11.2.0.3]# ./root.sh
Performing root user operation for Oracle 11g
..
Configure Oracle Grid Infrastructure for a Cluster ... succeeded
Vor dem Relink kann der neue Clusterknoten schon geprüft werden.
[oracle@orac-s1 bin]$ cluvfy stage -post nodeadd -n node3
[oracle@orac-s1 bin]$ crsctl stat res -t
Dabei fällt auf, dass ACFS noch nicht automatisch gemounted wird. Dies muss separat passieren:
[root@orac-s3 home]# srvctl start filesystem -d /dev/asm/acfs-80
[root@orac-s3 home]# crsctl stat res -t
Relinken des neuen Clusterware Homes für das neue Betriebssystem, wie auch in der MOS Note 1559762.1 beschrieben: How to Manage Oracle Grid Infrastructure During Operating System Upgrades (Doc ID 1559762.1)
[root@orac-s3 home]# cd Grid_home/crs/install
[root@orac-s3 install]# ./rootcrs.pl -unlock

Successfully unlock /opt/grid/11.2.0.3

[root@orac-s3 bin]# su - oracle
[oracle@orac-s3 ~]$ . oraenv
ORACLE_SID = [oracle] ? +ASM3
The Oracle base has been set to /opt/oracle/oracle_base
[oracle@orac-s3 ~]$ cd $ORACLE_HOME/bin
[oracle@orac-s3 bin]$ cd
[oracle@orac-s3 ~]$ $ORACLE_HOME/bin/relink
writing relink log to: /opt/grid/11.2.0.3/install/relink.log

[oracle@orac-s3 ~]$ exit

[root@orac-s3 bin]# cd Grid_home/crs/install
[root@orac-s3 install]#  perl rootcrs.pl -patch
Der Unlock geschieht als Root User, während das erneute Linken vom GI Owner durchgeführt wird (in diesem Falle der Benutzer Oracle).

Hinzufügen vom neuen Datenbank Home (RAC Administrator Guide):
[oracle@orac-s1 ~]$ cd $ORACLE_HOME/oui/bin
[oracle@orac-s1 bin]$ ./addNode.sh -silent "CLUSTER_NEW_NODES={orac-s3}"

Performing pre-checks for node addition

Pre-check for node addition was successful.
Starting Oracle Universal Installer...

The Cluster Node Addition of /opt/oracle/oracle_base/product/11.2.0.3 was successful.
Please check '/tmp/silentInstall.log' for more details.
Nach dem AddNode sollte das root.sh auf dem Zielknoten ausgeführt werden, um die Berechtigungen der Oracle Executables richtig zu setzen. Da dies aber durch einen Relink verändert wird, kann dieser Schritt hier übersprungen werden und erst nach dem Relink ausgeführt werden.

Relink des Oracle DB Homes: 11gR2 Relink New Feature (Doc ID 883299.1)
[oracle@orac-s3 ~]$ cd $ORACLE_HOME/bin
[oracle@orac-s3 bin] ./relink all 
Das Relink setzt allerdings einige Oracle Executables wieder auf oracle:oinstall. Daher muss nach dem Relink nochmals das root.sh aus dem Datenbank Home ausgeführt werden. Wichtig ist, dass der Relink von einigen Dateien ein Backup anlegt. Dazu gehört, dass die Dateien nmb, nmo und nmhs aus dem bin Verzeichnis in nmb0, nmo0 und nmhs0 umbenannt werden. Dies kann später aber zu Problemen führen, da diese, falls das Root.sh Skript schon ausgeführt wurde, root:oinstall gehören. Ein späterer Addnode aus diesem Home heraus bricht dann aus denselben Gründen, wie oben beim GI Home beschrieben, wegen Dateien, die root gehören, ab. Daher empfiehlt es sich, diese Sicherungsdateien mit dem Befehl "chown" wieder dem Benutzer Oracle zuzuweisen.

Instanz und Service Management: Bei einer Policy Managed Datenbank geschieht die Erweiterung der Datenbank automatisch, sobald das Oracle DB Home auf dem neuen Knoten erweitert wurde. Im Falle einer Administrator Managed Datenbank muss nun am einfachsten über den DBCA das Instanz Management aufgerufen werden, um die Datenbank Instanz(en) des RAC Clusters auf den neuen Knoten zu erweitern:



Services werden einfach über srvctl auf den neuen Knoten erweitert:
[oracle@orac-s3 bin]$ srvctl modify service -d bazi -s s_bazi -a "bazi2,bazi3" -i "bazi1" -n
Nun hat man einen lauffähigen 3 Knoten Cluster mit 2 Knoten auf OL5 und einem Knoten auf OL6.

Entfernen von Knoten 1 aus dem Cluster

Man entfernt einen alten Knoten aus dem Cluster (um diesen mit dem neuen Betriebssystem neu zu installieren), in fast umgekehrter Reihenfolge

  • Services und Instance Management
  • "Löschen" der DB Software
  • Löschen der Grid Infrastruktur
Wobei die Software auf dem alten Knoten nicht wirklich gelöscht werden, sondern nur die Informationen aus den Oracle Inventories der anderen Knoten bzw. der Knoten aus der Cluster Registry ausgetragen wird.

Instanz und Service Management: Die Services werden über den Befehl "SRVCTL" verlagert, damit der Knoten keine Last mehr erhält.
$ srvctl relocate service -d bazi -s s_bazi -i bazi1 -t bazi3 (-f)
$ srvctl modify service -d bazi -s s_bazi -a "bazi2" -i "bazi3" -n
Idealerweise wird nun solange gewartet, bis keine Sessions mehr auf der Datenbankinstanz angemeldet sind, bevor man mit dem DBCA das Instanz-Management aufruft und die RAC Instanz(en) auf dem Rechner entfernt.



Löschen des DB Homes: Wie schon erwähnt wird lediglich der Verweis auf das Datenbank Home auf diesem Rechner ausgetragen. Ein tatsächliches Löschen ist wegen der Neuinstallation nicht notwendig. Dies geschieht mit dem Oracle Universal Installer mit der "updateNodeList" Funktion auf einem der verbleibenden Knoten. Das Inventory des anderen verbleibenden Knotens wird automatisch angepasst.
[oracle@orac-s3 bin]$ cd $ORACLE_HOME/oui/bin
[oracle@orac-s3 bin]$ ./runInstaller -updateNodeList 
ORACLE_HOME=/opt/oracle/oracle_base/product/11.2.0.3 "CLUSTER_NODES={orac-s2, orac-s3}"
Starting Oracle Universal Installer...
...
'UpdateNodeList' was successful.
Beim Löschen der Grid Infrastruktur wäre ebenfalls nur ein Update des Inventories und die Deregistrierung des Knotens von der OCR notwendig, um die Knotennummer des Clusters freizugeben. Damit aber der zu entfernende Knoten nicht durch einen unvorhergesehenen Reboot wieder versucht, dem Cluster beizutreten, empfehle ich, den Clusterstack auf dem Knoten zu dekonfigurieren. Dies nimmt auch nur wenige Minuten in Anspruch.

Damit der Knoten den Cluster sauber verlassen kann, darf dieser nicht gepinned sein - dies ist häufig dann der Fall, wenn der Cluster ältere 10g Datenbanken beherbergt hatte. Das wird mit olsnodes geprüft.
[root@orac-s1 ~]# olsnodes -s -t
orac-s1 Active  Unpinned
orac-s2 Active  Unpinned
orac-s3 Active  Unpinned
Ein Unpin würde mit dem Befehl "crsctl unpin css" durchgeführt werden. Nun kann der Clusterstack mit Hilfe des "rootcrs.pl" Perl Skriptes auf dem Knoten deaktiviert werden.
[root@orac-s1 ~]# cd $ORACLE_HOME/crs/install
[root@orac-s1 install]# ./rootcrs.pl -deconfig -force
Using configuration parameter file: ./crsconfig_params

Successfully deconfigured Oracle clusterware stack on this node
Trotz Dekonfiguration ist der Knoten immer noch Bestandteil des Clusters, wie der Befehl olsnodes auf den verbleibenden Knoten zeigt.
[root@orac-s3 ~]# olsnodes -t -s
orac-s1 Inactive  Unpinned
orac-s2 Active    Unpinned
orac-s3 Active    Unpinned
Daher muss nun (damit der Knotenlease wieder an den Cluster zurückgegeben wird) von einem verbleibenden Knoten mit dem Befehl "crsctl delete node" der zu löschende Knoten entfernt werden.
[root@orac-s3 11.2.0.3]# crsctl delete node -n orac-s1
CRS-4661: Node orac-s1 successfully deleted.

[root@orac-s3 11.2.0.3]#  olsnodes -t -s
orac-s2 Active  Unpinned
orac-s3 Active  Unpinned
Vergisst man dies, würde der Knoten nach der Neuinstallation und dem Neu-Hinzufügen die Knoten Nummer 4 bekommen!

Als letzes muss das Inventory der Grid Infrastruktur auf den verbleibenden Knoten angepasst werden. Auch dies geschieht wieder über den OUI, diesmal aber mit dem Zusatz "CRS=TRUE".
[oracle@orac-s3 bin]$ ./runInstaller -updateNodeList ORACLE_HOME=/opt/grid/11.2.0.3 
"CLUSTER_NODES={orac-s2, orac-s3}" CRS=TRUE -silent
Starting Oracle Universal Installer...
..
'UpdateNodeList' was successful.
Zur Sicherheit könnte nun noch mit dem Befehl "cluvfy stage -post nodedel -n orac-s1 -verbose" geprüft werden, ob der Knoten wirklich entfernt wurde.

Hinzufügen von Knoten 1 zum Cluster

Nun kann der Knoten neu mit Oracle Linux 6 installiert werden. Sobald der Knoten mit dem alten Hostnamen unter OL6 zur Verfügung steht, kann der Knoten dem Cluster wieder beitreten. Dabei ist wichtig, dass diesmal die Erweiterung (also die Befehle "addnode") vom neuen temporären Knoten (orac-s3) durchgeführt werden, da man hierduch die Relink Schritte überspringen kann. Damit besteht das Hinzufügen des neuen Clusterknotens (neben der Vorbereitung von ASMLIB und preinstall Paket) nur noch aus folgenden Schritten:

  • SSH Setup
  • Addnode GI HOME
  • Addnode DB Home
  • Instanz und Services erweitern
Da diese Schritte gleich sind, wie das Hinzufügen oben schon beschrieben, hier nur die Befehle in Kurzform:

SSH Setup:
[oracle@orac-s3]$ $ORACLE_HOME/oui/prov/resources/scripts/sshUserSetup.sh -user oracle 
-hosts "orac-s1 orac-s2 orac-s3" -advanced -noPromptPassphrase
Addnode GI:
[oracle@orac-s3]$ cluvfy stage -pre nodeadd -n orac-s1

[oracle@orac-s3]$ cd $ORACLE_HOME/oui/bin
[oracle@orac-s3]$ export IGNORE_PREADDNODE_CHECKS=Y
[oracle@orac-s3]$ ./addNode.sh "CLUSTER_NEW_NODES={orac-s1}" "CLUSTER_NEW_VIRTUAL_HOSTNAMES={oracv-s1}"


[root@orac-s1]# /opt/oracle/oraInventory/orainstRoot.sh
[root@orac-s1]# /opt/grid/11.2.0.3/root.sh

[root@orac-s1]# srvctl start filesystem -d /dev/asm/acfs-80
[root@orac-s1]# crsctl stat res -t
Addnode DB:
[oracle@oracl-s3]$ $ ./addNode.sh -silent "CLUSTER_NEW_NODES={orac-s1}"

[root@orac-s1]# /opt/oracle/oracle_base/product/11.2.0.3/root.sh
Instanz und Service Management:
[oracle@oracl-s3]$ dbca
[oracle@oracl-s3]$ srvctl modify service -d bazi -s s_bazi -a "bazi3" -i "bazi1" -n
[oracle@oracl-s3]$ srvctl relocate service -d bazi -s s_bazi -i bazi3 -t bazi1

Entfernen und Hinzufügen von Knoten 2

Fazit

Nützliche Links und Referenzen

  • Mehr als nur Patching - Das Oracle Patch Utility
  • Oracle Clusterware (CRS or GI) Rolling Upgrades (Doc ID 338706.1)
  • Oracle Clusterware Administration and Deployment Guide: 4 Adding and Deleting Cluster Nodes
  • ACFS Support On OS Platforms (Certification Matrix) (Doc ID 1369107.1)
  • Oracle RDBMS Server 11gR2 Pre-Install RPM for Oracle Linux 6 has been released
  • How to Manage Oracle Grid Infrastructure During Operating System Upgrades (Doc ID 1559762.1)
  • Oracle Real Application Clusters Administration and Deployment Guide: 10 Adding and Deleting Oracle RAC from Nodes on Linux and UNIX Systems
  • Oracle 11gR2 Relink New Feature (Doc ID 883299.1)
  • Zurück zur Community-Seite