Upgrade i patchowanie systemu Solaris 10 i Solaris Cluster 3.x
Na dziś dzień, najnowsza wersja Solarisa 10 to Update 11 (1/13), natomiast klastra dla Solarisa 10 to 3.3u2.
Cluster 3.2 jest ciągle wspierany przez Oracle, ale patche nie są już wypuszczane. Update 11 dla Solarisa 10 jest prawdopodobnie ostatnim dla 10-ki i posiada trochę usprawnień, które nie są dostępne jeśli tylko patchujesz system.
Zanim zaczniesz z upgradem dobrze jest sprawdzić i naprawić w miarę możliwości wszystkie problemy z obecnym systemem i środowiskiem.
Sprawdź status klastra, quorum device, działające usługi, zpoole, metadevicey, metasety, komponenty sprzętowe itp.
Zaplanuj okno serwisowe, kiedy można będzie wyłączyć serwery, zrób backup plików i konfiguracji.
Na początek sprawdźmy jaka jest wersja systemu oraz klastra.
$ cat /etc/release Oracle Solaris 10 9/10 s10s_u9wos_14a SPARC Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. Assembled 11 August 2010 $ cat /etc/cluster/release Sun Cluster 3.2u1 for Solaris 10 sparc Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
Jeśli masz najnowszą wersję Solarisa lub klastra, to po prostu pomiń tę część artykułu, która się do tego odnosi.
Przygotuj obraz ISO z Solarisem 10 u11, klaster patchy Recommended, Live Upgrade patch, pakiet Cluster 3.3u2 oraz najnowszy Core patch dla klastra. Wszystko to można ściągnąć ze stron Oracle po zalogowaniu do Oracle Support. Jeśli nie posiadasz tam konta, można je utworzyć. O ile mi wiadomo nie potrzeba kontraktu aby ściągać oprogramowanie i patche.
Skopiuj powyższe opgrogramowanie i rozpakuj na dysku lokalnym serwera. Nie używaj współdzielonego katalogu z NFS, ponieważ napotkasz problemy podczas instalacji patchy. Obraz ISO zostaw tak jak jest, będzie zamontowany jako lofs.
A propos lofs: jeśli posiadasz automountera (usługa autofs) oraz zasób typu SUNW.nfs, istnieje duże prawdopodobieństwo, że lofs będzie wyłączony w /etc/system, można to łatwo sprawdzić:
# grep lofs /etc/system exclude: lofs
Jeśli tak jest, to zanim zaczniesz upgrade Solarisa, będzie potrzeba restartu serwera po usunięciu lub wykomentowaniu tej linii w /etc/system. Niestety nie ma innego sposobu aby to włączyć. Ale jeśli system ma najnowsze wydanie (u11), to nie ma potrzeby.
Zacznijmy z fazą przygotowania. Użyję katalogu /var/tmp/patching jako źródłowy dla oprogramowania oraz /mnt dla montowania ISO i później ABE. Do /var/tmp/patching/prereq wgrałem patche, które dobrze jest zainstalować przed utworzeniem Alternate Boot Environment i patchowaniem. Oto moja lista (dla architektury SPARC):
119254-92
121428-15
121430-93
140914-02
142911-01
142933-05
146578-06
148027-06
# mkdir /var/tmp/patching && cd /var/tmp/patching # unzip -q 10_Recommended.zip && rm 10_Recommended.zip # cd prereq # for a in `ls *.zip`; do unzip -q $a && rm $a; done # for a in `ls *`; do patchadd $a; done # cd ..
Nie należy się przejmować jeśli jeden lub więcej patchy się nie zainstaluje, najważniejszy z powyższych to 121430-93, który jest patchem na Live Upgrade. Bez tego patcha szanse na trafienie buga podczas tworzenia ABE znacząco rosną. Dla architektury x86 ten patch posiada numer zwiększony o 1: 121431-93, a jest już chyba nawet nowszy.
Teraz nadszedł czas aby zainstalować patche Prerez z klastra patchy Recommended:
# cd /var/tmp/patching/10_Recommended # ./installpatchset --apply-prereq --s10patchset Recommended OS Patchset Solaris 10 SPARC (2015.12.24) Application of patches started : 2016.02.19 07:23:42 Applying 120900-04 ( 1 of 10) ... skipped Applying 121133-02 ( 2 of 10) ... skipped Applying 119254-92 ( 3 of 10) ... skipped Applying 119317-01 ( 4 of 10) ... skipped Applying 121296-01 ( 5 of 10) ... skipped Applying 138215-02 ( 6 of 10) ... success Applying 148336-02 ( 7 of 10) ... success Applying 146054-07 ( 8 of 10) ... skipped Applying 142251-02 ( 9 of 10) ... skipped Applying 125555-16 (10 of 10) ... success Application of patches finished : 2016.02.19 07:25:41 Following patches were applied : 138215-02 148336-02 125555-16 Following patches were skipped : Patches already applied 120900-04 119254-92 121296-01 146054-07 142251-02 121133-02 119317-01 Installation of prerequisite patches complete. Install log files written : /var/sadm/install_data/s10s_rec_patchset_short_2016.02.19_07.23.42.log /var/sadm/install_data/s10s_rec_patchset_verbose_2016.02.19_07.23.42.log
To jest zwykle około 10 patchy, które muszą być zainstalowane na działającym systemie. Trzeba spatchować system przed patchowaniem systemu 🙂
Teraz można już utworzyć Alternate Boot Environment (ABE). Jeśli masz root filesystem na ZFSie, to po prostu zrób:
# lucreate -c CURRENT_NAME -n NEW_BE_NAME
i to wszystko. Zostaną utworzone snapshoty ZFS oraz nowe filesystemy dla ABE. Można to sprawdzić komendami 'zfs list’ i 'lustatus’.
W przypadku systemu plików UFS oraz Solaris Volume Managera, w którym najpewniej utworzone są mirrory, trzeba będzie taki mirror podzielić i utworzyć ABE na odłączonym metaurządzeniu. Ale najpierw trzeba wyrzucić na chwilę opcję 'global’ z /etc/vfstab dla /global/.devices/node@X, bo inaczej lucreate nie rozpozna tego i nie przeniesie do ABE. Utwórz więc kopię pliku, uruchom ulubiony edytor i zamień 'global’ na ’-’ jak poniżej:
#/dev/md/dsk/d1160 /dev/md/rdsk/d1160 /global/.devices/node@1 ufs 2 no global /dev/md/dsk/d1160 /dev/md/rdsk/d1160 /global/.devices/node@1 ufs 2 no -
To samo oczywiście na pozostałych nodach klastra.
Załóżmy że metaurządzenia i punkty montowania wyglądają jak poniżej:
d1160 m 516MB d1161 d1162 d1161 s 516MB c0t2d0s6 d1162 s 516MB c0t3d0s6 d1130 m 19GB d1131 d1132 d1131 s 19GB c0t2d0s3 d1132 s 19GB c0t3d0s3 d1100 m 43GB d1101 d1102 d1101 s 43GB c0t2d0s0 d1102 s 43GB c0t3d0s0 d1110 m 4.0GB d1111 d1112 d1111 s 4.0GB c0t2d0s1 d1112 s 4.0GB c0t3d0s1
/dev/md/dsk/d1110 - - swap - no - /dev/md/dsk/d1100 /dev/md/rdsk/d1100 / ufs 1 no - /dev/md/dsk/d1130 /dev/md/rdsk/d1130 /export ufs 2 yes - #/dev/md/dsk/d160 /dev/md/rdsk/d160 /globaldevices ufs 2 yes - /devices - /devices devfs - no - ctfs - /system/contract ctfs - no - objfs - /system/object objfs - no - swap - /tmp tmpfs - yes - /dev/md/dsk/d1160 /dev/md/rdsk/d1160 /global/.devices/node@1 ufs 2 no global
Podczas tworzenia ABE użyję trussa aby zebrać dane jeśli coś poszłoby nie tak i trzeba by było debuggować:
truss -o lucreate.out -elaf \ lucreate -c s10 -n s10u11_20160219 \ -m /:/dev/md/dsk/d100:ufs,mirror -m /:/dev/md/dsk/d1102:detach,attach,preserve \ -m /export:/dev/md/dsk/d130:ufs,mirror -m /export:/dev/md/dsk/d1132:detach,attach,preserve \ -m -:/dev/md/dsk/d110:swap,mirror -m -:/dev/md/dsk/d1112:detach,attach,preserve \ -m /global/.devices/node@1:/dev/md/dsk/d160:ufs,mirror \ -m /global/.devices/node@1:/dev/md/dsk/d1162:detach,attach,preserve
Jest oczywiście inna szkoła, która mówi, że należy manualnie rozbić mirror i na tym zrobić dopiero lucreate, ale powyższy scenariusz jest o wiele szybszy, gdyż przy automatycznym rozłączeniu mirrorów lucreate nie musi tracić czasu na kopiowanie danych. Proces tworzenia ABE przebiega następująco:
Determining types of file systems supported Validating file system requests Preparing logical storage devices Preparing physical storage devices Configuring physical storage devices Configuring logical storage devices Analyzing system configuration. Updating boot environment description database on all BEs. Updating system configuration files. The device </dev/dsk/c0t3d0s0> is not a root device for any boot environment; cannot get BE ID. Creating configuration for boot environment <s10u11_20160219>. Source boot environment is <s10>. Creating file systems on boot environment <s10u11_20160219>. Creating <ufs> file system for </> in zone <global> on </dev/md/dsk/d100>. Creating <ufs> file system for </export> in zone <global> on </dev/md/dsk/d130>. Creating <ufs> file system for </global/.devices/node@1> in zone <global> on </dev/md/dsk/d160>. Mounting file systems for boot environment <s10u11_20160219>. Calculating required sizes of file systems for boot environment <s10u11_20160219>. Populating file systems on boot environment <s10u11_20160219>. Analyzing Primary boot environment. Processing alternate boot environment. Mounting ABE <s10u11_20160219>. Cloning mountpoint directories. Generating list of files to be copied to ABE. Copying data from PBE <s10> to ABE <s10u11_20160219>. 100% of filenames transferred Finalizing ABE. Unmounting ABE <s10u11_20160219>. Reverting state of zones in PBE <S10U11>. Making boot environment <s10u11_20160219> bootable. Setting root slice to Solaris Volume Manager metadevice </dev/md/dsk/d100>. Population of boot environment <s10u11_20160219> successful. Creation of boot environment <s10u11_20160219> successful.
Jeśli napotkasz jakieś błędy przy tworzeniu ABE, to w pierwszej kolejności należy sprawdzić: czy LU patch (121430-XX lub 121431-XX dla x86) jest zainstalowany, czy nazwy metadeviceów są dobre, czy nie zrobiło się gdzieś literówki przy lucreate itp. Jeśli wszystko jest jak trzeba, a mimo to nie poszło, to należy przeanalizować output lub założyć SR w Oracle Support i wysłać do analizy.
Jeśli zrobiłeś literówkę i mirrory zostały już podzielone, nie przejmuj się, bedziesz mial okazję zrobić to wg 'starej szkoły’, jak poniżej:
truss -o lucreate1.out -elaf \ lucreate -c s10 -n s10u11_20160219 \ -m /:/dev/md/dsk/d100:ufs \ -m /export:/dev/md/dsk/d130:ufs \ -m -:/dev/md/dsk/d110:swap \ -m /global/.devices/node@1:/dev/md/dsk/d160
Niestety trzeba będzie trochę poczekać zanim lucreate skopiuje dane do nowego BE. Po zakończeniu sprawdź status:
# lustatus Boot Environment Is Active Active Can Copy Name Complete Now On Reboot Delete Status -------------------------- -------- ------ --------- ------ ---------- s10 yes yes yes no - s10u11_20160219 yes no no yes -
Najlepiej też od razu po utworzeniu ABE przywrócić opcję 'global’ w /etc/vfstab.
Teraz przyszedł czas na upgrade systemu zainstalowanego w ABE, jeśli oczywiście jest starszy niż u11 (1/13). Zamontuj obraz ISO Solarisa 10 u11 i zrób luupgrade:
# lofiadm -a /var/tmp/patching/sol-10-u11-ga-sparc-dvd.iso /dev/lofi/1 # mount -F hsfs /dev/lofi/1 /mnt # echo "autoreg=disable" > /var/tmp/patching/no-autoreg # luupgrade -u -s /mnt -k /var/tmp/patching/no-autoreg -n s10u11_20160115
To zajmie chwilę, więc można iść zrobić kawę 🙂
Jeśli napotkasz problemy z luupgrade w stylu: 'ERROR: Cannot mount miniroot at …’, to przewiń artykuł do góry i przeczytaj jeszcze raz o 'lofs’, będzie potrzebny reboot zanim pójdziesz dalej.
Po pomyślnej aktualizacji nadchodzi czas na patchowanie ABE:
# umount /mnt # lofiadm -d /dev/lofi/1 # cd /var/tmp/patching/10_Recommended # ./installpatchset -B s10u11_20160219 --s10patchset Recommended OS Patchset Solaris 10 SPARC (2015.12.24) Application of patches started : 2016.02.19 10:55:21
To także zajmie trochę czasu, ale w końcu powinno się pokazać:
Application of patches finished : 2016.02.19 14:09:45 Following patches were applied : 118666-86 125731-12 148031-05 149175-09 150537-01 118667-86 126206-11 148049-04 149279-04 150539-01 ... Installation of patch set to alternate boot environment complete. Please remember to activate boot environment s10u11_20160219 with luactivate(1M) before rebooting. Install log files written : /.alt.s10u11_20160219/var/sadm/install_data/s10s_rec_patchset_short_2016.02.19_10.55.21.log /.alt.s10u11_20160219/var/sadm/install_data/s10s_rec_patchset_verbose_2016.02.19_10.55.21.log
Jeśli nie masz zainstalowanego klastra lub masz najnowszą jego wersję wraz z patchami, to możesz po prostu aktywować nowe BE przy pomocy luactivate i zrestartować system do nowego wydania. NIE UŻYWAJ poleceń 'reboot’ ani 'halt’, należy użyć komendy 'init’.
Jeśli chcesz zaktualizować klaster, pozwolę sobie kontynuować. Zamontuj ABE i zaktualizuj Framework:
# lumount s10u11_20160219 /mnt # cd /var/tmp/patching/SC-3.3/ # cd Solaris_sparc/Product/sun_cluster/Solaris_10/Tools # ./scinstall -u update -R /mnt Starting upgrade of Oracle Solaris Cluster framework software Saving current Oracle Solaris Cluster configuration Do not boot this node into cluster mode until upgrade is complete. Renamed "/mnt/etc/cluster/ccr" to "/mnt/etc/cluster/ccr.upgrade". ** Removing Oracle Solaris Cluster framework packages ** ... ** Installing SunCluster 3.3 framework ** SUNWscu.....done SUNWsccomu..done ... Restored /mnt/etc/cluster/ccr.upgrade to /mnt/etc/cluster/ccr Completed Oracle Solaris Cluster framework upgrade Updating nsswitch.conf ... done Log file - /mnt/var/cluster/logs/install/scinstall.upgrade.log.20131
Później należy zaktualizować Agenty:
# cd /mnt/usr/cluster/bin # ./scinstall -u update -R /mnt -s all -d /var/tmp/patching/SC-3.3/Solaris_sparc/Product/sun_cluster_agents Starting upgrade of Oracle Solaris Cluster data services agents List of upgradable data services agents: (*) indicates selected for upgrade. * nfs ** Removing HA-NFS for Oracle Solaris Cluster ** Removing SUNWscnfs...done ** Installing Oracle Solaris Cluster HA for NFS ** SUNWscnfs...done Completed upgrade of Oracle Solaris Cluster data services agents Log file - /mnt/var/cluster/logs/install/scinstall.upgrade.log.13042
I zainstalować najnowszy Core patch na Cluster:
# cd /var/tmp/patching/SC-3.3 # patchadd -R /mnt 145333-34
Nie zapomnij o przywróceniu opcji 'global’ również w nowym vfstab, a następnie odmontuj ABE:
# vi /mnt/etc/vfstab # luumount /mnt
Powtórz powyższe czynności dla wszystkich nodów klastra, a następnie czekaj na zaplanowane okno serwisowe aby przełączyć się do nowego środowiska.
Co robić podczas okna serwisowego?
Dobrze jest zrobić aktualizację Firmware jeśli nie jest zainstalowana najnowsza wersja, więc ściągnij ją i załaduj na Service Controller lub TFTP/FTP serwer.
Sprawdź status klastra i urządzenia quorum raz jeszcze:
# cluster status # clq status # clrg status
Sprawdź i usuń mediatory z metasetów jeśli są przypisane:
# medstat -s metaset1 # metaset -s metaset1 -d -m NODE1 NODE2 # medstat -s metaset1
Wypisz pierwszego noda z klastra i aktywuj nowy BE:
# clnode evacuate NODE1 # luactivate s10u11_20160219 # lustatus Boot Environment Is Active Active Can Copy Name Complete Now On Reboot Delete Status -------------------------- -------- ------ --------- ------ ---------- s10 yes yes no no - s10u11_20160219 yes no yes no -
Wyłącz serwer za pomocą 'init 0′, NIE UŻYWAJ 'reboot’ ani 'halt’.
# init 0
Zostaw tego noda w dole, możesz zrobić upgrade Firmware jeśli jest jakiś nowszy.
Powtórz powyższe kroki od 'clnode evacuate NODEx’ dla wszystkich nodów w klastrze.
Teraz możesz zacząć uruchamiać serwery w odwrotnej kolejności do zamykania, zatem zacznij od ostatniego, a następnie dołączaj kolejne do klastra.
To już prawie wszystko. Prawie, ponieważ jeszcze należy zrobić upgrade typów zasobów.
# clrs list -v # clrt show -v |grep Upgrade
To pokaże jakie typy zasobów są używane i kiedy można dokonywać aktualizacji. Większość z nich może być aktualizowana kiedykolwiek lub kiedy nie jest monitorowana, zatem nie potrzeba ich wyłączać. Dla przykładu zrobię upgrade dla zasobów typu HAStoragePlus i LogicalHostname:
# clrt register HAStoragePlus # clrt register SUNW.LogicalHostname # clrt show -v |grep Upgrade --- Upgrade tunability for Resource Type SUNW.HAStoragePlus:10 --- Upgrade from 9: When unmonitored Upgrade from 8: When unmonitored Upgrade from 7: When unmonitored Upgrade from 6: When unmonitored --- Upgrade tunability for Resource Type SUNW.LogicalHostname:4 --- Upgrade from 3: Anytime Upgrade from 2: Anytime # for a in `clrs list -v|grep SUNW.HAStoragePlus:6|cut -d" " -f1`; do > clrs unmonitor $a > clrs set -p Type_version=10 $a > clrs monitor $a > done # clrt unregister HAStoragePlus:6 # # for a in `clrs list -v|grep SUNW.LogicalHostname:2|cut -d" " -f1`; do > clrs set -p Type_version=4 $a > done # clrt set -p RT_system=False SUNW.LogicalHostname:2 # clrt unregister SUNW.LogicalHostname:2
That’s all folks, powodzenia!
Pssst! Nie zapomnij usunąć starego BE i przyłączyć dysk do mirrora aby przywrócić redundancję na UFS.
Hi,
Thanks a lot for this explanation.
I have to patch Sun Cluster to Solaris 10 Update 11. Cluster Setup includes one fail-over zone. Zone has metaset configured.
Also there are couple of sand-alone zones which are running on current passive node.
Kindly suggest me best possible plan.
Milind