O que é o Virtual Machine Scale Set?
O Azure virtual machine scale sets permite que você crie e gerencie um grupo de VMs com carga balanceada. O número de instâncias de VM pode aumentar ou diminuir automaticamente em resposta à demanda ou a uma programação definida. Os conjuntos de dimensionamento fornecem alta disponibilidade para seus aplicativos e permitem que você gerencie, configure e atualize centralmente um grande número de VMs.
Com Azure virtual machine scale sets, você pode criar serviços em grande escala para áreas como computação, big data e container workloads.
Porque usar o virtual machine scale sets?
Para fornecer redundância e desempenho aprimorado, os aplicativos são normalmente distribuídos em várias instâncias. Os clientes podem acessar seu aplicativo por meio de um balanceador de carga, que distribui as solicitações para uma das instâncias do aplicativo.
Se você precisar realizar manutenção ou atualizar uma instância do aplicativo, seus clientes devem ser distribuídos para outra instância do aplicativo disponível. Para acompanhar a demanda adicional do cliente, pode ser necessário aumentar o número de instâncias de aplicativo que executam seu aplicativo.
Scale sets fornecem os seguintes benefícios principais:
Facilidade em criar e gerenciar várias VMs
- Quando você tem muitas VMs que executam seu aplicativo, é importante manter uma configuração consistente em seu ambiente. Para um desempenho confiável do seu aplicativo, o tamanho da VM, a configuração do disco e as instalações do aplicativo devem corresponder a todas as VMs.
- Com conjuntos de escala, todas as instâncias de VM são criadas a partir da mesma imagem e configuração do sistema operacional de base. Essa abordagem permite gerenciar facilmente centenas de VMs sem tarefas de configuração adicionais ou gerenciamento de rede.
- Os conjuntos de dimensionamento oferecem suporte ao uso do balanceador de carga do Azure para distribuição básica de tráfego de camada 4. Oferecem também Gateway de Aplicativo do Azure para distribuição de tráfego de camada 7 mais avançada e terminação TLS.
Alta disponibilidade e resiliência do aplicativo
- Os conjuntos de escala são usados para executar várias instâncias do seu aplicativo. Se uma dessas instâncias de VM tiver um problema, os clientes continuam a acessar seu aplicativo por meio de uma das outras instâncias de VM com interrupção mínima.
- No caso de disponibilidade adicional, você pode usar Zonas de disponibilidade para distribuir automaticamente instâncias de VM em um conjunto de escala dentro de um único datacenter ou entre vários datacenters.
Aplicativo dimensionado automaticamente conforme a demanda de recursos
- A demanda do cliente por sua aplicação pode mudar ao longo do dia ou da semana. Os conjuntos de escala podem aumentar automaticamente o número de instâncias de VM conforme a demanda do aplicativo aumenta e, em seguida, reduzir o número de instâncias de VM conforme a demanda diminui.
- A escala automática também minimiza o número de instâncias de VM desnecessárias que executam seu aplicativo quando a demanda é baixa. Enquanto isso, os clientes continuam a receber um nível aceitável de desempenho conforme a demanda aumenta e instâncias de VM adicionais são adicionadas automaticamente. Essa capacidade ajuda a reduzir custos e criar recursos do Azure com eficiência, conforme necessário.
Funcionamento em grande escala
- Os conjuntos de dimensionamento oferecem suporte a até 1.000 instâncias de VM. Se você criar e fazer upload de suas próprias imagens de VM personalizadas, o limite é de 600 instâncias de VM.
- Para obter o melhor desempenho com cargas de trabalho de produção, use os Azure Managed Disks .
Diferenças entre máquinas virtuais e scale sets
Scale sets são construídos a partir de máquinas virtuais. Com scale sets, as camadas de gerenciamento e automação são fornecidas para executar e dimensionar seus aplicativos.
Você pode também criar e gerenciar manualmente VMs individuais ou integrar ferramentas existentes para construir um nível semelhante de automação. A tabela a seguir descreve os benefícios dos scale sets em comparação com o gerenciamento manual de várias instâncias de VM.
Importante!
Não há custo adicional para scale sets. Você paga apenas pelos recursos de computação subjacentes, como instâncias de VM, balanceador de carga ou armazenamento em disco gerenciado. Os recursos de gerenciamento e automação, como autoscale e redundância, não geram encargos adicionais sobre o uso de VMs.
Como monitorar seus scale sets
Use o Azure Monitor para VMs. O processo de integração é simples e irá automatizar a coleta de importantes contadores de desempenho de CPU, memória, disco e rede das VMs em scale set. Ele também inclui recursos de monitoramento adicionais e visualizações predefinidas que te ajudam a se concentrar na disponibilidade e no desempenho de seus conjuntos de balança.
Habilite o monitoramento de seu virtual machine scale set application com o Application Insights para coletar informações detalhadas sobre seu aplicativo. Isso inclui visualizações de páginas, solicitações de aplicativo e exceções. Verifique ainda mais a disponibilidade de seu aplicativo configurando um teste de disponibilidade para simular o tráfego do usuário.
O que é Auto-Scaling?
Auto-scaling é uma maneira de aumentar ou diminuir automaticamente e a qualquer momento o número de recursos de computação alocados para o seu aplicativo com base nas necessidades.
O ponto principal é poder projetar uma arquitetura escalonável que aumentará ou diminuirá automaticamente para atender às necessidades ao longo da vida útil da configuração, independentemente de quão rápido/lento ou grande/pequeno seu site cresce ao longo do tempo.
No Autoscaling , você deve especificar um número mínimo e máximo de instâncias para executar e adicionar ou remover VMs automaticamente com base em um conjunto de regras.
Quando as condições da regra são atendidas, uma ou mais ações de escala automática são acionadas. Você pode adicionar e remover VMs ou realizar outras ações.
Aqui estão as formas mais populares de escalonamento automático:
- Horizontal Scaling
- Vertical Scaling
Horizontal Scaling:
Horizontal Scaling é uma tecnologia obrigatória sempre que uma alta disponibilidade de serviços (de servidor) é necessária. Também chamado de scaling out and in, significa adicionar ou remover instâncias de um recurso.
O dimensionamento horizontal envolve adicionar mais unidades de processamento ou máquinas físicas ao servidor ou banco de dados. Envolve o aumento do número de nós no cluster. O aplicativo continua em execução sem interrupção conforme novos recursos são provisionados.
Se a demanda cair, os recursos adicionais podem ser desligados de forma limpa e desalocados.
Vertical Scaling:
O Vertical Scaling é uma tentativa de aumentar ou diminuir a capacidade de uma única máquina, também chamada de scaling up or down. Aqui, recursos como capacidade de processamento, armazenamento, memória e muito mais, são adicionados a uma unidade de trabalho existente.
Isso é feito para aumentar a capacidade do hardware ou software existente, adicionando recursos. Ele pode aprimorar seu servidor sem manipular seu código, mas é limitado por depender do tamanho do servidor. Você pode, por exemplo, mover um aplicativo para um tamanho de VM maior.
Autoscale Settings
Uma configuração de escala automática é lida pelo mecanismo de escala automática para determinar se deve aumentar ou diminuir a escala.
Você pode criar regras de escalonamento automático personalizadas conforme necessário para sua situação. Os tipos de regra incluem:
- Instância mínima: Número mínimo de instâncias que você deseja implantar em seu conjunto de dimensionamento.
- Máximo de instâncias: Número máximo de instâncias que você deseja implantar durante o dimensionamento. (Observação: no Azure, você pode ter até 1000 instâncias)
- Com base em métrica: Mede a carga do aplicativo e adiciona ou remove VMs com base nessa carga. Por exemplo, é possível adicionar instância na escala definida quando o uso da CPU estiver acima de 50%.
- Com base no horário: É possível, por exemplo, acionar uma instância a cada 8h no sábado em um determinado fuso horário.
Aqui estão alguns pontos importantes quando pensamos em usar escala horizontal ou escala vertical.
- O aumento de escala requer tempo de inatividade; neste caso, você precisa atualizar a configuração do servidor como RAM, memória, CPU, etc. Portanto, ao atualizar esta configuração, seu servidor requer tempo de inatividade. Assim que terminar a atualização, é necessário reiniciar o servidor.
- A ampliação aumentará o desempenho, mas não estará disponível porque é apenas uma instância e pode ser desativada a qualquer momento quando atinge as regras de escalonamento.
- O Scale-Out não requer tempo de inatividade. No Scale-out, novas instâncias de servidor são criadas. Ele não toca a instância existente, então nenhum tempo de inatividade é necessário.
- Expanda, aumente o desempenho e a disponibilidade também. Quando o escalonamento automático aumenta o número de instâncias para lidar com carga / solicitação usando balanceador de carga, aumenta o desempenho do servidor e também aumenta a disponibilidade.
Criar o virtual machine scale Set
Para testarmos a funcionalidade do virtual machine scalet set vamos configurar um WEB Server com IIS e simular um aumento nos recursos de hardware do servidor. Consequentemente, após a configuração realizada poderemos observar as instâncias sendo criadas e o acesso ao site sendo balanceado.
01 – Faça login no portal do Azure acessando https://portal.azure.com/
02 – Vamos criar a virtual network e subnet que será utilizada para o virtual machine scale set com o seguinte comando PowerShell.
No script abaixo estamos criando a rede virtual vnet-scale_set e subnet-scale_set, localizada no eastus no grupo de recursos RG-Scale_Set
# Criar Resource Group
New-AzResourceGroup -Name RG-Scale_Set -Location eastus
# Variável para criar subnet
$subnet = New-AzVirtualNetworkSubnetConfig -Name subnet-scale_set -AddressPrefix 192.168.1.0/24
# Criar virtual Network
New-AzVirtualNetwork -ResourceGroupName RG-Scale_Set
-Name vnet-scale_set
-Subnet $subnet
03 – No portal do Azure pesquise por virtual networks e que observe que a virtual network vnet-scale_set e subnet-scale_set foram criados com sucesso.
04 – Agora, vamos iniciar a criação do virtual machine scale sets. No portal do Azure pesquise por Virtual machine scale sets.
Você pode implantar o virtual machine scalet set de imagem para Windows Server ou Linux, como RHEL, CentOS, Ubuntu ou imagens personalizadas de uma galeria interna.
05 – Na tela Virtual Machine scale sets, clique em +Add para criar o recurso.
06 – Na tela Basics, selecione sua subscription, em seguida selecione o resource group que deseja armazenar esse recurso. Em nosso exemplo, vamos utilizar o resource group RG-Scale_Set. O próximo passo será escolher o nome para o virtual machine scale set. Vamos chamá-lo de VMSS-WebServer. Vamos provisionar o recurso na região (US) East US. Não vamos configurar Avaibility zone.
Para a opção Image, selecione a imagem do Windows Server 2019 Datacenter. Em Size iremos selecionar o tamanho da nossa máquina virtual. Aqui podemos definir opções como tamanho de memória e VCPU. Para as opções Username e Password, vamos definir o usuário e senha para fazer login na máquina virtual, em seguida clique em Next: Disks.
07 – Na tela Disks, você irá definir qual tipo de disco será utilizado pelo sistema operacional. Podemos escolher entre os tipos Premium SSD, Standard SSD e Standard HDD. Para nosso cenário, vamos utilizar o tipo Standard HDD. Em seguida clique em Next: Networking.
Para maiores informações sobre os tipos de discos, consulte o link abaixo.
https://docs.microsoft.com/pt-br/azure/virtual-machines/disks-types
08 – Na tela Networking, vamos selecionar a virtual network que criamos anteriormente a vnet-scale_set.
Para a opção Network interface, clique em +Create new nic. Observe que uma nova janela será aberta.
Em network interface selecione um nome para interface. Vamos utilizar o nome vnet-scale_set-nic. Em Subnet selecione a subnet-scale_set. Para a opção Nic network security group, deixe a opção Basic selecionada. Em Public inbound ports, selecione as portas 80, 443 e 3389. Para a opção Public IP address selecione Enabled. Como vamos instalar o IIS, será necessário um IP Publico para nosso site. Em seguida clique em Create.
OBSERVAÇÃO: A porta 80 será para acesso externo dos usuário ao nosso servidor WEB e a porta 3389 será utilizada para conectarmos nas VMS por RDP. Lembrando que não é uma boa prática de segurança liberar o acesso RDP para internet.
Em Load balancing, marque a opção Use a load balancer. Para a opção Load balancing options, deixe a opção Azure load balancer selecionada. Em Select a load balancer, clique em Create new. Em seguida, vamos selecionar um nome para o load balancer. Vamos chamá-lo de LB-VMSS_WebServer. Em Public IP address name, vamos selecionar o nome PIP-VMSS-WebServer. Em domain name, vamos utilizar o nome vmsswebserver. Em seguida clique em Create.
As opções SKU, Type e Availability zone já são definidas por padrão, ou seja, não estão disponíveis para alteração.
Nosso próximo passo será configurar o Backend pool. Em Select a backend pool, clique em Create new e digite um nome para o Pool. Vamos utilizar o nome bepool-VMSS. Em seguida, clique em Create.
No vídeo abaixo podemos observar como ficou configurado a guia Networking do virtual machine scalet set.
09 – Na tela Scaling, em Instânce –> Initial instance count, podemos escolher a quantidade de instâncias inicial. Vamos iniciar com 1 instância. Em Scaling, podemos escolher entre as opções Manual e Custom.
Nota:
A escala manual mantém uma contagem de instância fixa. A escala automática personalizada permite dimensionar a capacidade de conjuntos de escala de máquina virtual em qualquer programação, com base em qualquer métrica.
Vamos selecionar Scaling –> Custom. Para a opção minimum number of instances vamos iniciar com 1, para a opção maximum number of instances, defina a quantidade máxima de instâncias que serão criadas. Vou definir em nosso ambiente 3 instâncias no máximo.
Em Scale out, vamos definir a quantidade de uso do processador para criar uma instância. Por exemplo, quando o processador atingir um consumo de 75% durante 5 minutos, 1 instância será criada.
CPU threshold (%) = tempo de uso do processador para criar uma instância.
Duration in minutes = Duração do uso do processador para criar uma instância.
Number of instances to increase by = Número de instâncias que serão criadas após o processador permanecer com uso definido em CPU threshold (%) e Duration in minutes.
Para nosso exemplo, vamos definir os seguintes valores: CPU threshold (%) 75, Duration in minutes 5 e Number of instances to increase by 1.
Em Scale in, vamos definir a quantidade de uso do processador para remover uma instância. Por exemplo, quando o processador atingir um consumo de 25%, 1 instância será removida.
Para nosso exemplo, vamos definir os seguintes valores: CPU threshold (%) 25, e Number of instances to decrease by 1.
Para as opções Diagnostics logs e Scale-in policy, deixe as configurações padrão. Em seguida, clique em Next: Management.
No vídeo abaixo, podemos observar como ficou configurado a guia Scaling do virtual machine scalet set.
10 – Na guia Management, em Upgrade policy –> Upgrade mode, selecione Automatic – Instances will start upgrading immediately in random order. Em Monitoring — Boot diagnostics, marque Enabled with managed storage account (recomendaded). Em Automatic Os upgrades, marque a caixa de seleção Enable automatic OS upgrades. Deixe as demais configurações como padrão e clique em Next: Health.
11 – Na guia Health, marque Enable application health monitoring. Vamos deixar as configurações padrão. Em Automatic repair policy, marque Enabled automatic repairs e deixe a opção padrão para Grace período (mim). Em seguida, clique em Next: Advanced.
12 – Na guia Advanced, vamos definir duas configurações. Em Spreading algorithm, selecione Fixed spreading (not recommended with zones) e selecione o valor 2.
Nota:
Você pode definir o número de domínios de falha disponíveis para máquinas virtuais neste conjunto. As máquinas virtuais em diferentes domínios de falha têm uma fonte de alimentação separada e um switch de rede, o que ajuda a limitar o impacto de possíveis falhas de hardware ou interrupções de rede.
Em VM generation, vamos selecionar Gen 2. Como não vamos realizar a configuração de Tags, vamos clicar em Review + create.
13 – Na guia Review + create, observe se todas as configurações definidas estão corretas. Em seguida, clique em Create.
14 – Como podemos observar na imagem abaixo, nosso recurso está sendo provisionado.
15 – No ícone de notificação também podemos observar que nosso recurso está sendo provisionado.
16 – Como podemos observar na imagem abaixo, nosso recurso foi provisionado. Clique em Go to resource.
17 – Na tela VMSS-WebServe, em Overwiew, podemos verificar algumas informações sobre o recurso provisionado. Podemos observar a quantidade de instâncias que estão em execução como status. Também podemos verificar o tamanho da VM, sistema operacional, localização, IP Público e rede virtual e sub rede.
18 – Em settings –> Instances, podemos observar a quantidade de instâncias que estão provisionadas. Caso a VM atinja o valor de consumo de CPU de 70% em um intervalo de 5 minutos, outras instâncias serão criadas.
19 – Podemos verificar as informações de VMSS-WebServe_1 clicando em seu nome. Informações da instância como endereço IP Privado e Público. Sendo assim, podemos nos conectar nessa instância por RDP utilizando a porta 3389.
Observação: Definimos na configuração dos recursos que as instâncias teriam endereço IP Público e liberamos a porta 3389.
20 – Em Settings –> Scaling, podemos ajustar ou alterar as informações que foram definidas na criação do recurso. Podemos alterar o tipo de scale entre Manual scale ou Custom autoscale. Podemos definir o CPU threshould, duration in minutes, number of instances to increase by, CPU threshold e number of instances to decrease by, etc.
Configurar Web Server
Vamos instalar a feature do IIS e executar um script para mostrar na tela principal do IIS o nome do host.
Vamos logar na instância VMSS-WebServe_0 com seu endereço de IP Público por RDP
21 – Em Settings, clique em Instances e selecione a instância VMSS-WebServe_1. Em VMSS-WebServe_1 –> Overview, copie o endereço IP Público da instância.
22 – A tela de Download do RDP será aberta. Observe que está sendo informado o endereço IP Público da VM e número da porta. Clique em Download RDP File.
23 – Após baixar o arquivo RDP, faça login com usuário e senha definidos na configuração do scalet set.
24 – Na máquina VMSS-WebServe_1, abra o PowerShell com privilégios de administrador e execute os seguintes comandos:
# Instalar o IIS:
Install-WindowsFeature Web-server -IncludeManagementTools
#Configurar o Hostname na tela principal do IISos
Set-Content -Path “C:\inetpub\wwwroot\Default.htm” -Value $($env:computername)
Observe a execução do Script na imagem abaixo.
25 – Agora, vamos verificar se o IIS foi instalado e se a configuração de host name para o IIS está funcionando. Abra o Server Manager, clique em Local Server e em IE Enhanced Security Configuration.
Na tela Internet Explorer Enchanced Security Configuration, em Administrators, clique em Off.
Em seguida, abra o internet Explorer e digite localhost. Observe se a tela do IIS será exibida com o nome do host.
Testar o acesso ao site utilizando o endereço IP Público do load balancer
26 – No portal do Azure, pesquise por load balancers.
27 – Na tela Load balancers, selecione o LB-VMSS-WebServe.
28 – Na tela Overview, copie o Public IP address.
29- Coloque o IP Público do load balancer em seu navegador e observe se a tela do IIS será exibida com o nome da instância vmss-webs000001.
Funcionou? Então vamos para a próxima etapa!!!
Instalar aplicações no virtual machine scale sets no Azure PowerShell
Vamos executar o script abaixo para que todas as instâncias no scalet set tenham as mesmas configurações de IIS.
30 – Abra o azure cloud shell. Em seguida, clique em Open new session.
Observe que será aberta uma nova aba em seu navegador com o azure cloud shell.
31 – Execute o seguinte script no azure cloud shell:
Altere as informações no script para atender à sua demanda. Os seguintes valores devem ser alterados:
ResourceGroupName “RG-Scale_Set”
VMScaleSetName “VMSS-WebServe”
Para colocar no azure cloud shell, pressione as teclas CONTROL + SHIFT + V
#Set Script
$customConfig = @{
“fileUris” = (,”https://raw.githubusercontent.com/Azure-Samples/compute-automation-configurations/master/automate-iis.ps1″);
“commandToExecute” = “powershell -ExecutionPolicy Unrestricted -File automate-iis.ps1”
}
# Get information about the scale set
$vmss = Get-AzVmss
<span style="font-weight: 400;">-ResourceGroupName "RG-Scale_Set"
-VMScaleSetName “VMSS-WebServe”
# Add the Custom Script Extension to install IIS and configure basic website
$vmss = Add-AzVmssExtension
<span style="font-weight: 400;">-VirtualMachineScaleSet $vmss
-Name “customScript”
<span style="font-weight: 400;">-Publisher "Microsoft.Compute"
-Type “CustomScriptExtension”
<span style="font-weight: 400;">-TypeHandlerVersion 1.9
-Setting $customConfig
# Update the scale set and apply the Custom Script Extension to the VM instances
Update-AzVmss
<span style="font-weight: 400;">-ResourceGroupName "RG-Scale_Set"
-Name “VMSS-WebServe” `
-VirtualMachineScaleSet $vmss
Como podemos observar na imagem abaixo, o script foi executado com sucesso.
Testar o funcionamento do scalet set
Para testarmos o funcionamento do virtual machine scalet set, vamos baixar o software stressmypc. O software irá simular um consumo de 100% do processador. Sendo assim, quando o processador atingir 70% de uso, será criado uma nova instância para VM. O load balancer irá redirecionar as requisições do IIS para a nova instância.
32 – É possível baixar o stressmypc no seguinte endereço:
https://www.majorgeeks.com/files/details/stressmypc.html
33 – Após finalizar o download do stressmypc, execute-o.
34 – Abra o Task Manager do windows –> More details –> Performance. Em seguida, execute o software StressMyPC. Vamos observar o consumo do processador atingir 100% de uso. Para iniciar o teste de Stress do processador marque a opção StressMyPC.
Observem na imagem abaixo que o uso do processador antes de iniciarmos o teste de Stress é 2%.
35 – Marque as opções StressMyPC e Paint-Stress para iniciarmos o teste de Stress. Observe na imagem abaixo o consumo de CPU após utilizarmos o teste de Stress.
36 – Clique em Settings –> Instances. Como o uso do processador passou de 70% durante 5 minutos, novas instâncias estão sendo criadas.
38 – Digite o endereço IP Público do load balancer no navegador e veja em qual host o site está sendo direcionado.
Assim que a nova instância for criada, o hostname do site será alterado para o novo servidor.
40 – Como o limite de instâncias que definimos na política foi apenas 3, o scale set chegou em seu limite de instâncias. Agora o acesso ao site será balanceado entre as instâncias.
41 – Abra um navegador em modo anônimo, digite o endereço IP Público do load balancer e observe para qual host o site está sendo direcionado.
Observação: Estamos utilizando o navegador em modo anônimo por causa do cache de navegação do navegador.
Observe que as requisições foram direcionadas para a instância vmss-webs000003.
O teste funcionou como esperado!!!
42 – Vamos parar o teste de stress no servidor VMSS-WebServe_1. Com a redução do uso do processador para 25% ou menos, as instâncias criadas serão deletadas.
43 – Observe que todas as instâncias criadas por causa do alto consumo do processador foram deletadas, restando apenas uma única instância.
44 – Como era de se esperar, todas as requisições para o site voltaram a ser direcionadas para a instância vmss-webs000001.
Referências:
https://docs.microsoft.com/pt-br/azure/virtual-machine-scale-sets/overview
Espero que este conteúdo tenha contribuído com o enriquecimento do seu conhecimento em Azure.
Forte abraço, obrigado e até o próximo post.
Graduado em Informática Licenciatura pela Universidade Tiradentes, Pós Graduado em Administração e Segurança de Sistemas Computacionais pela Universidade Estácio de Sá, MBA em Gestão de Redes de Computadores pela FANESE, Certificações MCT, Azure Administrator, MCSE Core Infrastructure e MCSA Windows Server 2012, com mais de 07 anos de experiência em TI. Com conhecimento em Windows Server, Linux, Virtualização, Azure, Zabbix.