PowerCLI SRM API Kullanımı

PowerCLI 5.5 R2’den itibaren SRM API’si ile doğrudan ek bir işlem yapmadan entegre olabilecek duruma gelmiştir. Bu sayede birçok işlemimizi otomatikleştirebileceğimiz gibi vRealize Automation gibi bir self-service portal yardımıyla da DRaaS hizmetini daha kolay ve esnek sunabilmemizi de sağlamaktadır. Bu yazımda temel seviyede SRM ve PowerCLI entegrasyonundan bahsedip birkaç kullanım örneğine değinmek istiyorum. API hakkında daha detaylı bilgileri ilgili dokümantasyonda bulabilirsiniz.

Her hangi bir SRM sunucusuna bağlanmak için Connect-SRMServer fonksiyonunu kullanabiliriz. Bağlantıyı sağlamak için vCenter üzerinden bağlanıp ilişkilendirilmiş SRM’e direk bağlanabiliriz. Tabii bu senaryoda vCenter’a bağlanacak kullanıcının SRM’i yönetmek içinde yetkili olduğunu varsayıyorum.

Connect-VIServer “vcenterhost” –User “Emre” –Password “Pa$$W0rd”
Connect-SRMServer

Eğer bir vCenter’a birden fazla SRM kurduysanız veya SRM’e farklı bir kullanıcıyla bağlanmak istiyorsanız aşağıda ki gibi bir yöntem izlemeniz gereklidir.

Connect-VIServer “vcenterhost” –User “Emre” –Password “Pa$$W0rd”
Connect-SRMServer –SrmServerAdress ”srmServer1” –User “DRuser” –Password “Drpass”

Protection Group işlemleri

Api içerisinde ki metotları kullanabilmek için ilk adımda bir obje yaratmamız gerekiyor.

$srmServer =  Connect-SRMServer –SrmServerAdress ”srmServer1” –User “DRuser” –Password “Drpass”
$srmMan = $srmServer.ExtensionData

Eğer $srmMan|Get-Member derseniz kullanabileceğiniz tüm metotları görebilirsiniz.

Protection Groupları listelemek için
$srmMan.Protection.ListProtectionGroups() fonksiyonunu kullanabiliriz. Bu liste içerisinde VM’i istediğimiz gruba şu şekilde ekleriz.

Bir VM’i istediğimiz bir protection grup’a ekleyelim.

$SRMVM = Get-VM = “DRVM”
$PG = $srmMan.Protection.ListProtectionGroups()|where {$_.GetInfo().Name –eq “DailyRPO” }
$PG.AssociateVms(@($SRMVM.ExtensionData.MoRef))

İkinci satırda DailyRPO isimli grubu Protection Groups listesi içerisinden çekip PG isimli bir obje yarattık. Bu objenin AssociateVms metodunu kullanarak da DRVM isimli sunucuyu Protection group’a ekledim. Çalışıp çalışmadığını kontrol etmek için aşağıda ki komutu kullanabiliriz.

$PG[0].ListProtectedVMs() |where {$_.Name –eq “DRVM” }

Alternatif olarak VM’in protection durumunu görmek için aşağıda ki yöntemi de kullanabiliriz.

$srmMan.GetProtectionStatus($SRMVM)

Ek olarak hangi datastore’ların SRM tarafından görüldüğünü ve replice edildiğini de görmek istersek ListReplicatedDatastores(ProtectionGroup objesi).

$srmMan.ListReplicatedDatastores($PG[0])

Alternatif olarak protected datastore’larını listeleyerek de benzer bir liste görebilirsiniz. Bir önce ki fonksiyonun çıktısına göre tek fark RDM diskleri göstermeyecektir.

$srmMan.ListProtectedDatastores($PG[0])

Protection grubu içerisinde ki tüm VM’leri listelemek için

$srmMan.ListProtectedVMs($PG[0])

Fonksiyonunu kullanabilirsiniz. Bunun çıktısında eğer her hangi bir vm’in yanında faults veya needsConfiguration varsa bu VM için koruma sağlıklı çalışmıyor demektir.
Ve son olarak bu protection group hangi recovery planlarla ilişkilendirilmiş görmek isteyebilirsiniz.

$srmMan.ProtectionGroupListRecoveryPlans($PG[0])

Son olarak bir arkadaşımın sorduğu bir soruya cevap vererek bu yazımı tamamlamak istiyorum. PowerCLI yardımıyla istersek SRM’in otomatik olarak failover yapmasını sağlayabiliriz. DR site’a yerleştireceğimiz ve belli aralıklarla asıl veri merkezimizde ki servislerin ayakta olup olmadığını kontrol edecek bir script/monitoring aracı sayesinde SRM API’sine belli komutları yollayıp failover’ı başlatabiliriz.

Bu benim çok önerdiğim bir yöntem değildir ve büyük bir ihtimalle split brain durumuna sebep olacaktır ama kullanıp kullanmamak size kalmış.
Bir recovery planın SRM içerisinde 5 adet durumu olabilir her bir durum api içerisinde aşağıda ki sırayla bir numaraya sahiptir.
• Test (1)
• Cleanup Test (2)
• Failover (3)
• Reprotect (4)
• Revert (5)

Biz bunlardan failover’ın otomatik olarak çalışmasını istiyoruz. İlk önce failover için bir obje yaratıp içerisine ilgi failover statüsünü atayalım.

$failover = New-Object VMware.VimAutomation.Srm.Views.SrmRecoveryPlanRecoveryMode
$failover.Value__ = 3

Eğer birden fazla recovery planımız varsa bunları listeleyip kaç numaralı planı çalıştıracaksak onu seçmemiz gerekiyor, ben 1. Planı çalıştırmak istediğim için array numarası olarak 0 verdim. Recovery planları $srm.Man.Recovery.ListPlans() ile listeleyebilirsiniz.
Bundan sonra ki adımımız istediğimiz Recovery planı başlatmaktır. Başlatmak için start() fonksiyonu kullanılıyor.

$srmMan.Recovery.ListPlans()[0].Start($failover)

Artık ne zaman kontrol scriptiniz veya monitoring aracınız gerekli şartları yakalarsa yukarıda ki kod parçasını kullanarak otomatik failover’ı sağlayabilir.
Okuduğunuz için teşekkür ederim.

Share on LinkedInTweet about this on TwitterShare on FacebookShare on StumbleUponDigg this

Bu blog yazısı Emre Bozlak tarafından paylaşılmıştır. Referans vererek istediğiniz gibi kullanabilirsiniz. Eğer bir sorunuz olursa eposta veya sosyal medya hesaplarım üzerinden bana ulaşabilirsiniz. Yazılarımı Twitter'dan @emrebozlak veya RSS üzerinden takip edebilirsiniz.

One Trackback

  1. […] planın 5 durumu olabilir bu durumların neler olduğu ve nasıl kullanıldığı hakkında ilgili yazıyı okuyabilirsiniz. Biz aşağıda Cleanup state için “2” […]

Leave a comment