Azure Backup – Felaket Anında Alternatif Sunucuya Kurtarma

24.07.2015 | 00:25 Dokümanlar , Microsoft Azure 0 Yorum

Şirketler Azure Backup üzerinde sakladıkları yedeklere genellikle gerçek bir felaket anında ihtiyaç duyarlar, çünkü birçoğu yerel ağda çalışan ve çok daha hızlı (kısa sürede) kurtarmanın mümkün olduğu bir yedekleme/kurtarma çözümüne sahiptirler. Normal işleyişte, ortamdaki veri kayıplarını yerel yedekleme altyapısı üzerinden çok daha hızlı bir şekilde kurtarmanız mümkün. Ama mesela yerel yedekleme yapısının da çalıştığı lokasyonun başına bir felaket gelirse? İşte bu noktada Azure Backup gibi lokasyon dışı ortamlarda saklanan yedeklere ihtiyaç duyarsınız.

Şöyle bir bir gerçek hayat senaryosu örnekleyelim: Ortamınızda Azure Backup Agent çalıştıran Windows Server’lar ve doğrudan Azure Backup’a entegre edilmiş bir System Center Data Protection Manager sunucusu görev yapıyor. Hızlı kurtarma ve kısa süreli yedek saklama işlerinin tamamını DPM üstlenmiş durumda ve bu işleri kendi yerel disk yapısı üzerinde yönetiyor, depoluyor. Ayrıca bu DPM Server üzerinden sanal makineler, SQL veritabanları, dosya/klasör grupları gibi çeşitli veriler Azure Backup Vault’lar içerisinde otomatik ve periyodik bir şekilde yedekleniyor.

Ve öyle bir an geliyor ki tüm sistemin çalıştığı ana lokasyonda bir felaket yaşanıyor, yedekleme sistemi dahil tüm sunucular kısa sürede kurtarılması mümkün olamayacak şekilde devre dışı kalıyor. Gerçek bir felaket! Önemli veriler Azure Backup üzerinde mevcut, ama DPM Server dahil buradaki Backup Vault’lara kayıtlı tüm sunucular felaket ile birlikte ulaşılamaz durumda. Elinizde ise sadece Azure Management Portal’e giriş yapabilen bir yetkili hesap ve tabi bir de şifrelemeyi çözebilecek Passphrase (anahtar) var.

Bu senaryoda tüm kurtarma işlemlerini mecburen alternatif sunucu üzerine gerçekleştirmeniz gerekir. O halde alternatif sunucuya kurtarma işlemlerine başlayalım.

Öncelikle uygun bir lokasyonda internet erişimi olan (ki Azure’daki veri boyutuna göre mümkünse yüksek kapasiteli bant genişliğine sahip) ve alternatif sunucu görevini üstlenecek bir Windows Server temin edin. Daha sonra takip etmeniz gereken temel adımlar sırasıyla;

  1. Alternatif sunucu üzerine Azure Backup Agent yükleyin ve ilgili Azure Backup Vault’a kayıt edin.
  2. Alternatif sunucu üzerine kurtarma işlemini gerçekleştirin. (MMC UI veya PowerShell tabanlı olarak)

Aşağıda nasıl yapıldığını görebilirsiniz.

Alternatif Sunucunun Azure Backup Vault’a Kayıt Edilmesi

Alternatif sunucu üzerinde oturum açtıktan sonra Azure Backup Agent’ı yükleyin ve içerisindeki yedekleri dönmek istediğiniz ilgili Backup Vault’a kayıt işlemini tamamlayın.

Bu bölüm için takip etmeniz gereken tüm adımlar şurada: Azure Backup Agent Kurulumu Nasıl Yapılır?

Azure Backup Agent kurulum ve kayıt işlemi tamamlandığında, alternatif sunucuyu aşağıdaki gibi Backup Vault > Registered Items bölümünde görüyor olmanız gerekir.

azure-backup-alternatif-sunucuya-kuratma-1

Bu noktadan sonra kurtarma işlemi için hazırsınız demektir.

Unutmayın: Bir sunucu üzerine kurtarma yapabilmek (yani Azure’dan yedek dönebilmek) için o sunucunun mutlaka yukarıdaki gibi Registered Items altında yer alıyor olması gerekir.

MMC UI ile Alternatif Sunucu Üzerine Kurtarma Adımları

Alternatif sunucuya kurtarma işlemini doğrudan Azure Backup Agent ile sağlanan MMC UI (kullanıcı arabirimi) üzerinden gerçekleştirme imkanınız var. Hatta bu yöntem oldukça zahmetsizdir.

1) Azure Backup Agent ile sağlanan MMC UI’ı açın.

2) Azure Backup Agent ile sağlanan MMC konsolunda Recover Data sihirbazını başlatın, Another Server seçimini yapın ve Vault Credentials dosyasını göstererek ilerleyin.

azure-backup-alternatif-sunucuya-kuratma-2

3) Select Backup Server adımında hangi sunucuya ait yedekleri kurtarmak istediğinizi seçin. Azure Backup Vault’a kayıt edilmiş tüm sunucular bu listede yer alır. Mesela ben DPM Server tarafından gönderilen yedekleri kurtarmak üzere seçim yapıyorum çünkü senaryo gereği ortamdaki tüm kritik veriler DPM Server tarafından Azure Backup’a gönderilmiş durumda.

azure-backup-alternatif-sunucuya-kuratma-3

4) Browse for files ile ilerleyin. Kısa bir kontrolden sonra DPM Server tarafından Azure Backup’a gönderilmiş yedekler listelenir. Listelenir ama listede yer alan satırları anlamak ne mümkün!!! :) Bu meseleyi başka bir yazıda ele alacağım ama nedeni kısaca şu: Azure Backup Agent ile sağlanan MMC UI’ın Windows Server Backup (cbengine.exe) tabanlıdır ve bu araç DPM Server’ın anladığı Data Source’ları ve MountPointPath’leri anlamlandıramaz. Daha doğrusu anlamlandırmak üzere uyarlanmamıştır. Zaten dikkat ederseniz “Select the volume” diyor, yani orada D:\ E:\ gibi volume name’ler yer almasını bekliyor.

Ben listedeki sıralamanın hangi yedeklere ait olduğunu bildiğim için seçerek ilerliyorum. Ama bu konuya biraz daha aşağıda PowerShell bölümünde ayrıca değindim. İlerleyemiyorsanız öncelikle o bölüme göz atın.

azure-backup-alternatif-sunucuya-kuratma-4

5) Geri dönmek istediğiniz zamanı seçin ve ilerleyin.

azure-backup-alternatif-sunucuya-kuratma-5

6)  Hiyerarşinin en üstünden itibaren kurtarabileceğiniz gibi, belirli bir klasör ve içeriğini de kurtarabilirsiniz.

azure-backup-alternatif-sunucuya-kuratma-6

7) Original Location seçeneği pasif çünkü bu bir alternatif sunucu, haliyle burada orijinal lokasyon yok. Another Location bölümünden yedeklerin dönüleceği dizini belirtin ve gerekli ise diğer seçenekleri düzenleyerek ilerleyin.

azure-backup-alternatif-sunucuya-kuratma-7

8) Aşağıdaki adımda, yedekler alınırken belirlenen ve muhafaza edilmesi gereken şifre çözücü Passphrase’i girmeniz gerekiyor . Ardından kurtarma işlemini başlatabilirsiniz. Eğer elinizde doğru Passphrase yoksa maalesef verileri açma şansınız yok. Uygun Passphrase’i yeniden üretme veya Microsoft’tan isteme şansınız da yok. Bu konunun öneminden şurada ve şurada bahsetmiştim.

azure-backup-alternatif-sunucuya-kuratma-8

9) Seçilen verilerin transferi ve şifrelerin çözülmesi işlemleri tamamlandığında kurtarma da tamamlanmış olur.

azure-backup-alternatif-sunucuya-kuratma-9

İlgili veriler sistemleri yeniden inşa etmek için hazır durumda.

Azure Backup PowerShell ile Alternatif Sunucu Üzerine Kurtarma

Azure Backup üzerinde saklanan verileri alternatif sunucu üzerine dönmenin bir başka yolu ise Azure Backup PowerShell (Recovery Services Shell) cmdlet’lerini kullanmaktır. MMC UI’e (mmc tabanlı kullanıcı arabirimi) göre çok daha esnek ve tabi otomatikleştirmeye uygundur ama ilk başta biraz zahmetli görünebilir.

Gerçekçi bir senaryo olması adına bir müşterimizin Disaster Recovery projesi için hazırladığım kapsamlı script’lerden bazı bölümleri aşağıda birleştiriyorum ve test ortamında çalıştırıyorum.

Öncelikle alternatif sunucu üzerinde oturum açarak Azure Backup Agent’ı yükleyin ve içerisindeki yedekleri dönmek istediğiniz mevcut Backup Vault’a kayıt işlemini tamamlayın; aynı bir önceki bölümde olduğu gibi.

PowerShell’e MSOnlineBackup modülünü import edin veya doğrudan Recovery Services Shell’i başlatın.

1) İlk iş olarak kayıtlı Backup Vault içerisindeki alternatif sunucuları listeleyin. Daha sonra bu liste içerisinden gönderdiği yedekleri kurtarmak istediğimiz sunucuyu seçeceğiz.

Get-OBAlternateBackupServer -VaultCredentials ‘C:\dpmvault1_17 Temmuz 2015 Cuma.VaultCredentials’

Vault Credentials dosyasını birkaç adım önce kullanmıştınız, henüz expire olmadığı için aynı dosyayı burada tekrar kullanabilirsiniz. Eğer expired durumdaysa yeni bir tane oluşturup indirmeniz gerekir.

Dönen sonuç System.Array türünde olur, yani bir array. İçerisindeki item’ların sıralaması aşağıdaki gibi.

azure-backup-alternatif-sunucuya-kuratma-powershell-1

Index numarası 2 olan item ise farklı bir array. Yani array içinde array içinde array… gibi bir yapı söz konusu. İlk çalıştırdığımız cmdlet’e dönen sonuç içerisinde index numarası 2 olan item her zaman Backup Vault’a kayıtlı alternatif sunucu listesini tutan bir alt array’dir. Bu durumda scirpt’in ilk satırında aşağıdaki gibi bir değişkene alternatif sunucu listesini tutan array’i atayalım.

$alternateBackupServers = (Get-OBAlternateBackupServer -VaultCredentials ‘C:\dpmvault1_17 Temmuz 2015 Cuma.VaultCredentials’)[2]

Bu noktadan sonra $alternateBackupServers[0] değişkeninin sonucu dpm.ipw.corp sunucusuna, $alternateBackupServers[1] sonucu ise inprowise-s sunucusuna karşılık gelir.

2) Şimdi dpm.ipw.corp’a ait kurtarılabilir kaynakları (Recoverable Source) listeleyelim.

Get-OBRecoverableSource -Server $alternateBackupServers[0]

azure-backup-alternatif-sunucuya-kuratma-powershell-2

Geldi ama büyük karmaşa! Burada bir parantez açmak istiyorum.

Yanıt olarak dönen listede (aslında yine bir system.array) çok fazla kayıt yer alıyor olabilirdi ki gerçek hayat senaryosunda oldukça uzun bir liste ile karşılaşacaksınız. Ve gördüğünüz üzere FriendlyName’ler pek bir Friendly!!! Bunlar aslında DPM’in anlayabildiği MountPointPath’lerdir ve DPM üzerindeki Data Source’lar ile eşleşirler. Ama şu an ortada bir DPM olmadığı için ve elinizde önceden hazırlanmış bir eşleşme listesi de yoksa, sihirli küreyi ovuşturmaktan veya hislerinize güvenmekten başka seçeneğiniz yok :)

Ha elde bir seçenek var aslında: Eğer daha önce farklı bir ortama çıkartmayı akıl ettiyseniz DPM DB yedeğini yeni bir DPM Server oluşturup üzerine dönmeyi deneyebilirsiniz, ama SQL Server + Active Directory bonuslarını da unutmayın. Şayet DPM Server’ı çalışır hale getirebilirseniz Azure Online Backup yapısına dahil edip DPM konsolundan Online Recovery Point’lere ulaşmayı deneyebilirsiniz; şahsen hiç başaramadım. Belki de benim beceriksizliğim :)

Sırf bu durum yüzünden ben aşağıdaki ufak SQL query’i kullanıyorum ve belirli aralıklarla otomatik olarak çalıştırıp oluşan çıktıyı felaket anında erişilebilecek bir noktada depoluyorum. (mesela bir mailbox veya uzak bir dosya sunucusu)

Select ag.NetbiosName as ServerName,ds.DataSourceName,vol.MountPointPath
from tbl_IM_DataSource as ds
join tbl_PRM_LogicalReplica as lr on ds.DataSourceId=lr.DataSourceId
join tbl_AM_Server as ag on ds.ServerId=ag.ServerId
join tbl_SPM_Volume as vol on lr.PhysicalReplicaId=vol.VolumeSetID
and vol.Usage =1
and lr.Validity in (1,2)

Bu SQL query sonucunda aşağıdaki gibi bir tablo oluşuyor. Buradaki MountPointPath’ler yukarıdaki FirendlyName’lerin cümle sonunda yer alır. Tam kafayı yemelik öyle değil mi?

azure-backup-alternatif-sunucuya-kuratma-powershell-3

Script’i oluşturmaya devam edersek… Index numarası 3 olan FileSystem\vol_e1f9d2e0-7ff3-4674-a8c8-1fd98beb2798\ FriendlyName’li source’a ait bir noktayı geri dönmek istiyorum. Peki hangi noktayı? O da başka bir array ve içerisindeki geri dönüş noktalarını listeleyelim.

(Get-OBRecoverableSource -Server $alternateBackupServers[0])[3] | Get-OBRecoverableItem

Çıktısı aşağıdaki gibi:

azure-backup-alternatif-sunucuya-kuratma-powershell-4

Bu Recoverable Source içerisinde tek bir Recoverable Item yer alıyor. Eğer birden fazla olsaydı yine 0,1,2,3 gibi index numaralarıyla seçim yapılabilirdi. Şu an tek item var ve index 0 onu temsil ediyor. Bu durumda scirpt’in ikinci satırında aşağıdaki gibi bir değişkene kurtarmak için seçtiğimiz parçayı (Recoverable Item) atayalım.

$recoveryPoint = ((Get-OBRecoverableSource -Server $alternateBackupServers[0])[3] | Get-OBRecoverableItem)[0]

3) Örneği geliştirmek adına şöyle bir ilave yapalım. Bir önceki adımda seçtiğimiz Recoverable Item içerisinde çok fazla veri var, ama ben sadece belirli bir folder ve altındaki verileri dönmek istiyorum. Mesela Files dizini altında HyperVReport isimli bir dizin olduğunu biliyorum ve sadece buna ihtiyacım var. Küçük boyutlu bu dizini geri dönmek için yüksek boyutlu tüm hiyerarşiyi dönmek istemiyorum çünkü hem zamanım yok hem de bant genişliğim sınırlı. Bunu sağlamak için Script içerisine üçüncü satır olarak aşağıdaki değişken atamasını ekliyorum.

$recoveryItemList = Get-OBRecoverableItem -SearchString * -Location “C:\Program Files\Microsoft System Center 2012 R2\DPM\DPM\Volumes\Replica\File System\vol_e1f9d2e0-7ff3-4674-a8c8-1fd98beb2798\9c8d1720-f2bf-4b21-8dfd-2fd7b2994657\Full\Files\HyperVReport” -RecoveryPoint $recoveryPoint

Yaptığı iş ise özetle şu: Bir önceki satırda $recoveryPoint değişkenine atanan geri dönüş noktası içerisinde, bu satırda -Location parametresiyle belirttiğim dizini bul ve sadece bu dizini (ve varsa alt dizinleri) içerisindeki verilerle birlikte yeni bir değişkene ata.

4) Şimdi kurtarma işlemi sırasında kullanılacak restore path (mesela d: sürücüsü) ve Passphrase bilgilerini değişkenlere atayalım. Aşağıda maskelenmiş alanı sizdeki uygun Passphrase bilgisiyle değiştirmeyi unutmayın. Script için dört ve beşinci satırlar:

$options = New-OBRecoveryOption -DestinationPath D:\ -OverwriteType CreateCopy -SkipRestoreSecurity
$key = ConvertTo-SecureString “XXXX-XXXX-XXXXX-XX-XXXXXXX-XXXX” -AsPlainText -Force

5) Son olarak ise önceki satırlarda çeşitli değişkenlere atadığımız bilgileri kullanarak kurtarma işlemini başlatacak satırı ekliyoruz.

Start-OBRecovery -RecoverableItem $recoveryItemList -EncryptionPassphrase $key -RecoveryOption $options

Ateş!

azure-backup-alternatif-sunucuya-kuratma-powershell-5

Ve mutlu son :) Script çalışmasını tamamladığında belirtmiş olduğum içeriği Azure Backup üzerinden alır ve belirtmiş olduğum yerel disk alanı içerisine döner.

Script’in tam hali şöyle:

# Coded by Serhat AKINCI
Import-Module MSOnlineBackup
$alternateBackupServers = (Get-OBAlternateBackupServer -VaultCredentials ‘C:\dpmvault1_17 Temmuz 2015 Cuma.VaultCredentials’)[2]
$recoveryPoint = ((Get-OBRecoverableSource -Server $alternateBackupServers[0])[3] | Get-OBRecoverableItem)[0]
$recoveryItemList = Get-OBRecoverableItem -SearchString * -Location “C:\Program Files\Microsoft System Center 2012 R2\DPM\DPM\Volumes\Replica\File System\vol_e1f9d2e0-7ff3-4674-a8c8-1fd98beb2798\9c8d1720-f2bf-4b21-8dfd-2fd7b2994657\Full\Files\HyperVReport” -RecoveryPoint $recoveryPoint
$options = New-OBRecoveryOption -DestinationPath D:\ -OverwriteType CreateCopy -SkipRestoreSecurity
$key = ConvertTo-SecureString “XXXX-XXXX-XXXXX-XX-XXXXXXX-XXXX” -AsPlainText -Force
Start-OBRecovery -RecoverableItem $recoveryItemList -EncryptionPassphrase $key -RecoveryOption $options

Ufak bir tavsiye: Bu gibi script’leri hızlıca oluşturacak tecrübeye sahip değilseniz gerektiğinde kullanmak üzere önceden hazırlamak ve hatta provalar yapmak (Disaster Recovery testleri gibi) iyi bir fikirdir. Çünkü gerçek bir felaket senaryosunda muhtemelen bu yazıyı bile okumaya fırsatınız olmayacak.

Yazı Etiketleri: , , ,

Sayfa Başı ▲

Yorum Ekle