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.
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.
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.
[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_00Wichtig 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:
[oracle@orac-s1 sysconfig]$ /opt/grid/11.2.0.3/deinstall/sshUserSetup.sh -user oracle -hosts "orac-s1 orac-s2 orac-s3" -advanced -noPromptPassphrasePrü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 ... succeededVor 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 -tDabei 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 -tRelinken 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 -patchDer 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 allDas 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" -nNun 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
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" -nIdealerweise 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 UnpinnedEin 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 nodeTrotz 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 UnpinnedDaher 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 UnpinnedVergisst 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: [oracle@orac-s3]$ $ORACLE_HOME/oui/prov/resources/scripts/sshUserSetup.sh -user oracle -hosts "orac-s1 orac-s2 orac-s3" -advanced -noPromptPassphraseAddnode 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 -tAddnode 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.shInstanz 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 Das gleiche Vorgehen wie bei Knoten 1 nun auch für Knoten 2: Erst entfernen und dann neu hinzufügen. Danach sind alle Knoten auf OL6, und der temporäre Knoten kann nun entfernt werden. Fazit Letztendlich sind alle Bestandteile, die für ein Rolling OS Upgrade benötigt werden, in der Dokumentation enthalten. Allerdings macht sich eine gründliche Vorbereitung bezahlt, insbesondere bestimmte Vorarbeiten, wie das Prüfen auf falsche Berechtigungen oder das Prüfen auf neue benötigte Versionen. Hierbei kann insbesondere auch die Hinzunahme eines temporären Knotens hilfreich sein, da dadurch viele Dinge in Erscheinung treten, bevor sie Auswirkung auf die Produktion oder das laufende Cluster haben. Nützliche Links und Referenzen
|