Managing Azure availability sets

Azure allows you to group virtual machines (VMs) in availability sets to distribute their placement across the underlying infrastructure. In this post, you will learn the basic concept of availability sets and how they relate to the fault domain (FD) and update domain (UD) concepts. Moreover, this article will describe how to create an availability set in the Portal and in PowerShell, and how to distribute traffic among VMs using Azure Load Balancer, Application Gateway, and Traffic Manager.

When it comes to providing availability, you’ll need to be aware of certain cases before moving your production environment, even in the cloud.

Types of failures in Azure

In an Azure cloud environment, we can talk about two types of failures you may have to face:

Continue Reading

Azure VM High Availability icin oneriler

Bulut teknolojilerini kullanarak uygulamalariniz konumlandirsak dahi her zaman yuksek erisilebilirlik ile ilgili ek planlama yapmamiz gerekiyor.

Eger uygulamanizi bir VM icersinde konumlandirip ardindan Azure uzerinden hizmet verir hale getirirseniz, ne yazik ki bu HA bir cozum olmaktan cok uzaktir. Cunku:

  • VM icerisinde uygulama yada OS seviyesinde gerceklesecek bir probleme karsi korumaniz bulunmuyor.
  • VM uzerinde gerceklesecek sanal donanim noktasindaki bir probleme karsi korumaniz bulunmuyor.
  • Her ne kadar Azure uzerinde de calissaniz, VMinizin uzerinde kostugu fiziksel sunucu, rack ve veri merkezinde gerceklesecek sorunlara karsi korumaniz bulunmuyor.

Bu sebeple her zaman onerilen minimum iki adet VM instance ile yola baslamaniz. Ancak bu yolun basi. Bunun sonrasinda uygulamanizin her bir tier’i icin HA planlamasi yapmaniz gerekiyor.

Bu noktada onerim daha once hakkinda birkac blog yazdigim Availability Set leri kullanmaya baslamaniz. Eger iki adet VMi bir AS icerisine yerlestirirseniz, Azure Service Fabric otomatik olarak bu VM leri farkli Fault ve Update Domainlere dagitacaktir. Bu ne demek?

Bu sayede Azure veri merkezinde fiziksel olarak gerceklesecek bir problemde yada planli yapilacak bir upgrade isleminde her zaman minimum 1 VM iniz aktif olarak calisacaktir.

Bir diger onerim, eger tierlariniz var ise (ornegin web, app ve db) her bir tier icin minimum iki VM konumlandirdiktan sonra her bir Tier uyelerini farkli AS lere dahil etmektir. Bu sayede herhangi bir sorun durumunda her Tier icerisinde mutlaka en az 1 VM aktif olacak ve uygulamaniz hizmet verir durumda olacaktir.

Ve tabiki her zaman Availability Setlerinizi Load Balancer ile kombinlemeniz. LB ayni zamanda kendi icerisinde gerceklestirdigi Health Check sayesinde sagliksiz olan uyeleri havuzdan cikaracaktir.

 

Manage Azure with Chef – Part 2: Generate a cookbook and recipe

In the previous part, we had a look at how to set up our Chef workstation machine. By the end of part 1, you should have been able to use the knife tool to access your Azure subscription. In this part, we are going to create our first cookbook and recipe. We will also be creating our first Azure VM, which will be using our cookbook.

As mentioned briefly in the previous article, cookbooks are the fundamental units that store the required configuration for your environment. We must store recipes in a cookbook and use it to define resources, attributes, and actions for target nodes.

Continue Reading

 

Manage Azure with Chef – Part 1: Install Chef on Windows

Chef is a popular configuration management tool developed in Ruby. It helps you create recipes that define how Chef should manage your infrastructure and applications. You can also use Chef to manage your Azure infrastructure. In today’s post, I will give a short overview of Chef and show you how to install it on Windows.

There are plenty of online resources to get up to speed on Chef. To get started, you can read this overview of the Chef components. In this series, I will focus mostly on managing Azure with Chef. In the upcoming posts, we are going to create recipes, cookbooks, and templates.

Chef overview

To automate your infrastructure in terms of configuration, deployment, and management, Chef uses small units of policies and configurations called cookbooks. In a cookbook, you can find several components like recipes, files, libraries, templates, and so on. A recipe is the most fundamental component in a cookbook and is simply a collection of resources that defines all requirements to configure a subset of your infrastructure. Chef maintains a collection of cookbooks, but you can also use thousands of community-maintained cookbooks with Chef.

To develop and test your cookbooks, you have to have at least one workstation. You need to use Chef Development Kit (ChefDK) on this workstation in order to have the required set of tools, including command-line utilities such as chef and knife. You can also use the popular Test Kitchen tool to test cookbook data across different platforms.

Continue Reading…

Azure PaaS Services – Lifecycle

Azure ile calisirken yasadigim en buyuk problemlerden bir tanesi, cuma gunu portali kapatip pazartesi gunu actigimda yeni 10 tane servis duyurusunu gorebilmenin cok olasi olmasi.

Microsoft’un Azure uzerine cok onemli yatirimlari var ve her ay onlarca farkli servis ve varolan servislere gelistirmeler ekleniyor.

Bunlarin en onemlilerinden bir tanesi bildiginiz gibi ARM tabanli yeni portal. V2 seklinde lanse edilen bu portal ile birlikte template bazli deployment yapabilir duruma geldik. Ancak asil problem eski portalin halen calisir durumda olmasi ve bazi servislerin yalnizca eski portalden bazi servislerin ise sadece yeni portalden calismaya devam etmesi.

Ornegin PaaS Cloud Services. Eski portal ile hayatimiza girmisti. Ancak yeni portale gectigimizde bunun yenilenmis ve gelistirilmis hali olan Azure App Servisi goruyoruz.

Bu blogda PaaS Cloud Service lifecycledan bahsetmek istiyorum cunku halen musterilerin ortamlarinda App Service yerine kullanimi devam etmekte.

Adindan anlasilacagi uzere PaaS Cloud Services, bir PaaS servisi. Yani tum altyapi Azure uzerinde ve Azure sorumlulugunda. Sizlere yalnizca uygulamalarizi gelistirmeye baslamak icin ortama baglanmak kaliyor.

Ozellikle VS ile entegrasyonu sayesinde saniyeler icerisinde lokalde calisan bir uygulamami Azure PaaS Service e deploy etmem mumkun.

Bir diger onemli avantajlarindan birisi ise sizlere farkli development ortamlari (slot) sunabilmesi. Cloud Services sayesinde uygulamanizi daha once olusturdugunuz dev, test yada production ortamlarina deploy edebilir, istediginiz zaman test yada dev ortamindaki uygulamayi production slotuna gecirebilirsiniz.

Bu noktada uygulamamin gelistirilmesi sirasindaki yasam dongusune bakmakta fayda var. Bu sayede hangi fazda Azure PaaS Servisinden yararlanacagimizi gorebiliriz.

  • Development sirasinda

Development sirasinda, yada baslangicinda genellikle development islemi yazilimcilarin yerel bilgisayarlarinda gerceklesir. Ilk testleri kendi laptoplarinda yaparlar, sirket icerisinde yada public olan bir version control sistemi sayesinde (GitHub) takimlar halinde calisabilirler.

Bu fazda onerim Azure storage ve compute emulatorlerinin kullanilmasi. Bu emulatorler VS ile direk entegre olarak calisabilir ve size Azure hizmetlerine baglanmadan sanki baglanmis gibi compute ve storage aksiyonlari almanizi saglar. Bu sayede gelistirdiginiz kod bir sonraki asamada Azure uzerinde de sorunsuz calisacaktir.

  • Staging sirasinda

Stagin safhasi bildiginiz gibi production ortamina gecmeden once ilgili uygulamayi test edebilecegimiz son viraj. Bu fazda acceptance testleri, performans testleri ve beta testleri gerceklestirilir.

Onerim, bu fazin tamamen Azure uzerinde olmasidir. Yani VS ile projeyi Azure uzerindeki staging slotuna publish edip testlerinizi orada gerceklestirebilirsiniz. Azure staging ortam icin size private bir URL verecektir. Sadece sizin bildiginiz bu URL sayesinde testlerinizi gerceklestirebilirsiniz.

  • Production

Azure’un nimetlerinden en cok yararlanacagimiz (auto-scale) faz production. Projeniz tamami ile Azure uzerinde kosmali, hatta metricler ile sinirlar belirleyerek projenizin scale up yada scale down islemlerini otomatik yapmasini saglayabilirsiniz.

PowerShell ile Azure External Load Balancer olusturulmasi

Asagidaki PowerShell komutu Azure izerinde yeni bir VNET, bu VNET icerisinde yeni bir subnet ve ardindan 443 uzerinden dagitim yapacak external bir Load Balancer olusturmaktadir.

Ayrica LB arkasindaki VM ler icin 3389 uzerinden erisim kurallari eklenmektedir.

createlb

New-AzureRMResourceGroup –Name AdatumRG –Location centralus
$vnet = New-AzureRMVirtualNetwork –ResourceGroupName AdatumRG –Name AdatumVnet
–AddressPrefix 192.168.0.0/16 –Location centralus
$backendSubnet=Add-AzureRmVirtualNetworkSubnetConfig -Name AdatumSubnet
-VirtualNetwork $vnet -AddressPrefix 192.168.1.0/24
Set-AzureRMVirtualNetwork –VirtualNetwork $vnet
$publicIP = New-AzureRmPublicIpAddress -Name PublicIp -ResourceGroupName AdatumRG
-Location centralus –AllocationMethod Static -DomainNameLabel loadbalancernrp
$frontendIP = New-AzureRmLoadBalancerFrontendIpConfig -Name LB-Frontend
-PublicIpAddress $publicIP
$beIPPool = New-AzureRmLoadBalancerBackendAddressPoolConfig -Name LB-backend
$inboundNATRule1= New-AzureRmLoadBalancerInboundNatRuleConfig -Name RDP1
-FrontendIpConfiguration $frontendIP -Protocol TCP -FrontendPort 3441 -BackendPort
3389
$inboundNATRule2= New-AzureRmLoadBalancerInboundNatRuleConfig -Name RDP2
-FrontendIpConfiguration $frontendIP -Protocol TCP -FrontendPort 3442 -BackendPort
3389
$healthProbe = New-AzureRmLoadBalancerProbeConfig -Name HealthProbe -RequestPath
'HealthDemo.aspx' -Protocol http -Port 80 -IntervalInSeconds 15 -ProbeCount 2
$lbrule = New-AzureRmLoadBalancerRuleConfig -Name HTTP -FrontendIpConfiguration
$frontendIP -BackendAddressPool $beIPPool -Probe $healthProbe -Protocol Tcp -
FrontendPort 443 -BackendPort 443
$LB = New-AzureRmLoadBalancer -ResourceGroupName AdatumRG -Name AdatumLB -Location
centralus -FrontendIpConfiguration $frontendIP -InboundNatRule
$inboundNATRule1,$inboundNATRule2 -LoadBalancingRule $lbrule -BackendAddressPool
$beIPPool -Probe $healthProbe

$backendnic1= New-AzureRmNetworkInterface -ResourceGroupName AdatumRG -Name lb-nic1
-Location centralus -PrivateIpAddress 192.168.1.6 -Subnet $backendSubnet
-LoadBalancerBackendAddressPool $lb.BackendAddressPools[0] -
LoadBalancerInboundNatRule $LB.InboundNatRules[0]
$backendnic2= New-AzureRmNetworkInterface -ResourceGroupName NRP-RG -Name lb-nic2-be
-Location 'West US' -PrivateIpAddress 192.168.1.7 -Subnet $backendSubnet
-LoadBalancerBackendAddressPool $lb.BackendAddressPools[0] -
LoadBalancerInboundNatRule $LB.InboundNatRules[1]

$backednic1.IpConfigurations[0].LoadBalancerBackendAddressPool=$beIPPool
$backednic2.IpConfigurations[0].LoadBalancerBackendAddressPool=$beIPPool
Set-AzureRmNetworkInterface –NetworkInterface $backednic1
Set-AzureRmNetworkInterface –NetworkInterface $backednic2

Azure VM JSON Template

Her gecen gun biraz daha Azure Resource Manager ile hasir nesir oluyorum ve yeteneklerini biraz daha kesfediyorum.

ARM tabanli Azure altyapi yonetiminin bircok avantaji bulunuyor. En onemlisi tum altyapinizi kod/template haline getirebiliyorsunuz. Bu sayede altyapiniz icin surumleme yapabilirsiniz.

Ornegin tum altyapi icin bir onceki surume donebilmeniz mumkun. Her bir Azure bileseni sizin sablonunuz icerisinde bir resource olarak bulunuyor ve bu resourcelar arasinda dependency olusturabiliyorsunuz. Bu sayede Azure Service Fabric ilgili bileseni olusturmadan once dependencyleri olusturmaya basliyor.

Diger faydalarini ayri bloglarda inceliyor olacagim. Asagida Azure uzerinde yeni nesil (IaaS V2) sanal makine olusturmak icin gerekli olan JSON sablonunu bulabilirsiniz.

4050-2

{
"$schema": "http://schema.management.azure.com/schemas/2014-04-01-
preview/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
 "newStorageAccountName": {
 "type": "string",
 "metadata": {
 "Description": "Unique DNS name for the storage account where the virtual
machine's disks will be placed."
 }
 },
 "adminUsername": {
 "type": "string",
 "metadata": {
 "Description": "User name for the virtual machine."
 }
 },
 "adminPassword": {
 "type": "securestring",
 "metadata": {
 "Description": "Password for the virtual machine."
 }
 },
 "dnsNameForPublicIP": {
 "type": "string",
 "metadata": {
 "Description": "Unique DNS Name for the Public IP used to access the virtual
machine."
 }
 },
 "windowsOSVersion": {
 "type": "string",
 "defaultValue": "2012-R2-Datacenter",
 "allowedValues": [ 
"2008-R2-SP1",
 "2012-Datacenter",
 "2012-R2-Datacenter",
 "Windows-Server-Technical-Preview"
 ],
 "metadata": {
 "Description": "The Windows version for the virtual machine. This will pick a
fully updated image of this given Windows version. Allowed values: 2008-R2-SP1, 2012-
Datacenter, 2012-R2-Datacenter, Windows-Server-Technical-Preview."
 }
 }
},
"variables": {
 "location": "West US",
 "imagePublisher": "MicrosoftWindowsServer",
 "imageOffer": "WindowsServer",
 "OSDiskName": "osdiskforwindowssimple",
 "nicName": "myVMNic",
 "addressPrefix": "10.0.0.0/16",
 "subnetName": "Subnet",
 "subnetPrefix": "10.0.0.0/24",
 "storageAccountType": "Standard_LRS",
 "publicIPAddressName": "myPublicIP",
 "publicIPAddressType": "Dynamic",
 "vmStorageAccountContainerName": "vhds",
 "vmName": "MyWindowsVM",
 "vmSize": "Standard_D1",
 "virtualNetworkName": "MyVNET",
 "vnetID":
"[resourceId('Microsoft.Network/virtualNetworks',variables('virtualNetworkName'))]",
 "subnetRef": "[concat(variables('vnetID'),'/subnets/',variables('subnetName'))]"
}

Azure SQL uzerinde firewall kurallarinin yonetilmesi

Azure SQL, Azure uzerinde sunulan PaaS servislerinden birisi. En onemli artisi, herhangi bir altyapi operasyonel gereksinimi istemeden sizin icin bir SQL Sunucu ve veritabanini saniyeler icerisinde hazirliyor olmasi.

Tabii ki hazirlanan bu DB ve sunucu ayni zamanda otomatik yedekleniyor ve uzak veri merkezlerine istenildigi takdirde async replice edilebiliyor.

Yerel veri merkezlerinde SQL sunucular icin HA saglamak adina yapilan kaynak yatirimlarini dusundugumuzde getirdigi faydalari daha iyi anlayabiliriz.

Azure SQL bir PaaS servisi oldugu icin uzerindeki kontrol imkanimiz da kisitli. Sizlere verilen connection string ve erisim bilgileri ile SQL Management Studio yada API araciligi ile sunucuya baglanabilir ve veritabaninizi goruntuleyebilirsiniz. Ardindan bu veritabanini kullanarak uygulama gelistirmeye baslamaniz kaliyor.

Fakat konu SQL oldugunda bazi yapilandirmalarin onceden gerceklestirilmesi gerekiyor. Ornegin kullanicilarin acilmasi, loginlerin olsuturulmasi yada firewall kurallarinin yapilandirilmasi gibi.

Bu blogda hizlica Azure SQL uzerinde firewall kurallarini nasil yonetebiliriz bundan bahsedecegim.

Oncelikle firewall kurallarini iki asamada yonetebilirsiniz. Sunucu ve veritabani seviyesinde.

Sunucu seviyesindeki firewall kurallari icin:

  • Management Studio icerisinden Azure SQL’e baglandiktan sonra master DB altinda sys.firewall_rules isimli bir system view goreceksiniz. Bu var olan firewall kurallarini sunucu seviyesinde gosterir.
  • Ayni sekilde iki adet stored procedure bulunuyor. sp_et_firewall_rule ve sp_delete_firewall_rule. Bu iki SP yi kullanarak kural eklemesi yada silinmesini gerceklestirebilirsiniz.

Veritabani seviyesinde de benzer bir durum var.

  • sys.database_firewall_rules system view ile goruntuleme yapabilirsiniz.
  • sp_set_database_firewall_rule ve sp_delete_database_firewall_rule ile silme ve editleme islemi gerceklestirebilirsiniz.

 

IT Prolar icin Azure Key Vault senaryolari

Bildiginiz gibi bir suredir Azure uzerinde Key Vault servisi aktif. Key Vault’un temel amaci sizlerin sahip oldugu kriptografik anahtarlari, sifreleri ve anahtarlari (ornegin azure storage key) guvenli bir sekilde barindirmak.

Hatta Azure AD ile entegre olarak Azure Key Vault erisimlerinde RBAC kullanabilirsiniz.

Genel resme bakildigin Key Vault’un en buyuk faydasinin uygulama gelistiriciler icin oldugu goruluyor. Key Vault sayesinde uygulama icerisinde gommek zorunda kaldiginiz, yada guvenli olmasi icin uygulamaya bir de encryption modulu eklediginiz senaryolarda artik Key Vault’u kullanip tum bu yuku Azure uzerindeki bu servise yukleyebilirsiniz.

Ancak IT Pro yada Infrastructure tarafinda da Key Vault icin gorulen birkac uygun senaryo bulunuyor.

En onemli senaryo Azure Disk Encryption. Bu servis sayesinde Azure uzerinde yer alan Windows yada Linux sanal makinelerinde volumelerini encrypt edebilirsiniz. Ek guvenlik yada regulasyon ihtiyaclari oldugunda bu servis ile tum disklerinizin ve verilerinizin sifrelendiginden emin olma sansiniz var. Ancak bu servisi kullandiginizda da size bir anahtar uretilmesi gerekmektedir. Her PKI yapisinda oldugu gibi sizin private anahtari guvenli bir sekilde barindirmaniz gerekiyor.

Bu noktada Key Vault kullanmaniz cok mantikli bir senaryo olacaktir. Azure Disk Encryption ile disklerinizi sifreledikten sonra size uretilen anahtari da Azure Key Vault icerisinde tutarak maksimum guvenlige erisebilme imkaniniz bulunuyor.

Azure VM Disk Yapisi

Gecenlerde verdigim Azure egitiminden bir sunumu burada paylasmak istedim.

Bu cok begendigim bir resim cunku tek sayfada aslinda Azure VM tarafindaki disk yapilandirmasini bizlere aciklayabiliyor. Hizlica uzerinden gecelim.

  • Bildiginiz gibi Azure uzerinde veri tutmaya baslamak icin oncelikle Storage Account olusturmaniz gerekiyor. Bununla ilgili detayli seriler daha once yazmistim. Bu storage account icerisinde ardindan ihtiyaciniza gore table, blob, queue yada file hizmetlerini kullanabilirsiniz.

 

  • Azure VM lerinin diskleri storage account icerisinde blob hizmetinde tutulmaktadir. Daha detaya inersek Blob tarafinda Azure icerisinde uc farkli hizmetiniz var.
    • Append Blob
    • Page Blob
    • Block Blob

Azure VM leri disklerini page blob icerisinde tutulur. Page blob random read-write icin optimize edilmis ozel bir servistir.

  • Resimde goruldugu gibi sanal makineyi baslattiginiz anda size C:\ diski ve temporary bir D diski verilecektir. En onemli noktalardan birisi asla D:\ surucusunu kritik bilgiler icin kullanmamaniz. Bu VMin uzerinde calistigi fiziksel sunucudaki yerel bir disktir. Bu yuzden herhangi bir durumda VM’iniz baska bir fiziksel sunucuya tasindiginda otomatik olarak yeni bir D:\ surucusu size atanacaktir.

 

  • C:\ ve ek olarak eklediginiz data diskleri Azure Blob storage uzerinde tutulur. Bu sayede ayni datacenter icerisinde de uc tane farkli kopyasini bulundurma sansiniz var.

 

  • Data diskinizin boyutu maksimum 1TB olabilir. Eger bundan daha fazla diske ihtiyaciniz varsa Windows sunucular uzerinde Storage Spaces kullanarak (RAID benzeri teknoloji) birden fazla data diskini tek bir pool haline getirebilirsiniz.