Powershell ve Azure Network Kontrolü Part 2
Bu yazımda daha önce değinmiş olduğum Powershell ile Azure VM’lerinin Network yönetimine biraz daha detaylı olarak bakacağız. Bu yazımı okumdan önce ilk kısmı okumanızı tavsiye ederim.
İlk önce yaratmış olduğumuz birden fazla VM arasında nasıl Load Balance yapabileceğimizi inceleyelim. Load Balance kavramı bildiğiniz gibi network ve servis yapılarının temel kavramlarından biridir, servislerimizi büyüttükçe ihtiyaç duyduğumuz sunucu sayısı da aynı oranla artmaktadır. Doğal olarak hizmeti sunucular arasında dağıtabilmeli ve yük dağılımının mümkün olduğunca otomatik ve dengeli olmasını isteriz.
Yukarıda ki şekli incelediğimiz zaman bir Web sayfasını talep eden kullanıcı ilk önce Azure Load Balancer’ından geçmesi gerektiğini görürüz. Bu noktada Load Balancer gelen trafiğe bakıp hangi VM’lerle eşleştiğini kontrol eder ve buna göre uygun bir VM’e trafiği yönlendirir. Şu an için Azure Load balance algoritması olarak sadece Round robin desteklemektedir. Ek olarak birden fazla VM arasında LB yapmak istiyorsak VM’lere tanımladığımız Endpointlerinin public portlarının ve –LBSetName parametrelerinin aynı olması gereklidir.
Load balance yaratmak için gerekli olan powershell komutu
Get-AzureVM –ServiceName vmTest –Name Web1 | Add-AzureEndpoint -Name "Web" -Protocol tcp -LocalPort 80 -PublicPort 80 -LBSetName "lbWeb" –DefaultProbe Get-AzureVM –ServiceName vmTest –Name Web2 | Add-AzureEndpoint -Name "Web" -Protocol tcp -LocalPort 80 -PublicPort 80 -LBSetName "lbWeb" –DefaultProbe
Daha önce ki yazılarda yaptığımıza ek olarak endpoint eklerken –LBSetName kullanarak load balancer’ıma bir isim tanımladım. Her iki VM’ede aynı isimle LB eklediğimiz zaman artık 80. Port üzerinden gelen trafik iki VM arasında paylaştırılacaktır.
Health Probes :
Bu kavram aslında Load Balance’a bağlı bir kavramdır. Eğer LB arkasında ki bir veya birden fazla VM için tanımladığımız port hizmet veremeyecek duruma gelirse LB health probe’ların yardımıyla bunu algılayacak ve gelen trafiği bu VM için durdurup,ayakta olan VM’lere yollayacaktır. Bu sayede servis kesintisinin önüne geçildiği gibi gayet yüksek bir kullanıcı deneyimi de sağlanmaktadır.
Ön tanımlı olarak Health Probe şu şekilde çalışmaktadır:
- LB her 15 saniyede bir VM’i kontrol eder
- VM’den ACK cevabının gelmesini bekler
- ACK cevabını alamazsa VM’e doğru olan trafiği keser
- Her 15 saniyede bir VM’i kontrol etmeye devam eder
Eğer bir endpoint yaratırken –DefaultProbe parametresini kullanırsak, Localport ile aynı port üzerinden çalışacak TCP destekli bir probe yaratmaktadır. Olurda LocalPort’dan farklı bir portu dinleyecek Probe istiyorsak –PropeProtocol ve -ProbePort parametrelerini kullanmalıyız.
Get-AzureVM –ServiceName vmTest –Name Web1 | Add-AzureEndpoint -Name "Web" -Protocol tcp -LocalPort 80 -PublicPort 80 -LBSetName "lbWeb" –ProbeProtocol tcp –ProbePort 8080
HTTP Health Probes:
Web uygulamaları için ekstradan bir kontrol noktası daha bulunmaktadır. Yazdığımız bir kontrol sayfası sayesinde web uygulaması içerisinde ki her şeyin düzgün çalışıp çalışmadığını kontrol edebilir ve gerekirse o VM’e doğru olan trafiği durdurabiliriz. http health probe port çağrısı yerine bir web sayfasını çağırmaktadır ve eğer çağırdığı web sayfası http 200 cevabını dönüyorsa trafiği bu VM’e yollamaya devam edecektir. http Health Probe kullanmak için –ProbeProtocol olarak http atanmalı ve kontrol edilecek sayfa –ProbePath olarak tanımlanmalıdır.
Get-AzureVM –ServiceName vmTest –Name Web1 | Add-AzureEndpoint -Name "Web" -Protocol tcp -LocalPort 80 -PublicPort 80 -LBSetName "lbWeb" –ProbeProtocol http –ProbePort 80 –ProbePath ‘/probeCheck.aspx’
Health Probe Zaman Değerleri:
Son olarak bazı uygulamalar için ön tanımlı olan kontrol süresi olan 15 saniye ve cevap bekleme süresi olan 30 saniye yeterli gelmemektedir. Bu değerleri de istersek değiştirmemiz mümkündür.
-ProbeTimeIntervalInSeconds: Bu parametre LB’nin ilgili port/http kontrolünü kaç saniyede bir yapacağını belirler minimum değeri 5 saniyedir.
-ProbeTimeoutInSeconds: Bu parametre LB’nin ilgili port/http kontrolünü yaptıktan sonra cevap gelmesi için kaç saniye beklemesi gerektiğini belirler. Minimum değeri 10 saniyedir. Aynı zamanda bu değeri değiştirerek belli bir performansın altına düşen VM’leri direk servisten düşürmek içinde kullanabilirsiniz, özellikle çok yoğun ziyaretçisi olan web sayfalarında kullanıcı deneyimi açısından kullanılabilir.
Get-AzureVM –ServiceName vmTest –Name Web1 | Add-AzureEndpoint -Name "Web" -Protocol tcp -LocalPort 80 -PublicPort 80 -LBSetName "lbWeb" –ProbeProtocol http –ProbePort 80 –ProbePath ‘/probeCheck.aspx’ –ProbeTimeIntervalInSeconds 60 –ProbeTimeoutInSecounds 60
Load Balance edilmiş Endpoint’lerde değişiklik yapmak:
Daha önce bir endpoint’de nasıl değişiklik yapabileceğimizi konuşmuştuk. LB yapılmış endpointlerin toplu olarak değiştirilmesi mümkündür. Bunun için Set-AzureLoadBalancedEndpoint komutu kullanılmaktadır ve her hangi bir VM’i belirtmek yarın sadece dâhil olduğu Azure Service adını bilmemiz yeterlidir.
Set-AzureLoadBalancedEndpoint –ServiceName vmTest –ProbeProtocol http –LBSetName “IIS” –ProbePath “/probeCheck.aspx”