SRM – Recovery Test/Cleanup/Cancel Tuşunun Gelmemesi
Bundan bir kaç gün SRM ile Recovery Planlarını Test ederken bazı sıkıntılar yüzünden testi iptal etmek zorunda kaldım tam bu esnada SRM servisinin durması üzerine garip bir sorunla karşılaştım. SRM servisi durunca vCenter’ın tuttuğu Recovery tasklerinin state’i ile SRM’in stateleri tutmadığından dolayı aşağıda ki ekran görüntüsünde ki gibi bir durum oluştu.
Bunun sebebi SRM servisinin state’i ile veritabanı statelerinin tutmamasından veya SRM’in belli state tablolarını değiştirip ötekileri değiştirememesinden kaynaklanmaktadır. Semptomlar arasında Protection Groupların state’inin “Test complete” veya “Test in progress” gözükmesi, Recovery Planlardan hiçbirinin çalışıyor gözükmemesine rağmen tüm planların inaktif olması bulunmaktadır.
Aşağıdaki çözüm SRM 5.5 ve vCenter 5.5 için denenmiştir başka versiyonlarda nasıl tepki vereceği bilinmiyor. Bu işlemleri gerçekleştirebilmek için SRM ve vCenter sunucularında admin olmak aynı servislerin DB’lerinde değişiklik ve kayıt silme işlemlerinin yapılabilmesi gerekmektedir.
Böyle bir durumla karşılaşıldığında yapılabilecek adımlar aşağıdaki gibidir:
Servisleri yeniden başlatmak
Bu adımları aşağıdaki sırayla yapmanız önemlidir.
1)Protection ve Recovery site’da bulunan SRM servislerini kapatın.
2)Her iki taraftaki vCenter servislerini yeniden başlatın
3)Her iki taraftaki SRM servislerini yeniden açın.
PowerCLI ile SRM Recovery Plan Cleanup komutunu çalıştırmak
Yukarıdaki adımlar işe yaramazsa SRM API’si üzerinden SRM’e cleanup sinyali yollanabilir. SRM API’sine powercli ile bağlanmak için gerekli olan minimum powercli versiyonu 5.5 r2’dir.
İlk önce SRM sunucunun bağlı olduğu vCenter’a daha sonrada SRM sunucusuna bağlanalım.
Connect-VIServer “vcenterhost” –User “Emre” –Password “Pa$$W0rd” $srmServer=Connect-SRMServer –SrmServerAddress ”srmServer1” –User “DRuser” –Password “Drpass”
Burada önemli olan SRM bağlantısını bir değişkene atanmasıdır. Daha sonra bu connection string içerisinden methodlar çağrabilmemiz için aşağıda ki komutu giriyoruz.
$srmMan = $srmServer.ExtensionData
Bu komutun çıktısı recovery planların moef id’sini verecektir eğer hangi recovery planı olduğunu bilmiyorsanız “GetInfo()” method’duyla tek tek bakabilirsiniz.
$srmMan.Recovery.ListPlans()[0].GetInf0()
Bu komut hem daha kullanıcı dostu bir çıktı verecektir hem de Recovery planın durumu hakkında sizi bilgilendirecektir. Şu anda tüm Recovery planların durumu “Error” olarak gözükmektedir. İndeks sayısını değiştirerek doğru recovery planı bulalım.
Bir Recovery 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” kullanıyoruz.
$failover = New-Object VMware.VimAutomation.Srm.Views.SrmRecoveryPlanRecoveryMode $failover.Value__ = 2
Ve bulduğumuz recovery planın cleanup state’ini çalıştırıyoruz.
$srmMan.Recovery.ListPlans()[0].Start($failover)
vCenter üzerinden baktığımızda cleanup görevinin çalıştığını görmemiz gerekiyor eğer göremiyor veya başka bir görev tarafından kullanıldığına dair bir uyarı görürseniz vCenter ve SRM veri tabanlarından stateleri elle değiştirmeniz gerekmektedir.
SRM ve vCenter veri tabanlarından taskların silinmesi
Bu işlemleri vCenter için her iki tarafta SRM için sadece bir yerde yapmanız yeterlidir.
Önemli not: Aşağıda ki adımları yerine getirmeden önce mutlaka veritabanlarının yedeklerini alınız
vCenter veri tabanına girelim. “VPX_Task” tablosu içerisinde “DescriptionID” değer “com.vmware.vcDr.dr.recovery.RecoveryManager” olan ve “Complete_state” değeri “running” olan değerleri sorgulayalım.
Select * from [VCDB].[VMW].[VPX_Task] where [DESCRIPTIONID] LIKE ‘com.vmware.vcDr.dr.recovery.RecoveryManager%’ and where [Complete_state] = ‘Running’
Şu anda vCenter’a SRM tarafından gönderilen ve hala çalışan görevleri göreceksiniz. Bunların vCenter tarafından gerçekten kullanılmadığına emin olun ve her iki taraftanda silin.
Delete FROM [VCDB].[dbo].[VPX_TASK] where [TASK_ID] = '<taskid>'
SRM’in veri tabanına girin ve “pdr_protectiongroup” tablosunu açalım, bu tablo tüm protection gruplarının ve durumlarının tutulduğu yerdir. Burada “state” kolonunun “6” olması gerekmektedir eğer farklı bir değerse değiştiriniz.
SRM ve vCenter’ı yeniden başlatıp biraz bekleyiniz. Her iki taraftaki DB eşitlendikten sonra tekrar SRM plugin ile giriş yaptığınızda herşeyin düzelmiş olduğunu göreceksiniz.
Umarım yardımcı olabilmişimdir 🙂