Başlangıç > VMware > 152: Parallel Rescan

152: Parallel Rescan

Son zamanlarda vaktimin çoğunu PowerCLI ve otomasyon ile geçirdiğimi söyleyebilirim. Bu süreç içerisinde, vCenter envanterinde yer alan tüm ESX sunucularını rescan edecek bir koda ihtiyacım oldu. Aslında bunu tek satırlık basit bir komut ile yapmak gayet mümkün:


Get-VMHost | Get-VMHostStorage -RescanAllHba -RescanVmfs

Ancak burada sıkıntı şu olacak, bu komut tüm ESX sunucuları için işlemi sıralı bir şekilde gerçekleştirecek. Eğer 100 sunucu için bunu yapıyorsanız, bir hayli vakit kaybı demektir (özellikle RTO değerlerinin kritik olduğu DR projelerinde). Gerçek anlamda yapmak istediğimiz, vSphere üzerinden bir cluster yada datacenter objesine tıklayıp “Rescan for Datastores” benzeri bir komut gönderip, aynı anda yapılmasını sağlamak. Ancak malesef bu işi gerçekleştiren bir komut yada fonksiyon bulunmuyor. Internette yaptığım tüm aramalar da, beni sadece yukarıdaki çözüme yönlendirdi.

Peki çözüm ne olabilir? Powershell parallel processing. Powershell ile gelen Start-Job komutu ile istediğimiz kadar paralel powershell prosesi yaratıp, rescan yapabiliriz. Bir uyarı; yarattığımız proses sayısı ile orantılı olarak, scripti çalıştırdığımız sunucunun %100 CPU kullanması gayet muhtemeldir. İşte script:


# *********************************************************************
#
# Powershell script that rescans for HBA devices simultaneously.
#
# ASSUMPTIONS:
# VICredentialStore already created and ready to use
#
# *********************************************************************

$Cred = Get-VICredentialStoreItem -File D:\Library\Tools\Credentials\Cred-VCENTER.xml
$VIServer = Connect-VIServer -Server VCENTER -User $Cred.User -Password $Cred.Password

$VMHosts = Get-VMHost | Where-Object { $_.PowerState -eq "PoweredOn" }

foreach ($VMHost in $VMHosts) {
 $Job = Start-Job -ScriptBlock {
 Add-PSSnapin VMware.VimAutomation.Core
 Connect-VIServer -Server $Args[0] -User $Args[1].User -Password $Args[1].Password
 $VMHostStorage = Get-VMHostStorage -VMHost (Get-VMHost -Name $Args[2])
 $VMHostStorage_View = Get-View -Id $VMHostStorage.Id
 $VMHostStorage_View.RescanAllHba()
 $VMHostStorage_View.RescanVmfs()
 Disconnect-VIServer -Confirm:$false
 } -ArgumentList @($VIServer.Name, $Cred, $VMHost.Name)
}

Disconnect-VIServer -Confirm:$false

Bu script ile ilgili öncelikli söyleyeceğim, Get-VICredentialStoreItem komutunun kullanımı. New-VICredentialStoreItem komutu ile önceden bir credential dosyası oluşturmuş olmanız gerekiyor. Sonrasında Get komutu ile bu dosya içerisinde encode edilmiş şifrelere güvenli bir şekilde erişebiliyorsunuz. Örnek:


New-VICredentialStoreItem -Host <VCENTER> -User <User> -Password <Password> -File <FileName>

Scriptin mantığını kısaca özetlemek gerekirse, vmhost sayısı kadar powershell prosesi yaratıyoruz. Yaratılan prosesler içi boş prosesler olacağından hepsinde VMware snap-in’ini eklememiz ve vCenter sunucusuna bağlanmamız, işlemi tamamladıktan sonra da bağlantımızı koparmamız gerekecektir. Arka planda çalışan proseslerin sonuçlarını Get-Job komutu ile görebilirsiniz. Komut aşağıdaki gibi bir çıktı üretiyor olmalı:

Eğer bu proseslerin herhangi bir exception dönüp dönmediklerini kontrol etmek istiyorsanız, aşağıdaki komut çok işinize yarayacaktır.


Get-Job | % { Write-Host Error Message: $_.ChildJobs[0].Error }

Son olarak vCenter üzerinde açık kalan session olmadığını da kontrol etmekte fayda var. Eğer açık kalmış bol miktarda session görüyorsanız, bir şeyler ters gitmiş demektir.

Eğer herşey yolunda gittiyse, işte sonuç;

Kategoriler:VMware Etiketler:,
  1. Henüz yorum yapılmamış.
  1. No trackbacks yet.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

w

Connecting to %s

%d blogcu bunu beğendi: