Creare un set di scalabilità di macchine virtuali e distribuire un'app a disponibilità elevata in WindowsCreate a Virtual Machine Scale Set and deploy a highly available app on Windows

Un set di scalabilità di macchine virtuali consente di distribuire e gestire un set di macchine virtuali identiche con scalabilità automatica.A virtual machine scale set allows you to deploy and manage a set of identical, auto-scaling virtual machines. È possibile ridimensionare manualmente il numero di VM nel set di scalabilità o definire regole di scalabilità automatica in base all'utilizzo delle risorse, ad esempio la CPU, alla richiesta di memoria o al traffico di rete.You can scale the number of VMs in the scale set manually, or define rules to autoscale based on resource usage such as CPU, memory demand, or network traffic. In questa esercitazione viene distribuito un set di scalabilità di macchine virtuali in Azure.In this tutorial, you deploy a virtual machine scale set in Azure. Si apprenderà come:You learn how to:

  • Usare l'estensione dello script personalizzata per definire un sito IIS da ridimensionareUse the Custom Script Extension to define an IIS site to scale
  • Creare un bilanciamento del carico per il set di scalabilitàCreate a load balancer for your scale set
  • Creare un set di scalabilità di macchine virtualiCreate a virtual machine scale set
  • Aumentare o diminuire il numero di istanze in un set di scalabilitàIncrease or decrease the number of instances in a scale set
  • Creare regole di scalabilità automaticaCreate autoscale rules

Questa esercitazione richiede il modulo Azure PowerShell 3.6 o versioni successive.This tutorial requires the Azure PowerShell module version 3.6 or later. Eseguire Get-Module -ListAvailable AzureRM per trovare la versione.Run Get-Module -ListAvailable AzureRM to find the version. Se è necessario eseguire l'aggiornamento, vedere Installare e configurare Azure PowerShell.If you need to upgrade, see Install Azure PowerShell module.

Informazioni generali sui set di scalabilitàScale Set overview

Un set di scalabilità di macchine virtuali consente di distribuire e gestire un set di macchine virtuali identiche con scalabilità automatica.A virtual machine scale set allows you to deploy and manage a set of identical, auto-scaling virtual machines. Le macchine virtuali di un set di scalabilità vengono distribuite in domini logici di errore e di aggiornamento in uno o più gruppi di posizionamento.VMs in a scale set are distributed across logic fault and update domains in one or more placement groups. Si tratta di gruppi di VM configurate in modo simile, analoghi ai set di disponibilità.These are groups of similarly configured VMs, similar to availability sets.

Le macchine virtuali vengono create in base alle esigenze in un set di scalabilità.VMs are created as needed in a scale set. È possibile definire regole di scalabilità automatica per controllare le modalità e i tempi di aggiunta e rimozione delle VM dal set di scalabilità.You define autoscale rules to control how and when VMs are added or removed from the scale set. Queste regole possono essere attivate in base a determinate metriche, ad esempio il carico della CPU, l'utilizzo della memoria o il traffico di rete.These rules can trigger based on metrics such as CPU load, memory usage, or network traffic.

I set di scalabilità supportano fino a 1.000 VM quando si usa un'immagine della piattaforma Azure.Scale sets support up to 1,000 VMs when you use an Azure platform image. Per i carichi di lavoro con requisiti significativi di installazione o personalizzazione di VM, si consiglia di creare un'immagine di VM personalizzata.For workloads with significant installation or VM customization requirements, you may wish to Create a custom VM image. È possibile creare fino a 300 macchine virtuali in un set di scalabilità quando si usa un'immagine personalizzata.You can create up to 300 VMs in a scale set when using a custom image.

Creare un'app per la scalabilitàCreate an app to scale

Per poter creare un set di scalabilità è prima necessario creare un gruppo di risorse con il comando New-AzureRmResourceGroup.Before you can create a scale set, create a resource group with New-AzureRmResourceGroup. L'esempio seguente crea un gruppo di risorse denominato myResourceGroupAutomate nella posizione EastUS:The following example creates a resource group named myResourceGroupAutomate in the EastUS location:

New-AzureRmResourceGroup -ResourceGroupName myResourceGroupScaleSet -Location EastUS

In un'esercitazione precedente si è appreso come automatizzare la configurazione della VM usando l'estensione dello script personalizzata.In an earlier tutorial, you learned how to Automate VM configuration using the Custom Script Extension. Creare una configurazione del set di scalabilità e quindi applicare un'estensione dello script personalizzata per installare e configurare IIS:Create a scale set configuration then apply a Custom Script Extension to install and configure IIS:

# Create a config object
$vmssConfig = New-AzureRmVmssConfig `
    -Location EastUS `
    -SkuCapacity 2 `
    -SkuName Standard_DS2 `
    -UpgradePolicyMode Automatic

# Define the script for your Custom Script Extension to run
$publicSettings = @{
    "fileUris" = (,"https://raw.githubusercontent.com/Azure-Samples/compute-automation-configurations/master/automate-iis.ps1");
    "commandToExecute" = "powershell -ExecutionPolicy Unrestricted -File automate-iis.ps1"
}

# Use Custom Script Extension to install IIS and configure basic website
Add-AzureRmVmssExtension -VirtualMachineScaleSet $vmssConfig `
    -Name "customScript" `
    -Publisher "Microsoft.Compute" `
    -Type "CustomScriptExtension" `
    -TypeHandlerVersion 1.8 `
    -Setting $publicSettings

Creare un bilanciamento del carico di scalabilitàCreate scale load balancer

Azure Load Balancer è un bilanciamento del carico di livello 4 (TCP, UDP) che offre disponibilità elevata mediante la distribuzione del traffico in ingresso fra le VM integre.An Azure load balancer is a Layer-4 (TCP, UDP) load balancer that provides high availability by distributing incoming traffic among healthy VMs. Un probe di integrità del bilanciamento del carico monitora una determinata porta in ogni VM e distribuisce il traffico solo a una VM operativa.A load balancer health probe monitors a given port on each VM and only distributes traffic to an operational VM. Per altre informazioni, vedere l'esercitazione successiva in Come bilanciare il carico delle macchine virtuali di Windows.For more information, see the next tutorial on How to load balance Windows virtual machines.

Creare un bilanciamento del carico con un indirizzo IP pubblico che distribuisce il traffico Web sulla porta 80:Create a load balancer that has a public IP address and distributes web traffic on port 80:

# Create a public IP address
$publicIP = New-AzureRmPublicIpAddress `
  -ResourceGroupName myResourceGroupScaleSet `
  -Location EastUS `
  -AllocationMethod Static `
  -Name myPublicIP

# Create a frontend and backend IP pool
$frontendIP = New-AzureRmLoadBalancerFrontendIpConfig `
  -Name myFrontEndPool `
  -PublicIpAddress $publicIP
$backendPool = New-AzureRmLoadBalancerBackendAddressPoolConfig -Name myBackEndPool

# Create the load balancer
$lb = New-AzureRmLoadBalancer `
  -ResourceGroupName myResourceGroupScaleSet `
  -Name myLoadBalancer `
  -Location EastUS `
  -FrontendIpConfiguration $frontendIP `
  -BackendAddressPool $backendPool

# Create a load balancer health probe on port 80
Add-AzureRmLoadBalancerProbeConfig -Name myHealthProbe `
  -LoadBalancer $lb `
  -Protocol tcp `
  -Port 80 `
  -IntervalInSeconds 15 `
  -ProbeCount 2

# Create a load balancer rule to distribute traffic on port 80
Add-AzureRmLoadBalancerRuleConfig `
  -Name myLoadBalancerRule `
  -LoadBalancer $lb `
  -FrontendIpConfiguration $lb.FrontendIpConfigurations[0] `
  -BackendAddressPool $lb.BackendAddressPools[0] `
  -Protocol Tcp `
  -FrontendPort 80 `
  -BackendPort 80

# Update the load balancer configuration
Set-AzureRmLoadBalancer -LoadBalancer $lb

Creare un set di scalabilitàCreate a scale set

Ora si può creare un set di scalabilità di macchine virtuali con New-AzureRmVmss.Now create a virtual machine scale set with New-AzureRmVmss. Nell'esempio seguente viene creato un set di scalabilità denominato myScaleSet:The following example creates a scale set named myScaleSet:

# Reference a virtual machine image from the gallery
Set-AzureRmVmssStorageProfile $vmssConfig `
  -ImageReferencePublisher MicrosoftWindowsServer `
  -ImageReferenceOffer WindowsServer `
  -ImageReferenceSku 2016-Datacenter `
  -ImageReferenceVersion latest

# Set up information for authenticating with the virtual machine
Set-AzureRmVmssOsProfile $vmssConfig `
  -AdminUsername azureuser `
  -AdminPassword P@ssword! `
  -ComputerNamePrefix myVM

# Create the virtual network resources
$subnet = New-AzureRmVirtualNetworkSubnetConfig `
  -Name "mySubnet" `
  -AddressPrefix 10.0.0.0/24
$vnet = New-AzureRmVirtualNetwork `
  -ResourceGroupName "myResourceGroupScaleSet" `
  -Name "myVnet" `
  -Location "EastUS" `
  -AddressPrefix 10.0.0.0/16 `
  -Subnet $subnet
$ipConfig = New-AzureRmVmssIpConfig `
  -Name "myIPConfig" `
  -LoadBalancerBackendAddressPoolsId $lb.BackendAddressPools[0].Id `
  -SubnetId $vnet.Subnets[0].Id

# Attach the virtual network to the config object
Add-AzureRmVmssNetworkInterfaceConfiguration `
  -VirtualMachineScaleSet $vmssConfig `
  -Name "network-config" `
  -Primary $true `
  -IPConfiguration $ipConfig

# Create the scale set with the config object (this step might take a few minutes)
New-AzureRmVmss `
  -ResourceGroupName myResourceGroupScaleSet `
  -Name myScaleSet `
  -VirtualMachineScaleSet $vmssConfig

La creazione e la configurazione di tutte le macchine virtuali e risorse del set di scalabilità richiedono alcuni minuti.It takes a few minutes to create and configure all the scale set resources and VMs.

Test dell'appTest your app

Per vedere il sito Web IIS in azione, ottenere l'indirizzo IP pubblico del servizio di bilanciamento del carico con il comando Get-AzureRmPublicIPAddress.To see your IIS website in action, obtain the public IP address of your load balancer with Get-AzureRmPublicIPAddress. L'esempio seguente ottiene l'indirizzo IP per myPublicIP creato come parte del set di scalabilità:The following example obtains the IP address for myPublicIP created as part of the scale set:

Get-AzureRmPublicIPAddress -ResourceGroupName myResourceGroupScaleSet -Name myPublicIP | select IpAddress

Immettere l'indirizzo IP pubblico in un Web browser.Enter the public IP address in to a web browser. Verrà visualizzata l'app, con il nome host della VM a cui il servizio di bilanciamento del carico ha distribuito il traffico:The app is displayed, including the hostname of the VM that the load balancer distributed traffic to:

Esecuzione del sito IIS

Per verificare il funzionamento del set di scalabilità, è possibile imporre l'aggiornamento del Web browser per visualizzare la distribuzione del traffico da parte del bilanciamento del carico tra tutte le VM che eseguono l'app.To see the scale set in action, you can force-refresh your web browser to see the load balancer distribute traffic across all the VMs running your app.

Attività di gestioneManagement tasks

Nel ciclo di vita del set di scalabilità, potrebbe essere necessario eseguire una o più attività di gestione.Throughout the lifecycle of the scale set, you may need to run one or more management tasks. Si potrebbe anche voler creare script per automatizzare le attività di ciclo di vita.Additionally, you may want to create scripts that automate various lifecycle-tasks. Azure PowerShell offre un modo rapido per eseguire queste operazioni.Azure PowerShell provides a quick way to do those tasks. Di seguito vengono illustrate alcune attività comuni.Here are a few common tasks.

Visualizzare le VM in un set di scalabilitàView VMs in a scale set

Per visualizzare l'elenco delle VM in esecuzione nel set di scalabilità, usare Get-AzureRmVmssVM come indicato di seguito:To view a list of VMs running in your scale set, use Get-AzureRmVmssVM as follows:

# Get current scale set
$scaleset = Get-AzureRmVmss `
  -ResourceGroupName myResourceGroupScaleSet `
  -VMScaleSetName myScaleSet

# Loop through the instanaces in your scale set
for ($i=1; $i -le ($scaleset.Sku.Capacity - 1); $i++) {
    Get-AzureRmVmssVM -ResourceGroupName myResourceGroupScaleSet `
      -VMScaleSetName myScaleSet `
      -InstanceId $i
}

Aumentare o diminuire le istanze delle macchine virtualiIncrease or decrease VM instances

Per visualizzare il numero di istanze attualmente presenti in un set di scalabilità, usare il comando Get-AzureRmVmss ed eseguire una query su sku.capacity:To see the number of instances you currently have in a scale set, use Get-AzureRmVmss and query on sku.capacity:

Get-AzureRmVmss -ResourceGroupName myResourceGroupScaleSet `
    -VMScaleSetName myScaleSet | `
    Select -ExpandProperty Sku

È possibile quindi aumentare o ridurre manualmente il numero di macchine virtuali nel set di scalabilità con Update-AzureRmVmss.You can then manually increase or decrease the number of virtual machines in the scale set with Update-AzureRmVmss. L'esempio seguente imposta il numero di VM del set di scalabilità su 5:The following example sets the number of VMs in your scale set to 5:

# Get current scale set
$scaleset = Get-AzureRmVmss `
  -ResourceGroupName myResourceGroupScaleSet `
  -VMScaleSetName myScaleSet

# Set and update the capacity of your scale set
$scaleset.sku.capacity = 5
Update-AzureRmVmss -ResourceGroupName myResourceGroupScaleSet `
    -Name myScaleSet `
    -VirtualMachineScaleSet $scaleset

Sono necessari alcuni minuti per aggiornare il numero specificato di istanze del set di scalabilità.If takes a few minutes to update the specified number of instances in your scale set.

Configurare le regole di scalabilità automaticaConfigure autoscale rules

Anziché scalare manualmente il numero di istanze del set di scalabilità, si definiscono regole di scalabilità automatica.Rather than manually scaling the number of instances in your scale set, you define autoscale rules. Queste regole monitorano le istanze nel set di scalabilità e rispondono di conseguenza in base alle metriche e alle soglie definite.These rules monitor the instances in your scale set and respond accordingly based on metrics and thresholds you define. L'esempio seguente scala orizzontalmente il numero di istanze di uno quando il carico della CPU medio è maggiore del 60% per un periodo di 5 minuti.The following example scales out the number of instances by one when the average CPU load is greater than 60% over a 5 minute period. Se il carico della CPU medio scende poi sotto il 30% per un periodo di 5 minuti, le istanze vengono ridotte di una:If the average CPU load then drops below 30% over a 5 minute period, the instances are scaled in by one instance:

# Define your scale set information
$mySubscriptionId = (Get-AzureRmSubscription).Id
$myResourceGroup = "myResourceGroupScaleSet"
$myScaleSet = "myScaleSet"
$myLocation = "East US"

# Create a scale up rule to increase the number instances after 60% average CPU usage exceeded for a 5 minute period
$myRuleScaleUp = New-AzureRmAutoscaleRule `
  -MetricName "Percentage CPU" `
  -MetricResourceId /subscriptions/$mySubscriptionId/resourceGroups/$myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/$myScaleSet `
  -Operator GreaterThan `
  -MetricStatistic Average `
  -Threshold 60 `
  -TimeGrain 00:01:00 `
  -TimeWindow 00:05:00 `
  -ScaleActionCooldown 00:05:00 `
  -ScaleActionDirection Increase `
  -ScaleActionValue 1

# Create a scale down rule to decrease the number of instances after 30% average CPU usage over a 5 minute period
$myRuleScaleDown = New-AzureRmAutoscaleRule `
  -MetricName "Percentage CPU" `
  -MetricResourceId /subscriptions/$mySubscriptionId/resourceGroups/$myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/$myScaleSet `
  -Operator LessThan `
  -MetricStatistic Average `
  -Threshold 30 `
  -TimeGrain 00:01:00 `
  -TimeWindow 00:05:00 `
  -ScaleActionCooldown 00:05:00 `
  -ScaleActionDirection Decrease `
  -ScaleActionValue 1

# Create a scale profile with your scale up and scale down rules
$myScaleProfile = New-AzureRmAutoscaleProfile `
  -DefaultCapacity 2  `
  -MaximumCapacity 10 `
  -MinimumCapacity 2 `
  -Rules $myRuleScaleUp,$myRuleScaleDown `
  -Name "autoprofile"

# Apply the autoscale rules
Add-AzureRmAutoscaleSetting `
  -Location $myLocation `
  -Name "autosetting" `
  -ResourceGroup $myResourceGroup `
  -TargetResourceId /subscriptions/$mySubscriptionId/resourceGroups/$myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/$myScaleSet `
  -AutoscaleProfiles $myScaleProfile

Per altre informazioni di progettazione sull'uso della scalabilità automatica, vedere Procedure consigliate per la scalabilità automatica.For more design information on the use of autoscale, see autoscale best practices.

Passaggi successiviNext steps

In questa esercitazione è stato creato un set di scalabilità di macchine virtuali.In this tutorial, you created a virtual machine scale set. Si è appreso come:You learned how to:

  • Usare l'estensione dello script personalizzata per definire un sito IIS da ridimensionareUse the Custom Script Extension to define an IIS site to scale
  • Creare un bilanciamento del carico per il set di scalabilitàCreate a load balancer for your scale set
  • Creare un set di scalabilità di macchine virtualiCreate a virtual machine scale set
  • Aumentare o diminuire il numero di istanze in un set di scalabilitàIncrease or decrease the number of instances in a scale set
  • Creare regole di scalabilità automaticaCreate autoscale rules

Passare all'esercitazione successiva per maggiori informazioni sui concetti di bilanciamento del carico per le macchine virtuali.Advance to the next tutorial to learn more about load balancing concepts for virtual machines.