Configure o balanceamento de carga entre regiões para servidores Web do Microsoft IIS


Este tutorial descreve como usar um balanceador de carga de aplicações externo para distribuir tráfego para servidores Web dos Microsoft Internet Information Services (IIS) em execução em VMs do Compute Engine aprovisionadas em diferentes regiões.

Objetivo

Este tutorial mostra como equilibrar a carga de tráfego para o site www.example.com e garantir que:

  • Os pedidos recebidos são encaminhados para a região mais próxima.
  • Se uma instância falhar ou atingir a respetiva capacidade, o balanceador de carga encaminha os pedidos para outras instâncias com capacidade de resposta na mesma região ou numa região diferente.

A configuração para este cenário usa um Application Load Balancer externo que recebe pedidos através de um único endereço IP global. Este endereço IP pode encaminhar cada pedido recebido por tipo de ligação, ou seja, HTTP ou HTTPS. Para pedidos HTTPS, o balanceador de carga implementa a encriptação SSL/TLS entre o cliente que envia o pedido e o balanceador de carga.

O diagrama seguinte mostra a arquitetura do balanceador de carga:

Balanceamento de carga entre regiões.

Tenha em atenção que o equilibrador de carga inclui vários componentes para uma configurabilidade máxima. Para uma descrição do que cada componente faz, consulte a vista geral do balanceador de carga de aplicações externo.

Este tutorial mostra como concluir as seguintes tarefas para alcançar o seu objetivo:

  • Configure as instâncias de back-end.
  • Crie e configure o serviço de balanceamento de carga.
  • Envie tráfego para os backends.
  • Restringir o acesso aos backends.
  • Simule uma indisponibilidade.

Custos

Neste documento, usa os seguintes componentes faturáveis do Google Cloud:

  • Compute Engine virtual machine (VM) instances
  • Compute Engine persistent disks
  • Optional: Google-managed SSL certificate
  • Windows Server 2016 machine images

Para gerar uma estimativa de custos com base na sua utilização projetada, use a calculadora de preços.

Os novos Google Cloud utilizadores podem ser elegíveis para uma avaliação gratuita.

Quando terminar as tarefas descritas neste documento, pode evitar a faturação contínua eliminando os recursos que criou. Para mais informações, consulte o artigo Limpe.

Antes de começar

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Compute Engine, BigQuery, and Cloud Firestore APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. Install the Google Cloud CLI.

  6. Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.

  7. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the Compute Engine, BigQuery, and Cloud Firestore APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  11. Install the Google Cloud CLI.

  12. Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.

  13. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  14. Em alternativa, pode usar o Cloud Shell no Google Cloud console para interagir com Google Cloud. Neste caso, não tem de instalar a CLI do Google Cloud.
  15. Instale um cliente do protocolo de ambiente de trabalho remoto (RDP). Para mais informações, consulte o artigo Clientes do Ambiente de Trabalho Remoto da Microsoft. Se já tiver um cliente RDP instalado, pode ignorar esta tarefa.
  16. Decida as zonas e as regiões onde quer aprovisionar os seus recursos. O diagrama de arquitetura mostra os recursos implementados nas diferentes zonas nas regiões dos EUA e da UE. Isto serve apenas para referência. Pode implementar os seus recursos em quaisquer regiões/zonas à sua escolha.
  17. Opcional: leia e compreenda a vista geral do balanceador de carga de aplicações externo.
  18. Configure as suas instâncias de back-end

    Nesta secção, cria dois serviços de back-end em diferentes regiões. Cada serviço de back-end inclui duas instâncias de back-end, cada uma a executar um servidor Web Microsoft IIS no Windows Server 2016. Para evitar a configuração manual laboriosa de cada servidor, crie uma imagem do disco a partir de uma instância do servidor e, em seguida, use esta imagem para criar as outras instâncias do servidor.

    Crie e configure uma instância do Compute Engine

    Para criar a instância a usar como imagem de origem:

    No Google Cloud Marketplace, inicie uma instância do Windows Server 2016 a executar o Microsoft IIS no Compute Engine numa zona à sua escolha e configure regras de firewall para permitir tráfego HTTP, HTTPS e RDP externo para a instância de imagem de origem:

    1. Na Google Cloud consola, aceda à página do Cloud Marketplace do ASP.NET Framework.

      Aceda ao Cloud Marketplace

    2. Clique em Iniciar.

    3. No campo Nome da implementação, introduza src-img.

    4. No campo Zona, selecione uma zona na qual quer implementar a imagem.

    5. No campo Versão do SO Windows Server, selecione 2016.

    6. Na secção Rede – Firewall, selecione apenas as seguintes opções:

      • Permita o tráfego HTTP
      • Permita o tráfego HTTPS
      • Permita o tráfego RDP

    7. Aceite os Termos de Utilização e clique em Implementar.

    8. Aguarde a criação da instância do Compute Engine.

    Configure a instância da imagem de origem

    Para configurar a nova instância de imagem de origem, crie um novo utilizador do Windows na instância de imagem de origem e estabeleça uma ligação RDP:

    1. Na Google Cloud consola, aceda à página Instâncias de VM.

      Aceder às instâncias de VM

    2. Clique no nome da instância da imagem de origem (src-img).

    3. Clique em Definir palavra-passe do Windows.

    4. Na caixa de diálogo Definir nova palavra-passe do Windows, adicione o seu nome de utilizador e clique em Definir para criar a conta de utilizador na sua instância.

    5. Copie a palavra-passe fornecida e feche a caixa de diálogo.

    6. Clique no menu pendente RDP e selecione a opção Transferir o ficheiro RDP para transferir o ficheiro RDP da sua instância. Use este ficheiro para estabelecer ligação à instância através de um cliente RDP. Para mais informações, consulte o artigo Clientes do Ambiente de Trabalho Remoto da Microsoft.

    Depois de estabelecer uma ligação RDP com a instância de imagem de origem, adicione uma página inicial predefinida no diretório Web predefinido do IIS:

    1. Na instância da imagem de origem, abra o PowerShell como administrador.

    2. Crie uma nova página inicial no diretório Web do IIS predefinido C:\inetpub\wwwroot:

      Echo '<!doctype html><html><body><h1>Hello World!</h1></body></html>' > C:\inetpub\wwwroot\index.html
      

    Verifique se a instância da imagem de origem pode publicar conteúdo

    Na Google Cloud consola, aceda à página Instâncias de VM.

    Aceder às instâncias de VM

    Clique no endereço IP externo da sua instância para verificar se está a publicar a página inicial que criou anteriormente.

    Crie uma imagem reutilizável do Windows Server 2016 a partir da instância de imagem de origem

    Depois de verificar se a instância da imagem de origem está configurada corretamente e consegue publicar conteúdo, crie uma imagem de disco reutilizável a partir do disco persistente raiz da instância:

    1. Na instância da imagem de origem, abra o PowerShell como administrador.
    2. Execute o seguinte comando para preparar o sistema para a clonagem:

      GCESysprep
      

      Quando a operação GCESysprep estiver concluída, a ligação à sessão RDP é automaticamente terminada.

    3. Na sua máquina local, execute o seguinte comando para eliminar a instância de origem, mantendo o respetivo disco persistente raiz:

      gcloud compute instances delete src-img \
         --keep-disks=boot \
         --zone=INSTANCE_ZONE
      

      Substitua INSTANCE_ZONE pela zona da sua instância de origem.

    4. Depois de a instância ser eliminada, crie uma nova imagem a partir do disco persistente raiz que manteve:

      gcloud compute images create win-be-img \
         --source-disk=src-img \
         --source-disk-zone=IMAGE_ZONE
      

      Substitua IMAGE_ZONE pela zona na qual quer criar a imagem de origem.

    Crie um modelo de instância com a sua imagem de origem

    Use a imagem de disco do seu servidor Windows configurado como a imagem de origem para um modelo de instância. Mais tarde, vai configurar dois grupos de instâncias geridos para usar este modelo para novas instâncias.

    Na sua máquina local, execute o seguinte comando para criar um modelo de instância que use win-be-img como imagem de origem e rdp-tag e www-tag como etiquetas de instância:

    gcloud compute instance-templates create win-be-tmpl \
        --tags=rdp-tag,www-tag \
        --image=win-be-img
    

    Crie um grupo de instâncias gerido para cada região

    Em cada região, crie grupos de instâncias geridos. Depois de criar cada grupo de instâncias, o grupo é preenchido automaticamente com duas instâncias idênticas com base no modelo de instância que definiu anteriormente. Posteriormente, vai configurar o equilibrador de carga para tratar estes grupos de instâncias como destinos de back-end.

    Para criar os seus grupos de instâncias geridos:

    1. Na sua máquina local, execute o seguinte comando para criar um novo grupo de instâncias gerido na zona em que criou a imagem e preenchê-lo automaticamente com duas instâncias idênticas:

      gcloud compute instance-groups managed create MANAGED_INSTANCE_GROUP_NAME_1 \
         --base-instance-name=BASE_INSTANCE_NAME_1 \
         --size=2 \
         --zone=ZONE_1 \
         --template=win-be-tmpl
      

      Substitua o seguinte:

      • MANAGED_INSTANCE_GROUP_NAME_1: o nome da sua instância gerida
      • BASE_INSTANCE_NAME_1: o nome da instância base
      • ZONE_1: a zona na qual quer implementar a sua instância gerida
    2. Crie um grupo de instâncias geridas na segunda zona:

      gcloud compute instance-groups managed create MANAGED_INSTANCE_GROUP_NAME_2 \
         --base-instance-name=BASE_INSTANCE_NAME_2 \
         --size=2 \
         --zone=ZONE_2 \
         --template=win-be-tmpl
      

      Substitua o seguinte:

      • MANAGED_INSTANCE_GROUP_NAME_2: o nome da sua instância gerida
      • BASE_INSTANCE_NAME_2: o nome da instância base
      • ZONE_2: a zona na qual quer implementar a sua instância gerida

    Verifique se as instâncias de back-end estão em execução

    1. Na Google Cloud consola, aceda à página Instâncias de VM.

      Aceder às instâncias de VM

    2. Clique no endereço IP externo de cada back-end para verificar se o back-end está a publicar a página inicial que criou anteriormente.

    Crie e configure o seu serviço de balanceamento de carga

    O serviço de balanceamento de carga do Compute Engine inclui vários componentes. Nesta secção, vai criar estes componentes e associá-los.

    1. Na sua máquina local, execute o seguinte comando para criar uma nova verificação de estado. O seu equilibrador de carga usa esta verificação para verificar a capacidade de resposta das suas instâncias de back-end:

      gcloud compute http-health-checks create basic-check
      
    2. Crie um serviço de back-end:

      gcloud compute backend-services create BACKEND_SERVICE_NAME \
        --protocol=HTTP \
        --http-health-checks=basic-check \
        --global
      

      Substitua BACKEND_SERVICE_NAME por um nome para o serviço de back-end.

    3. Adicione os seus grupos de instâncias como destinos de back-end para o seu serviço de back-end:

      gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
         --instance-group=MANAGED_INSTANCE_GROUP_NAME_1 \
         --instance-group-zone=ZONE_1
      
      gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
         --instance-group=MANAGED_INSTANCE_GROUP_NAME_2 \
         --instance-group-zone=ZONE_2
      
    4. Crie um mapa de URLs predefinido que direcione todos os pedidos recebidos para todas as suas instâncias:

      gcloud compute url-maps create lb-map \
         --default-service=BACKEND_SERVICE_NAME
      
    5. Crie um recurso de certificado SSL. O seu equilibrador de carga usa este recurso para encriptar e desencriptar o tráfego.

      Se já tiver uma chave privada e um certificado SSL de uma autoridade de certificação, pode usá-los para criar um novo recurso executando o seguinte comando.SSLCertificate Caso contrário, pode criar e usar um certificado SSL gerido pela Google ou um certificado autoassinado para testes. Para mais informações, consulte o artigo Certificados SSL.

      Execute o seguinte comando para criar o recurso do certificado SSL:

      gcloud compute ssl-certificates create www-cert \
         --certificate CRT_FILE_PATH \
         --private-key KEY_FILE_PATH
      

      Substitua o seguinte:

      • CRT_FILE_PATH: o caminho do ficheiro local do seu certificado
      • KEY_FILE_PATH: o caminho do ficheiro da sua chave privada
    6. Crie proxies HTTP e HTTPS de destino para encaminhar pedidos para o seu mapa de URLs. O proxy é a parte do balanceador de carga que contém o certificado SSL para o balanceamento de carga HTTPS, pelo que também carrega o certificado neste passo:

      gcloud compute target-http-proxies create http-lb-proxy \
         --url-map=lb-map
      
      gcloud compute target-https-proxies create https-lb-proxy \
         --url-map lb-map \
         --ssl-certificate SSL_CERT
      

      Substitua SSL_CERT com base no seguinte:

      • Se criou um recurso SSLCertificate com o seu certificado SSL e chave privada, substitua SSL_CERT por www-cert.
      • Se estiver a usar um certificado SSL gerido pela Google ou um certificado SSL autoassinado, substitua SSL_CERT pelo nome do seu certificado.
    7. Para que o balanceador de carga receba tráfego de forma fiável, tem de atribuir um endereço IP estático global à regra de encaminhamento global do balanceador de carga.

      Para criar um recurso de endereço IP estático global, execute o seguinte comando:

      gcloud compute addresses create lb-ip \
         --global \
         --network-tier=PREMIUM
      

      Tome nota do endereço IP.

    8. Crie duas regras de encaminhamento global para processar pedidos HTTP e HTTPS recebidos. Cada regra de encaminhamento envia tráfego para um dos proxies de destino que criou, consoante o endereço IP, o protocolo IP e a porta especificados.

      • Para um Application Load Balancer externo global, use o comando da CLI gcloud com load-balancing-scheme=EXTERNAL_MANAGED. Esta definição oferece capacidade de gestão avançada do tráfego.
      • Para um balanceador de carga de aplicações clássico, use load-balancing-scheme=EXTERNAL.
      gcloud compute forwarding-rules create http-fwd-rule \
         --load-balancing-scheme=LOAD_BALANCING_SCHEME \
         --network-tier=PREMIUM \
         --address=lb-ip \
         --global \
         --target-http-proxy=http-lb-proxy \
         --ports=80
      
      gcloud compute forwarding-rules create https-fwd-rule \
         --load-balancing-scheme=LOAD_BALANCING_SCHEME \
         --network-tier=PREMIUM \
         --address=lb-ip \
         --global \
         --target-https-proxy=https-lb-proxy \
         --ports=443
      

    Depois de criar as regras de encaminhamento global, a configuração pode demorar vários minutos a propagar-se. Para verificar o progresso da propagação, pode monitorizar a sua configuração noGoogle Cloud console ou executar o seguinte comando na sua máquina local:

    gcloud compute backend-services get-health BACKEND_SERVICE_NAME
    

    Envie tráfego para os seus backends

    Agora que configurou o serviço de equilíbrio de carga, pode começar a enviar tráfego para a regra de encaminhamento e ver o tráfego disperso para diferentes instâncias.

    Envie tráfego para os seus back-ends da seguinte forma:

    1. Na Google Cloud consola, aceda à página Equilíbrio de carga.

      Aceda a Balanceamento de carga

    2. Selecione o separador Front-ends.

    3. Para ver a sua página inicial predefinida, clique nos endereços IP na coluna Endereço.

    Restrinja o acesso aos seus back-ends

    Depois de verificar que tudo está a funcionar como esperado, modifique as regras de firewall para que o tráfego HTTP ou HTTPS só possa vir do seu serviço de balanceamento de carga:

    1. Na Google Cloud consola, aceda à página Firewall.

      Aceda à firewall

    2. Clique no nome da regra de firewall que permite o acesso externo à porta tcp:80.

    3. Clique em Editar para editar a regra da firewall.

    4. No campo Intervalos IPv4 de origem, remova o valor 0.0.0.0/0 e introduza 130.211.0.0/22. Isto restringe os IPs de origem permitidos da regra de firewall ao intervalo 130.211.0.0/22, que é o intervalo de IPs de verificação de funcionamento do balanceamento de carga de HTTPS.

    5. Clique em Guardar.

    6. Na Google Cloud consola, aceda à página Instâncias de VM.

      Aceder às instâncias de VM

    7. Clique no endereço IP externo de cada instância para verificar se a instância está agora inacessível.

    Simule uma indisponibilidade

    Para ver como uma carga é equilibrada entre as instâncias com capacidade de resposta, pode simular uma interrupção para uma ou mais instâncias numa região.

    Para impedir que uma instância receba pedidos adicionais:

    1. Estabeleça uma ligação RDP à instância.
    2. Na instância, abra o PowerShell como administrador.
    3. Execute o seguinte comando para criar uma nova regra de firewall na instância. Este comando bloqueia o tráfego de verificação de funcionamento do verificador de funcionamento e impede todas as novas ligações HTTP do equilibrador de carga à instância:

      netsh advfirewall firewall add rule name="Outage Test" protocol=tcp dir=in localport=80 action=block remoteip=130.211.0.0/22
      
    4. Na sua máquina local, execute o seguinte comando para verificar se a instância apresenta agora o estado UNHEALTHY:

      gcloud compute backend-services get-health BACKEND_SERVICE_NAME
      
    5. Depois de a instância começar a comunicar um estado UNHEALTHY, envie um pedido ao balanceador de carga. Apenas as instâncias responsivas devem responder.

    6. Depois de terminar a simulação de uma indisponibilidade, pode restaurar a conetividade da instância eliminando a regra de firewall. Depois de abrir o PowerShell como administrador na instância que não responde, execute o seguinte comando para eliminar a regra:

      netsh advfirewall firewall delete rule name="Outage Test"
      

    Limpar

    Depois de concluir o tutorial, pode limpar os recursos que criou para que deixem de usar a quota e incorrer em custos. As secções seguintes descrevem como eliminar ou desativar estes recursos.

    Elimine o projeto

    A forma mais fácil de eliminar a faturação é eliminar o projeto que criou para o tutorial.

    1. In the Google Cloud console, go to the Manage resources page.

      Go to Manage resources

    2. In the project list, select the project that you want to delete, and then click Delete.
    3. In the dialog, type the project ID, and then click Shut down to delete the project.

    Elimine recursos individuais

    Tem de eliminar individualmente todos os recursos criados para o projeto (imagens, modelos de instâncias, grupos de instâncias, verificações de estado, serviços de back-end, mapa de URLs, proxy HTTP, endereços e regras de encaminhamento). Não pode eliminar as instâncias de VM até executar os seguintes comandos.

    Execute os seguintes comandos na sua máquina local para eliminar os recursos criados para o tutorial:

    1. Elimine as regras de encaminhamento HTTP/S:
      gcloud compute forwarding-rules delete https-fwd-rule --global
      
      gcloud compute forwarding-rules delete http-fwd-rule --global
      
    2. Elimine o endereço IP estático global:
      gcloud compute addresses delete lb-ip --global
      
    3. Elimine os proxies HTTP/S:
      gcloud compute target-https-proxies delete https-lb-proxy
      
      gcloud compute target-http-proxies delete http-lb-proxy
      
    4. Elimine o certificado SSL:
      gcloud compute ssl-certificates delete SSL_CERT
      
    5. Elimine o mapa de URLs:
      gcloud compute url-maps delete lb-map
      
    6. Elimine o serviço de back-end:
      gcloud compute backend-services delete BACKEND_SERVICE_NAME --global
      
    7. Elimine a verificação de funcionamento de HTTP:
      gcloud compute http-health-checks delete basic-check
      
    8. Elimine os grupos de instâncias geridos:
      gcloud compute instance-groups managed delete MANAGED_INSTANCE_GROUP_NAME_1 --zone=ZONE_1
      
      gcloud compute instance-groups managed delete MANAGED_INSTANCE_GROUP_NAME_2 --zone=ZONE_2
      
    9. Elimine o modelo de instância:
      gcloud compute instance-templates delete win-be-tmpl
      
    10. In the Google Cloud console, go to the Images page.

      Go to Images

    11. Select the checkbox for the image that you want to delete.
    12. To delete the image, click Delete.
    13. In the Google Cloud console, go to the Disks page.

      Go to Disks

    14. Select the checkbox for the disk that you want to delete.
    15. To delete the disk, click Delete.

    O que se segue?