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


Neste tutorial, você aprenderá a usar o balanceador de carga de aplicativo externo para distribuir o tráfego para servidores da Web dos Serviços de Informações da Internet (IIS, na sigla em inglês) da Microsoft em execução nas VMs do Compute Engine provisionadas em regiões diferentes.

Objetivo

Neste tutorial, mostramos como balancear a carga do tráfego do site www.example.com e garantir que:

  • As solicitações recebidas são encaminhadas para a região mais próxima.
  • Se uma instância falhar ou atingir a capacidade máxima, o balanceador de carga encaminhará as solicitações para outras instâncias responsivas na mesma região ou em uma diferente.

A configuração para esse cenário usa um balanceador de carga de aplicativo externo que recebe solicitações de um único endereço IP global. Esse endereço IP pode rotear cada solicitação recebida por tipo de conexão, ou seja, HTTP ou HTTPS. Para solicitações HTTPS, o balanceador de carga implementa a criptografia SSL/TLS entre o cliente que envia a solicitação e o balanceador de carga.

Veja no diagrama a seguir a arquitetura do balanceador de carga:

Balanceamento de carga entre regiões.

Observe que o balanceador de carga abrange diversos componentes para garantir o máximo de configurabilidade. Para uma descrição da função de cada componente, consulte a Visão geral do balanceador de carga de aplicativo externo.

Neste tutorial, mostramos como concluir as seguintes tarefas para alcançar seu objetivo:

  • Configure as instâncias de back-end.
  • Crie e configure o serviço de balanceamento de carga.
  • Envie o tráfego para os back-ends.
  • Restringir o acesso aos back-ends;
  • Simular uma interrupção

Custos

Neste documento, você usará os seguintes componentes faturáveis do Google Cloud:

  • Instâncias de máquina virtual (VM) do Compute Engine
  • Discos permanentes do Compute Engine
  • (Opcional) Certificado SSL gerenciado pelo Google
  • Imagens da máquina do Windows Server 2016

Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços. Novos usuários do Google Cloud podem estar qualificados para uma avaliação gratuita.

Ao concluir as tarefas descritas neste documento, é possível evitar o faturamento contínuo excluindo os recursos criados. Saiba mais em Limpeza.

Antes de começar

  1. Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  2. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  3. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  4. Ative as APIs Compute Engine, BigQuery, and Cloud Firestore.

    Ative as APIs

  5. Instale a CLI do Google Cloud.
  6. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  7. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  8. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  9. Ative as APIs Compute Engine, BigQuery, and Cloud Firestore.

    Ative as APIs

  10. Instale a CLI do Google Cloud.
  11. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  12. Você também pode usar o Cloud Shell no Google Cloud Console para interagir com o Google Cloud. Nesse caso, você não precisa instalar a CLI do Google Cloud.
  13. Instalar um cliente do Protocolo de Área de trabalho remota (RDP). Para mais informações, consulte Clientes de Área de Trabalho Remota da Microsoft. Se você já tiver um cliente RDP instalado, pule esta tarefa.
  14. Decida as zonas e regiões em que você quer provisionar recursos. O diagrama da arquitetura mostra recursos implantados em diferentes zonas nos EUA e nas regiões da UE. Isso serve apenas para referência. É possível implantar recursos em qualquer região/zona de sua escolha.
  15. Opcional: leia e entenda a Visão geral do balanceador de carga de aplicativo externo.

Configurar as instâncias de back-end

Nesta seção, você criará 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 executando um servidor da Web Microsoft IIS no Windows Server 2016. Para evitar configurações manuais trabalhosas em cada servidor, crie uma imagem de disco de uma instância do servidor e use essa imagem para criar outras instâncias.

Criar e configurar uma instância do Compute Engine

Para criar a instância a ser usada como uma imagem de origem:

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

  1. No Console do Google Cloud, acesse a página ASP.NET Framework do Cloud Marketplace.

    Acesse o Cloud Marketplace.

  2. Clique em Iniciar.

  3. No campo Nome da implantação, digite src-img.

  4. No campo Zona, selecione uma zona na qual você quer implantar a imagem.

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

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

    • Permitir tráfego HTTP
    • Allow HTTPS traffic
    • Permitir tráfego RDP

  7. Aceite os Termos de Serviço e clique em implantar.

  8. Aguarde a instância do Compute Engine ser criada.

Configurar a instância de imagem de origem

Para configurar a nova instância de imagem de origem, crie um usuário do Windows na instância de imagem de origem e estabeleça uma conexão RDP:

  1. No Console do Google Cloud, acesse a página Instâncias de VM.

    Acessar instâncias de VM

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

  3. Clique em Configurar a senha do Windows.

  4. Na caixa de diálogo Definir nova senha do Windows, adicione seu nome de usuário e clique em Definir para criar a conta de usuário na instância.

  5. Copie a senha fornecida e feche a caixa de diálogo.

  6. Clique no menu suspenso RDP e selecione a opção Fazer o download do arquivo RDP para fazer o download do arquivo RDP para sua instância. Use esse arquivo para se conectar à instância usando um cliente RDP. Para mais informações, consulte Clientes de Área de Trabalho Remota da Microsoft.

Depois de estabelecer uma conexão RDP com a instância de imagem de origem, adicione uma página inicial padrão ao diretório da Web padrão do IIS:

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

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

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

Verificar se a instância de imagem de origem pode exibir conteúdo

No console do Google Cloud, acesse a página Instâncias de VMs.

Acessar instâncias de VM

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

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

Depois de verificar se a instância de imagem de origem está devidamente configurada e capaz de veicular conteúdo, crie uma imagem de disco reutilizável a partir do disco permanente raiz da instância:

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

    GCESysprep
    

    Quando a operação GCESysprep for concluída, você será automaticamente desconectado da sessão RDP.

  3. Na máquina local, execute o comando a seguir para excluir a instância de origem e manter o disco permanente raiz:

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

    Substitua INSTANCE_ZONE pela zona da instância de origem.

  4. Depois da exclusão da instância, crie uma imagem a partir do disco permanente raiz que você manteve:

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

    Substitua IMAGE_ZONE pela zona em que você quer criar a imagem de origem.

Criar um modelo de instância usando a imagem de origem

Usar a imagem de disco do servidor Windows configurado como a imagem de origem para um modelo de instância. Depois, você configurará dois grupos gerenciados de instâncias para usar esse modelo em novas instâncias.

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

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

Criar um grupo de instâncias gerenciado para cada região

Em cada região, crie grupos gerenciados de instâncias. Depois de criados, cada grupo de instâncias é preenchido automaticamente com duas instâncias idênticas com base no modelo de instância que você definiu anteriormente. Configure o balanceador de carga para tratar esses grupos de instâncias como destinos de back-end.

Para criar os grupos de instância gerenciadas:

  1. Na máquina local, execute o seguinte comando para criar um novo grupo de instâncias gerenciadas na zona em que a imagem foi criada e preencha-o 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:

    • MANAGED_INSTANCE_GROUP_NAME_1: o nome da instância gerenciada
    • BASE_INSTANCE_NAME_1: o nome da instância de base
    • ZONE_1: a zona em que você quer implantar a instância gerenciada.
  2. Crie um grupo de instâncias gerenciadas 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:

    • MANAGED_INSTANCE_GROUP_NAME_2: o nome da instância gerenciada
    • BASE_INSTANCE_NAME_2: o nome da instância de base
    • ZONE_2: a zona em que você quer implantar a instância gerenciada.

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

  1. No console do Google Cloud, acesse a página Instâncias de VMs.

    Acessar instâncias de VM

  2. Clique no endereço IP externo de cada back-end para conferir se ele está veiculando a página inicial que você criou anteriormente.

Criar e configurar o serviço de balanceamento de carga

O serviço de balanceamento de carga do Compute Engine é formado por vários componentes. Nesta seção, você criará esses componentes e fará a conexão deles.

  1. Na máquina local, execute o comando a seguir para criar uma verificação de integridade. O balanceador de carga usa essa verificação para verificar a capacidade de resposta das 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 seus grupos de instância como destinos para o 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 padrão de URLs para direcionar as solicitações recebidas para todas as instâncias:

    gcloud compute url-maps create lb-map \
       --default-service=BACKEND_SERVICE_NAME
    
  5. Crie um recurso de certificado SSL. O balanceador de carga usa esse recurso para criptografar e descriptografar o tráfego.

    Se você tiver uma chave privada e um certificado SSL de uma autoridade de certificação, use-os para criar um recurso SSLCertificate executando o comando a seguir. Caso contrário, crie e use um certificado SSL gerenciado pelo Google ou um certificado autoassinado para testes. Para mais informações, consulte Certificados SSL.

    Execute o comando a seguir para criar o recurso de certificado SSL.

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

    Substitua:

    • CRT_FILE_PATH: caminho do arquivo local do certificado.
    • KEY_FILE_PATH: caminho do arquivo da chave privada.
  6. Crie proxies HTTP e HTTPS de destino para encaminhar solicitações ao mapa de URLs. O proxy é a parte do balanceador de carga em que é armazenado o certificado SSL para balanceamento de carga HTTPS. Portanto, carregue também o certificado nesta etapa.

    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 você criou um recurso SSLCertificate pelo certificado SSL e pela chave privada, substitua SSL_CERT por www-cert.
    • Se você estiver usando um certificado SSL gerenciado pelo Google ou autoassinado, substitua SSL_CERT pelo nome do seu certificado.
  7. Para que o balanceador de carga receba tráfego de maneira confiável, é necessário 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 comando a seguir:

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

    Anote o endereço IP.

  8. Crie duas regras de encaminhamento globais para lidar com as solicitações HTTP e HTTPS recebidas. Cada regra de encaminhamento envia tráfego para um dos proxies de destino que você criou, dependendo do endereço IP, protocolo IP e da porta que foram especificados.

    • Para um balanceador de carga de aplicativo externo global, use o comando da CLI gcloud com load-balancing-scheme=EXTERNAL_MANAGED. Essa configuração oferece recursos avançados de gerenciamento de tráfego.
    • Para um balanceador de carga de aplicativo 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 globais, pode demorar vários minutos para a configuração se propagar. Para verificar o progresso da propagação, é possível monitorar a configuração no Console do Google Cloud ou executar o seguinte comando na máquina local:

gcloud compute backend-services get-health BACKEND_SERVICE_NAME

Enviar tráfego para os back-ends

Agora que você configurou o serviço de balanceamento de carga, comece a enviar o tráfego para a regra de encaminhamento e veja a dispersão do tráfego para diferentes instâncias.

Envie o tráfego para seus back-ends da seguinte maneira:

  1. No Console do Google Cloud, acesse a página Balanceamento de carga.

    Acessar o "Balanceamento de carga"

  2. Selecione a guia Front-ends.

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

Restringir o acesso aos back-ends

Após verificar se tudo está funcionando conforme o esperado, modifique as regras de firewall para que o tráfego HTTP ou HTTPS seja proveniente somente do seu serviço de balanceamento de carga:

  1. No Console do Google Cloud, acesse a página Firewall.

    Acessar o Firewall

  2. Clique na regra de firewall que permite o acesso externo à porta 80.

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

  4. No campo Intervalos IPv4 de origem, digite 130.211.0.0/22. Isso restringe os IPs de origem permitidos da regra de firewall ao intervalo 130.211.0.0/22, que é o intervalo de IP da verificação de integridade do balanceamento de carga HTTPS.

  5. Clique em Save.

  6. No console do Google Cloud, acesse a página Instâncias de VMs.

    Acessar instâncias de VM

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

Simular uma interrupção

Para ver como uma carga é balanceada entre as instâncias responsivas, é possível simular a interrupção de uma ou mais instâncias em uma região.

Para impedir que uma instância receba solicitações adicionais:

  1. Estabeleça uma conexão RDP com a instância.
  2. Na instância, abra o PowerShell como administrador.
  3. Execute o comando a seguir para criar uma regra de firewall na instância. Este comando bloqueia o tráfego de verificação de integridade do verificador de integridade e impede todas as novas conexões HTTP do balanceador de carga para a 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 máquina local, execute o comando a seguir para verificar se agora a instância informa um status UNHEALTHY:

    gcloud compute backend-services get-health BACKEND_SERVICE_NAME
    
  5. Depois que a instância começar a informar um status UNHEALTHY, envie uma solicitação para o balanceador de carga. Somente as instâncias responsivas precisam responder.

  6. Após concluir a simulação de uma interrupção, restaure a conectividade da instância excluindo a regra de firewall. Abra o PowerShell como administrador na instância não responsiva e execute o comando a seguir para excluir a regra:

    netsh advfirewall firewall delete rule name="Outage Test"
    

Limpar

Depois de concluir o tutorial, você pode limpar os recursos que criou para que eles parem de usar a cota e gerar cobranças. Nas seções a seguir, você aprenderá a excluir e desativar esses recursos.

Excluir o projeto

O jeito mais fácil de evitar cobranças é excluindo o projeto que você criou para este tutorial.

    Exclua um projeto do Google Cloud:

    gcloud projects delete PROJECT_ID

Excluir recursos individuais

Você precisará excluir individualmente todos os recursos criados para o projeto (imagens, modelos de instâncias, grupos de instâncias, verificações de integridade, serviços de back-end, mapa de URL, proxy HTTP, endereços, regras de encaminhamento). Não é possível excluir as instâncias de VM até que os comandos a seguir sejam executados.

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

  1. Exclua 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. Exclua o endereço IP estático global:
    gcloud compute addresses delete lb-ip --global
    
  3. Exclua os proxies HTTP/S:
    gcloud compute target-https-proxies delete https-lb-proxy
    
    gcloud compute target-http-proxies delete http-lb-proxy
    
  4. Exclua o certificado SSL:
    gcloud compute ssl-certificates delete SSL_CERT
    
  5. Exclua o mapa de URL:
    gcloud compute url-maps delete lb-map
    
  6. Exclua o serviço de back-end:
    gcloud compute backend-services delete BACKEND_SERVICE_NAME --global
    
  7. Exclua a verificação de integridade HTTP:
    gcloud compute http-health-checks delete basic-check
    
  8. Exclua os grupos de instâncias gerenciadas:
    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. Exclua o modelo de instância:
    gcloud compute instance-templates delete win-be-tmpl
    
  10. Exclua a imagem:
    gcloud compute images delete IMAGE_NAME
  11. Exclua o disco:
    gcloud compute disks delete DISK_NAME

A seguir