Ana içeriğe geç

Düğümün 3.2'ye yükseltilmesi

Bir düğüm standart vStack.update.sh betiğiyle yükseltilir. Betik dağıtımla birlikte gelir ve düğümde /root/bin/ dizininde bulunur. Düğümler tek tek yükseltilir ve her biri yükseltmeden sonra yeniden başlatılır.

Bu sayfa, 3.2.0'a geçen 3.0.x ve 3.1.x serisi düğümler için hazırlanmıştır. 2.x serisinden geçiş FreeBSD ana sürümünü değiştirir ve vStack teknik desteğiyle birlikte yapılır.

Tüm komutları düğümün kendisinde root olarak çalıştırın.

Pencereden önce​

  1. Depo erişimi. Paketler, yalnızca izin listesindeki adresleri kabul eden vStack deposundan alınır. Düğümlerin dışarı çıktığı adresleri teknik desteğe önceden gönderin. Bu yapılmazsa betik 2 koduyla çıkar.
  2. Düğüm konsolu. Düğümün ağ üzerinden geri gelmemesi ihtimaline karşı IPMI veya BMC erişimine ihtiyacınız vardır.
  3. İş yükü düğümden kaldırılmıştır. VM'ler kapatılmış veya taşınmış, düğümün havuzları kümenin diğer düğümlerine devredilmiştir. Bunun nasıl yapılacağı "Havuz servislerinin taşınması" bölümünde açıklanmıştır. Kümedeki VM'ler havuzlarını tutmayan düğümlerde de çalışıyorsa prosedür "Uzaktan başlatılmış VM'leri olan bir düğümün boşaltılması" bölümünde açıklanmıştır.
  4. Tüm düğümlerde saat eşitlenmiştir. ntpq -p komutunu denetleyin: zaman kaynağına erişilebilir olmalıdır.
  5. Düğüm yapılandırmasının yedeği alınmıştır. Prosedür "Düğüm yapılandırmasının yedeklenmesi" sayfasında açıklanmıştır. Yükseltme betiği de kendisi bir kopya alır, ancak bunu düğümün sistem diskinde tutar ve yeniden kurulumda kopya diskle birlikte kaybolur.

Küme dolaşım sırası​

Düğümleri kesinlikle tek tek yükseltin. Önceki düğüm geri geldiğinde, küme tarafından kabul edildiğinde ve kümenin tüm havuzlarında resilver tamamlandığında bir sonraki düğüme geçin.

Resilver kendiliğinden başlar. Bir düğüm yeniden başlarken diğer düğümlerin havuzları onun disklerini kaybeder ve düğüm geri geldiğinde ZFS bu disklerdeki değişiklikleri yakalar. Bir sonraki düğümü daha erken yeniden başlatırsanız eşitlemesi henüz tamamlanmamış bir havuz ikinci bir diski kaybeder. N+1 yedekliliğe sahip bir havuz buna dayanamaz.

Havuz tutan her düğümde denetleyin:

zpool status | grep -E 'pool:|state:|scan:'

Tüm havuzlar state: ONLINE durumundaysa ve scan: satırı resilver in progress içermiyorsa devam edebilirsiniz.

Dolaşım süresince geçerli iki kural daha:

  • Dolaşım sürerken karışık sürümlere sahip bir küme normal bir çalışma durumudur.
  • Yükseltilmiş bir düğümde çalışmış bir havuzu yükseltilmemiş bir düğüme geri döndürmeyin. Dolaşımı bitirene kadar havuzları yükseltilmiş düğümlerde tutun.
uyarı

Ne dolaşım sırasında ne de sonrasında zpool upgrade çalıştırmayın. Yükseltme betiği bunu son özette size hatırlatır.

Adım 1. Betiğin kendisini güncelleyin​

Betik sürümle birlikte yayımlanır ve paketlerle aynı anahtarla imzalanır. Sürümü, yükseltme yaptığınız dağıtımdan alın.

fetch -o /root/bin/vStack.update.sh https://repo.vstack.com/os/3.2.0/update.sh
fetch -o /tmp/update.sh.sig https://repo.vstack.com/os/3.2.0/update.sh.sig
openssl dgst -sha256 \
-verify /usr/share/keys/vstack/vstackos.pub \
-signature /tmp/update.sh.sig /root/bin/vStack.update.sh
chmod 0755 /root/bin/vStack.update.sh

Denetim Verified OK yazdırmalıdır. Başka bir şey yazdırırsa yükseltmeye başlamayın.

Adım 2. Deneme çalıştırması​

Deneme çalıştırması düğümde hiçbir şeyi değiştirmez. Betik geçici bir depo yapılandırması yazar ve pkg planını gösterir.

/root/bin/vStack.update.sh --controllers --base \
--source release --version 3.2.0 --dry-run

Depoya erişilebildiğinden ve planda beklenmeyen paket kaldırma işlemleri bulunmadığından emin olun.

Adım 3. Yükseltme​

/root/bin/vStack.update.sh --controllers --base \
--source release --version 3.2.0
  • --controllers, temel sistem dışındaki düğüm paketlerini yükseltir.
  • --base, temel sistemi ve çekirdeği yükseltir. Bundan sonra yeniden başlatma zorunludur.

Ardından yeniden başlatma gelecekse denetleyicileri yükseltmenin hemen ardından yeniden başlatmanın bir anlamı yoktur. Bunu --no-restart seçeneğiyle devre dışı bırakabilirsiniz. --reboot seçeneği, işlem tamamlandığında düğümü yeniden başlatır. Seçeneklerin tam listesi başvuru bölümündedir.

İşlemden önce betik /var/backups/etc-<ts> dizinine bir yapılandırma kopyası alır: /etc, /usr/local/etc ve boot alt dizininde /boot/loader.conf, /boot/loader.conf.local ve /boot/device.hints dosyaları. vstack-env.conf ayrıca kaydedilir. Yükseltmeden sonra betik kopyadan hesapları, ssh ayarlarını, sysctl.conf, syslog.conf, hosts, ntp.conf, vstack-env.conf dosyalarını ve üç önyükleme dosyasını, yani düğümün ince ayar profilini geri yükler. Kopyadaki diğer dosyalar adlarıyla geri yüklenmez; gerekirse bunları elle karşılaştırın.

Adım 4. Yeniden başlatma öncesi denetimler​

  1. Çıkış kodu 0'dır. Yeniden başlatmadan önce başka herhangi bir kodu inceleyin; kodların anlamı aşağıda verilmiştir.
  2. root kabuğu çalıştırılabilirdir. Aksi takdirde yeniden başlatmadan sonra sshd, root kullanıcısının düğüme girmesine izin vermez.
    pw usershow root | awk -F: '{ print $NF }' # shell path
    ls -l $(pw usershow root | awk -F: '{ print $NF }')
  3. Önyükleme koruması devrededir.
    cat /boot/nextboot.conf # one-time boot of the new kernel
    cat /boot/loader.conf.d/zz-vstack-fallback.conf # default boot for the duration of the window: the previous kernel
    Özellikle dosyalara bakın. Günlükteki boot summary satırı çekirdek adlarını fazladan bir _prev sonekiyle yazdırır ve yanıltıcıdır. Gerçekte yeni çekirdek bir kez önyüklenir, geri alma ise öncekine yapılır.
  4. Çalıştırma özeti. versions-before-*.txt ve versions-after-*.txt dosyalarının yanında, /var/backups/update-summary-<ts>.txt içinde saklanır. Tam günlük /var/log/vstack-os-update-<ts>.log dosyasına yazılır.

Önyükleyici yalnızca bir sistem diskinde güncellenir​

Betik yeni loader.efi dosyasını, düğümün o anda önyüklendiği EFI bölümüne kopyalar. İkinci sistem diskinin EFI bölümü eski önyükleyiciyi korur. Yükseltmeden sonra donanım yazılımı düğümü ikinci diskten önyüklerse yeni çekirdek eski önyükleyici tarafından yüklenir.

Bu nedenle pencere süresince donanım yazılımındaki önyükleme sırasını değiştirmeyin ve bir sistem diskini değiştirirken bunu göz önünde bulundurun.

Adım 5. Yeniden başlatma ve kabul​

reboot

Yeni çekirdek önyüklenemezse bir sonraki yeniden başlatma düğümü önceki çekirdekle ayağa kaldırır. Önyükleyici isteminde takılan bir düğüm kendiliğinden yeniden başlamaz: onu IPMI veya BMC konsolundan sıfırlayın.

Düğüm ayağa kalktıktan sonra:

uname -r # base of the target line
cat /etc/os-release # VERSION_ID = 3.2.0
pkg query '%n %v' | grep -i vstack
pkg check -d -a # dependencies are consistent
ls /boot/nextboot.conf /boot/loader.conf.d/zz-vstack-fallback.conf 2>&1

Son komut, dosyaların mevcut olmadığını bildirmelidir. Başarılı bir önyüklemeden sonra düğüm, tek seferlik önyüklemeyi ve geçici geri almayı kendisi kaldırır. Dosyalar kalırsa düğüm hedef çekirdekle ayağa kalkmamıştır. İş yükünü geri döndürmeden önce nedenini bulun.

Ardından düğüm servislerini (service <name> status) ve düğümün kümedeki durumunu denetleyin, tüm havuzlarda resilver'ın bitmesini bekleyin ve iş yükünü geri döndürün. Havuzlar geri gelen düğüme kendiliğinden dönmez; onları elle taşıyın.

Havuz servislerinin taşınması​

Pencere süresince havuzları iki kez taşımanız gerekir: çalışmadan önce havuzları düğümden kaldırmak ve sonrasında geri döndürmek için.

Olağan yol, vStack Center arayüzünün "Küme servisleri" bölümüdür.

İstisna, yönetim VM'sinin (vStack Center) çalıştığı havuzdur. Bu havuz arayüzden taşınamaz. Taşıma, havuzun VM'lerinin askıya alınmasıyla başlar ve yönetim VM'sinin kendisi de bunların arasındadır: Center işlemin ortasında kendini kapatır ve taşıma yarıda kesilir. Böyle bir havuz, bir düğümde küme yardımcı programıyla taşınır.

Yönetim VM'si genellikle kümenin ilk havuzu olan z01 üzerinde bulunur. Bunu 0 numaralı VM'den denetleyebilirsiniz:

vstack-vm vm list

Küme yardımcı programıyla taşıma​

Bu yöntem, yönetim VM'sinin bulunduğu havuz ve Center'sız kümeler için gereklidir. Komutlar kümenin herhangi bir düğümünden çalıştırılır.

Kümede bir havuz zpool_<pool name> servisiyle temsil edilir: z01 havuzu zpool_z01 servisine karşılık gelir. Komutlar havuz adını değil, servis adını alır. Servis adlarını ve düğüm numaralarını vstack-cluster status gösterir:

vstack-cluster status
Node ID: 1; name: q100u001.example.com; state: ONLINE; [ enabled]
Service name: cluster-management; state: STARTED; [ enabled]
Service name: zpool_z01; state: STARTED; [ enabled]

Node ID: 2; name: q100u002.example.com; state: ONLINE; [ enabled]
Service name: zpool_z02; state: STARTED; [ enabled]
...

z01 havuzunu 2. düğüme taşıma:

vstack-cluster service move -s zpool_z01 --dst-id=2

Hedef düğüm ONLINE ve açık (enabled) olmalıdır. Komut başvuru bölümünde ayrıntılı olarak açıklanmıştır.

Havuz taşınırken havuzun VM'leri kapatılır ve birimlerinin sunulması kesintiye uğrar. Bu kesintisiz bir işlem değil, bir bakım penceresidir.

Uzaktan başlatılmış VM'leri olan bir düğümün boşaltılması​

Bir VM, havuzunun sahibi olmayan bir düğümde çalışabilir: bu durumda diskleri NVMe-oF/TCP üzerinden iletilir. vstack-vm vm list çıktısında bu tür VM'ler remote sözcüğüyle işaretlenir. Yükseltmeden önce düğüm, kendi havuzlarının VM'lerinden ve üzerinde diğer düğümlerin havuzlarındaki disklerle çalışan VM'lerden boşaltılır.

VM'leri vStack Center üzerinden durdurun ve başlatın.

  1. Düğümün havuzlarını taşıyın, "Havuz servislerinin taşınması" bölümünde açıklandığı gibi. Bu havuzların diğer düğümlerde çalışan VM'lerini taşımadan önce durdurun ve taşımadan sonra yeniden başlatın. Bunları kümenin herhangi bir düğümünde bulabilirsiniz:

    vstack-vm vm list | grep -w remote | grep -w <pool>
  2. Kalan VM'leri düğümden taşıyın. Bunları düğümün kendisinde bulun:

    vstack-vm vm list | grep -w remote

    Her birini durdurun ve farklı bir düğüm seçerek "Start on node" eylemiyle başlatın. Ardından düğümde hiç VM kalmadığından emin olun:

    ls /dev/vmm

    No such file or directory yanıtı, düğümde VM olmadığı anlamına gelir.

  3. Düğümü VM yerleşimine kapatın ve durumunun DISABLED olduğunu denetleyin:

    vstack-cluster node disable --id=<N>
    vstack-cluster node status

    Düğümde vstack-cluster yardımcı programı yoksa aynı işlemler ccrd_cli --node --node_id <N> --command disable ve ccrd_cli --node --command status ile yapılır.

    Düğümü kapattıktan sonra ls /dev/vmm komutunu yeniden çalıştırın. Düğümde VM'ler belirdiyse 2. adımdaki gibi bunları taşıyın.

    uyarı

    Çalışma sırasında kapatılmış düğümde VM başlatmayın veya oraya VM taşımayın. Aynı anda birden fazla düğümü kapalı tutmayın.

  4. Düğümü bu sayfadaki 1–5. adımları izleyerek yükseltin.

  5. Kabulden sonra düğümü açın:

    vstack-cluster node enable --id=<N>

    vstack-cluster yardımcı programı olmadan: ccrd_cli --node --node_id <N> --command enable. Ardından gerekirse havuzları geri döndürün. VM'ler düğüme kendiliğinden dönmez.

Çıkış kodları​

KodAnlamı
0yükseltme tamamlandı
1bağımsız değişkenlerde hata
2kaynak veya sürüm kullanılamıyor, imzalama anahtarı alınamadı ya da --allow-major-upgrade olmadan ana sürümler arasında geçiş istendi
3bir pkg hatası veya yeni çekirdek denetimi hatası
4yapılandırma (/etc, /usr/local/etc, önyükleme dosyaları) kaydedilemedi veya geri yüklenemedi
5kurulu bir servis yeniden başlamadı
6yükseltme tamamlandı, ancak root kabuğu çalıştırılabilir değil. Yeniden başlatmadan önce düzeltin
7yükseltme tamamlandı, ancak /boot yazımı doğrulanmadı. İncelenene kadar yeniden başlatmayın

6 ve 7 kodlarında betik --reboot seçeneğini bilerek yok sayar.

Geri alma​

Betik paketleri geri almaz. Şu yollarla geri dönebilirsiniz:

  • Önyükleme. Önceki çekirdek düğümde kalır ve yükseltme penceresi başarılı bir önyüklemeyle kapanana kadar önyükleyici menüsünden kullanılabilir.
  • Yapılandırma. Kopya /var/backups/etc-<ts> içinde saklanır; en son beş kopya tutulur.
  • Tüm sistem. Hedef sürümün ortamından yeniden kurun veya çalışmadan önce alınmış bir düğüm yedeğinden geri yükleyin.

Betik havuz verilerini, VM disklerini veya 3. adımda listelenenlerin dışındaki yapılandırmayı kaydetmez. Pencereden önce bunların kopyasını kendiniz alın; bkz. "Düğüm yapılandırmasının yedeklenmesi".