Azure ortamında barındırılan ve üzerinde SQL Server yüklü Windows sanal makineleriniz için ek olarak sunulan SQL VM Resource Provider ve SQL Server IaaS Agent (SQLIaaSAgent), bu makineler üzerindeki SQL Server’a yönelik yönetimsel işleri otomatize etme imkânı sunar. SQL Server IaaS Agent ile şu işleri otomatize edebilirsiniz:
- Default instance üzerinde bulunan SQL veri tabanlarını otomatik yedekleme
- SQL Server ve yüklü olduğu Windows için çıkan önemli yamaları otomatik yükleme (yükleme aralıklarını belirleme)
- Azure Key Vault entegrasyonu
- SQL Server sürümleri arasında ve lisanslama modelleri arasında geçiş yapmak
Bu işlemlerin hepsini Azure’da farklı hizmetlerle ve konfigürasyonlarla yapmak mümkün; SQL Server VM Resource Provider, SQL IaaS Agent ile beraber bunları merkezi bir arayüzden kolayca yönetmenizi sağlıyor.
Yakın zamana kadar SQL VM Resource Provider ve beraberinde gelen bu özellikleri kullanmak için Azure Marketplace’te sunulan ve içerisinde SQL Server ön yüklü gelen imajlardan bir sanal makine kurulumu yapmak gerekiyordu, çünkü sadece bu imajlarla kurulan makineler SQL VM Resource Provider hizmetine kaydediliyordu. Yani marketplace’ten salt bir Windows Server makine oluşturup, üzerine kendiniz ISO dosyası ile SQL Server kurduğunuzda veya sysprep ile hazırladığınız bir VHD dosyasını Azure’a upload edip o VHD’den kurduğunuz sanal makinelerde bu hizmetlerden faydalanamıyordunuz. Artık bu iki durum için de SQL VM Resoruce Provider hizmetine kaydolup SQL Server IaaS Agent’ı kurabiliyor ve bütün özelliklerinden faydalanabiliyorsunuz.
Burada SQL Server IaaS Agent ve SQL VM Resource Provider’ı birbirinden ayırmak gerekiyor. Bütün bu bahsettiğim özellikleri SQL VM’lerinizde kullanmak için ilk şart makinenizi SQL VM Resource Provider hizmetine kaydettirmek. Bu işlem yapılırken seçeceğiniz yönetim seviyesine (management mode) SQL IaaS Agent kuruluyor ve desteklenen özellikler artıyor.
SQL VM Resource Provider ve IaaS Agent’ı aşağıda belirtilen işletim sistemi ve SQL sürümlerini destekliyor:
İşletim Sistemi:
Windows Server 2012
Windows Server 2012 R2
Windows Server 2016
Windows Server 2019
SQL Server sürümleri:
SQL Server 2012
SQL Server 2016
SQL Server 2017
SQL Server 2019
SQL Server 2008 ve 2008 R2 için kısıtlı da olsa sunulan özellikler var. Yönetim seviyelerinden bahsederken buna da değineceğim.
SQL VM Resource Provider
SQL VM Resource Provider, Azure üyeliği (subscription) seviyesinde aktif hale getirilmesi gereken bir özelliktir ve bu özelliği aktif hale getirdiğinizde üyeliğinizde sanal makine objelerine ek olarak SQL Sanal Makinesi (SQL virtual machine) objesi de oluşturulur. Bir nevi SQL Server yüklü makinelerinizi ayrı bir panelden yönetmenizi sağlar. Makalenin başında da belirttiğim gibi Azure Marketplace’ten SQL Server ön yüklü bir makine oluşturduğunuzda bu makineler otomatikman söz konusu kaynak sağlayıcıya kaydolur ve SQL Server IaaS Agent yüklenir. Bu yöntem dışında oluşturduğunuz sanal makineleri bu kaynak sağlayıcıya kaydettirmeniz gerekir. Kaydettirme sonrasında şu özellikler geliyor:
- Otomatik yedekleme, yama yükleme, izleme ve yönetimsel özelliklerle beraber lisanslama ve sürüm değiştirme esnekliği.
- Lisans bildirim formlarını gereksiz hale getirerek Microsoft’a Azure’da kendi SQL lisansınızı kullandığınızı (Azure Hybrid Benefit) bildirme imkânı.
- Yönetim seviyelerinin hepsi ve bunların arasında geçiş ücretsizdir. Dolayısıyla Azure’da ek maliyet oluşmaz.
- Azure portal/CLI/Powershell ile hangi SQL Server’larınızın Hybrid Benefit kullandığını hızlıca görmenizi sağlar
Her ne kadar resmi kaynaklarda belirtilmemiş olsa da otomatik yedekleme özelliğini kullandığınızda storage account’tan ötürü bir depolama bedeli oluşacaktır. Yüksek bir maliyet olmamasına karşın göz önünde bulundurmak lazım.
Yönetim Seviyeleri (Management Modes)
SQL Server yüklü sanal makinenizi kaynak sağlayıcıya kaydettirdiğinizde seçtiğiniz yönetim seviyesine göre SQL Server IaaS eklentisi kurulur. Eğer bir yönetim seviyesi seçmezseniz eklenti otomatikman kurulur. Eklentinin yüklenmesi durumuna bu kadar detaylı değinmemin sebebi, yüklendiği zaman SQL Server servisini otomatikman yeniden başlatmasıdır ve bu da üretim ortamları için istediğimiz bir şey değildir. Yönetim seviyeleri ve işlevleri şunlardır:
- Lightweight (hafif) seviyesinde SQL Server servisinin yeniden başlatılmasına ihtiyaç yoktur; sadece SQL VM Resource Provider’a kaydolunur. Bu seviye birden çok instance’a sahip veya Failover Cluster’a (FCI) dahil olan SQL sunucular için kullanılabilir. Makinenin işlemci ve bellek kaynaklarına bir etkisi yoktur. SQL Server sanal makinenizi önce lightweight seviyede kaydettirip bakım zamanı aralığında Full (tam) seviyeye yükseltmeniz tavsiye edilir.
- Full (tam) seviye, bütün işlevselliğin sunulduğu ve dolayısıyla SQL Server servisinin yeniden başlatılmasına ihtiyaç duyulan seviyedir. SQL IaaS eklentisini el ile kurduğunuzda geçerli kurulum seçeneği budur. Makinenin CPU ve belleğine minimum seviyede etkisi bulunan iki adet servis (SqlIaaSExtensionQuery ve SQLIaaSExtension) kurulur.
- NoAgent (eklentisiz) seviyesi ise Windows Server 2008 üzerine kurulu SQL Server 2008 ve 2008 R2 için sınırlı yönetimsel imkanlar sunan seviyedir.
Yönetim seviyelerine uygulama aşamasında tekrar değineceğim.
Bu kadar ön bilgiden sonra artık uygulamaya geçelim. Örneğimizde Azure ortamında bir adet sanal makinemiz var. Bu makine, galeriden hazır Windows Server 2019 imajıyla kuruldu ve üzerine ISO’dan SQL Server 2019 Enterprise yüklendi. Aynı adımları siz de yapın ve sonrasında beraber ilk adım olan Azure üyeliğinizde SQL VM Resource Provider’a etkinleştirme aşamasını yapalım.
Client makinenize Azure Powershell kurun veya Azure portalda doğrdan Azure Powershell çalıştırın. Ben client makinemde kurulu Powershell Core ve Azure Powershell modülü ile ilerleyeceğim. Bağlantı linklerini aşağıda paylaşıyorum.
Powershell Core:
https://github.com/PowerShell/PowerShell
Azure Powershell’i kurmak için Powershell Core’u yönetici haklarıyla açıp şu komutu çalıştırın:
Install-Module -Name Az -AllowClobber -Scope AllUsers
Bu aşamadan sonra aşağıdaki komut ile Azure Powershell’de oturum açalım.
Login-AzAccount
Daha önceden Powershell Core ile Az powershell modülünü kullanmamış kişiler için kısa açıklama: Yukardaki komutu girdikten sonra ekranda belirtildiği gibi https://microsoft.com/devicelogin adresine bir web tarayıcı üzerinden girip yine ekrandaki güvenlik kodunu yazdıktan sonra kimlik bilgilerinizle giriş yapmanız gerekiyor.
Oturum açma işleminden sonra aşağıdaki komutu girerek üyeliğimizde SQL VM Resource Provider özelliğini aktif hale getirelim.
Register-AzResourceProvider -ProviderNamespace Microsoft.SqlVirtualMachine
Bu işlemi Azure portaldan yapmak isterseniz “Subscriptions –> Resource Providers –> Microsoft.Sql.VirtualMachine” yolunu takip ederek “Register” butonuna basın.
Artık SQL makinemizi bu resource provider’a kaydettirebiliriz:
$vm = Get-AzVM -Name <makine_ismi> -ResourceGroupName <kaynak_grubu_ismi>
New-AzSqlVM -Name $vm.Name -ResourceGroupName $vm.ResourceGroupName -Location $vm.Location -LicenseType AHUB -SqlManagementType LightWeight
İlk komut ile sanal makinemizin ismini ve kaynak grubunu bir değişken içerisine aldık. İkincisi ile de resource provider’a Lightweight seviyede kaydettirdik. Bu işlem bir herhangi bir yeniden başlatma gerektirmeyecektir.
Bu seviyede yapılabilecekleri görmek adına Azure panelde “All Services” altından “SQL Virtual Machines”i bulalım.
Ekran görüntüsünde görüldüğü gibi bu seviyede sadece lisans türü üzerinde değişiklik yapılabiliyor.
Bu görüntüde de PAYG (Pay as you go) ve AHUB (Azure Hybrid Benefit) ve SQL sürümleri arasında geçiş yapabileceğimizi görüyoruz. Ben verdiğim örnekte SQL lisansım olduğu için AHUB parametresini kullandım. Eğer lisansınız yoksa PAYG seçip lisans ücretinin Azure üyeliğinize yansıtılmasını sağlayabilirsiniz. Lightweight seviyesinde yapılabilecekler bundan ibaret.
Gelelim bütün özelliklerin aktif olduğu “Full” seviyeye. Bu işlem SQL IaaS eklentisinin kurulumunu gerektirdiği için SQL Server servisi yeniden başlatılacaktır. Dolayısıyla bu işlemi çalışma saatlerinizin dışında yapmanızı tavsiye ediyorum. Lightweight seviyeden Full seviyeye yükseltme yapmak için aşağıdaki komutları girelim:
$vm = Get-AzVM -Name <makine_ismi> -ResourceGroupName <kaynak_grubu_ismi>
Update-AzSqlVM -Name $vm.Name -ResourceGroupName $vm.ResourceGroupName -SqlManagementType Full
Eğer bu işlemi Azure portal üzerinden yapmak isterseniz, “SQL Virtual Machines” altından sanal makinenizi seçin ve sırayla ekran görüntülerinde işaretlediğim yerlere basın.
Makinenizin SQL Resource Provider’a başarılı bir şekilde kaydolup olmadığını aşağıdaki komutla öğrenebilirsiniz:
Get-AzSqlVM -Name <makine_ismi> -ResourceGroupName <kaynak_grubu_ismi>
Ekran görüntüsünde mevcut SQL bilgilerini görebiliyoruz.
SQL Virtual Machines kısmına geldiğinizde artık bütün seçeneklerin aktif hale geldiğini göreceksiniz. “Configure” sekmesine girdiğinizde mevcut lisans durumu, SQL sürümü ve veri tabanı dosyalarının depolama birimleri üzerindeki durumunu görebilirsiniz.
“Security” kısmında SQL sunucunuza bağlanma seçeneklerinizi belirleyebilirsiniz. İster internete (public), VNet üzerinden lokal erişime (Private) veya sadece makine içinden (Local) erişime açabilirsiniz. “SQL authentication” aktif hale getirebilirsiniz ve Azure Key Vault hizmetine entegre edebilirsiniz.
“Patching” kısmında önemli Windows ve SQL Server güncellemelerinin ne zaman otomatik olarak yükleneceğini belirleyebilirsiniz. Unutmayın ki sadece önemli olarak derecelendirilmiş güncelleştirmeler yüklenir; SQL Server Cumulative Update gibi kapsamlı güncelleştirmeleri manüel olarak yapmalısınız.
Şayet Recovery Services Vault ile makinenizin içerisindeki SQL veri tabanlarını yedeklemiyorsanız “Backups” kısmından bir storage account’a otomatik yedekleme yaptırabilirsiniz. Sistem veri tabanlarını da yedeklettirebilir, full backup ve log backup ayarlarını manüel olarak ayarlayabilirsiniz. Eğer full backup/log backup ayarını otomatikte bırakırsanız log dosyasındaki büyümeye göre bu işlemler otomatik olarak yapılacaktır. “Encryption” seçeneği ile alınan yedeklerin şifrelenmesini sağlayabilirsiniz.
“Additional features” kısmında SQL sunucunuzu R Services ile entegre edebilirsiniz.
NoAgent seviyesine gelirsek bu seviyede Windows Server 2008 üzerine kurulmuş SQL Server 2008 ve 2008 R2 veri tabanı sunucularını kısıtlı bir özellik seti ile Azure portaldan izleme imkanı sağlanmaktadır. Aşağıdaki komutlar ile NoAgent seviyesini etkinleştirebilirsiniz:
$vm = Get-AzVM -Name <makine_ismi> -ResourceGroupName <kaynak_grubu_ismi>
New-AzSqlVM -Name $vm.Name -ResourceGroupName $vm.ResourceGroupName -Location $vm.Location -LicenseType PAYG -SqlManagementType NoAgent -Sku Standard -Offer SQL2008R2-WS2008
Böylece yönetim seviyelerinin özelliklerine ve bunları nasıl etkinleştirebileceğinize değinmiş olduk.
Şayet ilerleyen zamanlarda SQL makinelerinizi SQL VM Provider hizmetinden çıkarmak isterseniz aşağıdaki komutu çalıştırabilirsiniz. Bu komut sadece aradaki bağı silecektir; sanal makine objesi silinmeyecektir.
Remove-AzSqlVM -ResourceGroupName <kaynak_grubu_ismi> -Name <makine_ismi>
Aynı işlemi Azure portaldan yapmak isterseniz “SQL Virtual Machines” altına girin ve sanal makineye tıkladığınızda “Overview” kısmında çıkan “Delete” butonuna basın. Çıkan son doğrulama penceresinde silinmesini istemediğinizi sanal makinenin yanındaki kutucuğun tikini kaldırın. Kaldırmazsanız sanal makine de beraberinde silinir.
Her iki yöntemle de makineler SQL VM Resource provider’dan çıkarılır ve SQL IaaS eklentisi kaldırılır.
NoAgent seviyesinden Lightweight veya Full seviyesine geçiş mümkün değildir. Bunu yapabilmeniz için öncelikle işletim sistemini Windows Server 2008 R2 veya üzeri bir işletim sistemine yükseltmeniz gerekiyor. Bunu yaptığınızda Full seviyeye geçebilirsiniz.
Birden çok instance’a sahip bir SQL Server ortamınız varsa bunlardan sadece default instance olanı Full yönetim seviyesinde kullanılabilir. Eğer default instance kullanmadıysanız sadece Lightweight seviyesini kullanabilirsiniz. Ortamınız bir Failover Cluster ortamı ise yine sadece Lightweight modu kullanabilirsiniz; fakat AlwaysOn Availibility Groups kullanırsanız herhangi bir kısıtlama olmaksızın istediğiniz yönetim seviyesini kullanabilirsiniz.
Elimden geldiğince SQL Server Resource Provider hizmetini anlatmaya çalıştım. Faydalı olması dileğiyle.
Referanslar: