Azure Availability Set ve Affinity Group
Azure konusunda sıkça aldığım sorulardan biri de Affinity Group ve Availability Set arasında ki farkın ne olduğu ve neden kullanıldıklarıdır. Eğer Azure veri merkezlerini gösteren video ve fotoğraflara baktıysanız yan yana bir sürü konteyner içerisinde fiziksel sunucuların olduğunu göreceksinizdir. Peki, bir VM yarattığımız zaman bu VM nerede yaratılıyor ve en önemlisi bir biriyle ilişkisi olan VM’leri nasıl yerleştirdiğidir.Bu bilgi bizim mantıksal tasarımı yaparken performans ve SLA değerlerini nasıl tutturacağımızı belirler.
İki farklı senaryo karşımıza çıkmaktadır. İlki VM’lerin mümkün olduğunca bir birine yakın veya aynı fiziksel katman üzerinde tutulması; ikincisiyse VM’lerin mümkün olduğu kadar birbirinden farklı fiziksel katmanlarda bulunmasını isteyebiliriz.
Affinity Group
Çok katmanlı bir uygulamamız varsa veri tabanı ve uygulama sunucularının maksimum performans ile çalışabilmeleri için bir birlerine mümkün olduğu kadar yakın çalışmaları gerekmektedir. Bunun için VM’lerin aynı affinity group içerisinde olması aralarında ki mesafeyi kısaltacağı için latency’i düşürmektedir.
Powershell yardımıyla Affinity group oluşturmak için “New-AzureAffinityGroup” kullanılmaktadır.
New-AzureAffinityGroup -Name WebApp -Location "North Europe" -Label "Finans Portali"
Affinity group’u yarattıktan sonra yeni bir VM yaratırken “-AffinityGroup” parametresini kullanarak VM’lerin aynı group içerisinde olmasını sağlayabiliriz.
$vmName = "finansApp" $vmConfig = New-AzureVMConfig -Name $vmName -InstanceSize “small” –ImageName “Windows Server 2012 R2 Datacenter” -AffinityGroup “WebApp” $vmConfig | Add-AzureProvisioningConfig -Windows -AdminUsername “emre” -Password “pass” New-AzureVM -ServiceName $serviceName -Location “North Europe” -VMs $vmConfigs
Alternatif olarak mevcut bir VM’i Affinity Group içerisine almak isteyebiliriz. Bunun içinde “Set-AzureAffinityGroup” komutunu kullanabiliriz.
Get-AzureVM -Name $vmName | Set-AzureAffinityGroup -Name "finansApp" |Update-AzureVM
Availability Set
Bazı uygulamalarımızda servislerimizi birden fazla VM üzerine kurup hem yük dağıtımında bulunur hem de iş sürekliğini yükseltmek isteriz, bunun en iyi örneği bir web uygulamasının front-end sunucularıdır. Bu sunucular yükü alıp arka tarafta ki DB veya uygulama sunucusuna aktarırlar ve en yüksek availability’i oluşturabilmek için birden fazla front-end sunucusu kurarak yükü dağıtmak isteyebiliriz. Peki, bu sunucuların hepsi aynı fiziksel sunucu üzerinde olursa ve bir güncelleme veya kesinti durumunda tüm servisimiz kesintiye uğrayabilir.
Azure bunun önüne geçebilmek için ve istediğimiz SLA seviyesini tutturabilmemiz için availability set ismini verdiği bir özellik sunmaktadır. Aynı availability set içerisinde ki VM’ler farklı fiziksel alanlarda tutularak donanım, güncelleme ve network sıkıntılarından minimum seviyede etkilenmesini sağlar.
Availability set’ler ilk VM yaratılırken onunla beraber yaratılmaktadır, bunun için New-AzureVMConfig içerisinde “-AvailabilitySetName” parametresini kullanmamız yeterlidir. Daha önce ki örneğimizin aynısını availability set ile tekrar çalıştıralım.
$vmName = "finansApp" $vmConfig = New-AzureVMConfig -Name $vmName -InstanceSize “small” –ImageName “Windows Server 2012 R2 Datacenter” –AvailabilitySetName “WebApp” $vmConfig | Add-AzureProvisioningConfig -Windows -AdminUsername “emre” -Password “pass” New-AzureVM -ServiceName $serviceName -Location “North Europe” -VMs $vmConfigs
Mevcut bir VM’in availability set’ini değiştirmek içinse aşağıda ki komutu kullanabiliriz.
Get-AzureVM -Name $vmName | Set-AzureAvailabilitySet -AvailabilitySetName "WebApp" |Update-AzureVM
Uyarı: VM’lerin Affinity Group ve Availability Set’lerini değiştirirken Azure farklı bir lokasyona kaydırmak zorunda kalırsa VM’ler yeniden başlayabilir.