Azure Azure WVD

Auto Scaling Tool ile WVD Maliyatlerinizi Düşürün

Avatar
Written by Emre Martin

Yakın bir süre önce yayınlanan Windows Virtual Desktop Scaling aracını ile WVD ortamında bulunan session host makinalarınızı ölçeklendirebilirsiniz (Scaling). Ölçeklendirme yoğunluğun az olduğu saatlerde (Peek off)  Session Host makinalarının kapatılarak,  yoğun saatlere gelindiğinde (Peak hours) tekrar başlatılması anlamına gelmektedir. Büyük yapılarda WVD ortamını ölçeklendirmek ciddi bir tasarruf sağlayacaktır. Ölçeklendirme aracı ile;

  • CPU/Core başına düşen oturum sayısına göre session host makinalarınızı genişletebilirsiniz. Genişletebilirsiniz diyorum çünkü ölçeklendirme aracı cpu/core başına düşen oturum sayısına göre session host’ları durduramıyor sadece ihtiyaç olması halinde başlatabiliyor.
  • Minimum Session Host değeri belirleyerek yoğun olmayan saatlerde X adet session host makinasının hizmet vermesini ve diğer session host makinalarının kapatılmasını sağlayabilirsiniz.
  • Peak-off/Peak hours saatlerine göre session host makinalarının durdurulmasını ve tekrardan başlatılmasını sağlayabilirsiniz.

Masaüstü ölçeklendirme aracı Logic App ve Azure otomasyon alt yapısı üzerinde çalışır. Ölçeklendirme aracı her çalıştığında, Logic App bir webhook aracılığı ile otomasyonu başlatarak runbook tarafından bir job oluşturulmasını sağlar. 

Ölçeklendirme Aracı Nasıl Çalışır ?

Yoğun çalışma saatlerinde (Peak-hours) ölçeklendirme aracı mevcut session sayısını ve her bir host pool içerisindeki çalışır durumda olan session host’ların kapasitesini kontrol edererek SessionThresholdPerCPU parametresinde belirlenen değer ile karşılaştırır. Eğer çalışır durumda olan session host makinaları mevcut session’lar için yetersiz ise host pool içerisinden yeni bir session host makinası başlatılır. *SessionThresholdPerCPU parametresi bir session host’un sahip olacağı session sayısını kısıtlayamaz sadece yük dengelemesi için yeni bir session host makinasının ne zaman başlatılması gerektiğini belirler.

Yoğun çalışma saatleri dışında (Peak Off) ölçeklendirme aracı MinimumNumberOfRDSH parametresindeki değeri kontrol ederek kapatılması gereken session host makinalarını belirler. LimitSecondsToForceLogOffUser parametresi sıfır harici bir değere sahipse session host makinası Drain Mode’a çekerek yeni kullanıcıların bu session host’a bağlanması engeller. Ayrıca oturum açmış mevcut kullanıcılara bir bilgilendirme göndererek belirlenen süre sonunda oturumlarını kapatmaları için kullanıcıları zorlar. Gönderilecek bilgilendirme mesajı LogOffMessageTitle ve LogOffMessageBody parametresi ile ayarlanır.

Tüm kullanıcı oturumları sonlandırıldıktan sonra iligli session host makinası kapatılarak drain mode tekrardan pasif duruma getirilir. Eğer LimitSecondsToForceLogOffUser parametresi sıfır olarak ayarlandıysa ölçeklendirme aracı ilgili Group Policy’nin (Computer Configuration > Policies > Administrative Templates > Windows Components > Remote Desktop Services > Remote Desktop Session Host > Session Time Limits) oturum kapatma işlemlerini tamamlamasını bekler.

*Ölçeklendirme aracı yoğun çalışma saatleri (Peak-hours) ve yoğun çalışma saatleri dışında (Peak Off) yapacağı ölçeklendirme işlemi için host pool yük dengeleme modunu breadth-first yaparak ölçeklendirme işlemi gerçekleştirir. Öllçeklendirme aracı ayrıca gün içerisinde belirli aralıklarla Host Pool MaxSessionLimit değerini kontrol ederek, bu kapasitenin % 90’da ulaşması durumunda yeni session host makinalarının başlatılmasına karar verir.

Limitasyonlar:

  • Bu araç sadece Pooled Host Pool içerisindeki session host makinalarını ölçeklendirebilir.
  • Ölçeklendirme aracı ile yönetilen session host’lar her hangi bir Azure bölgesinde olabilir ancak sadece Automation account ve Logic App kaynaklarının bulunduğunu Azure üyeliği altındaki session host’ları ölçeklendirebilir.
  • Sadece ARM model WVD dağıtımlarda kullanılabilir.

Kullanımı son derece basit olan ölçeklendirme aracında kullanacağınız script’te buradan ve yapılandırma adımlarına buradan erişebilrisiniz. 


Ben Mevcut script’te aşağıdaki gibi bir hata ile karşılaştım:

Following lines caused an error for me on the script : (line 132-138)
}
Get the Role Assignment of the authenticated user
$RoleAssignments = Get-AzRoleAssignment -SignInName $AzContext.Account -ExpandPrincipalGroups
if (!($RoleAssignments | Where-Object { $_.RoleDefinitionName -in @(‘Owner’, ‘Contributor’) })) {
throw ‘Authenticated user should have the Owner/Contributor permissions to the subscription’
}


Script içerisinde hataya sebeb olan bu satırların script’i çalıştırdığım kullancının hedef ortamdaki izinleri kontrol ettiğini düşünüyorum (Script’ti çalıştırdığım kullanıcı Azure üyeliği üzerinde Owner yetkisine sahip guest olarak eklenmiş bir kullanıcı) çözüm olarak bu satırları script içerisinden kaldırdım 😊

Ölçeklendirme aracı ile kullanmanız gereken parametreler:

  • BeginPeakTime: WVD ortamının yoğun olarak kullanılacağı saat aralığının başlangıcı.
  • EndPeakTime: WVD ortamının yoğun kullanımının biteceği saat aralığı.
  • LimitSecondsToForceLogOffUser: Yoğun çalışma saatleri dışında ölçeklendirme aracı tarafından kapatılacak session host’larda bulunan oturumların sonlandırılmadan önce beklenecek süre. (Saniye olarak)
  • LogOffMessageBody – LogOffMessageTitle: Oturum kapatmaya zorlanacak kullanıcılara gönderilecek bilgilendirme mesajı ve mesaj başlığı.
  • MinimumNumberOfRDSH: Yoğun çalışma saatleri dışında çalışır durumda kalması gereken minimum session host sayısı. Bu değerden fazla olan session host’lar kapatılacaktır.
  • SessionThresholdPerCPU: Bu değer ne zaman yeni bir session host makinasının başlatılması gerektiğini belirler. CPU başına Belirlenen bu değere ulaşılması durumunda yeni session bir session host başlatılır.

Kaynak: https://docs.microsoft.com/en-us/azure/virtual-desktop/set-up-scaling-script

Görüşmek üzere.

Yazar Hakkında

Avatar

Emre Martin

Cloud Solutions Architect