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.

Możesz również polubić…

1 Odpowiedź

  1. Milind pisze:

    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

Leave a Reply

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.