Balanceamento de carga entre regiões usando back-ends do Microsoft IIS

Neste tutorial, você aprende a usar o serviço de balanceador de carga HTTP(S) do Google Compute Engine 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 entre diferentes regiões do Compute Engine.

Cenário

Você precisa balancear o tráfego do site www.example.com. É necessário garantir que as solicitações recebidas sejam roteadas para a região mais próxima. Porém, caso haja falhas ou as instâncias em determinadas regiões alcancem o limite da capacidade, é preciso que o failover dessas solicitações seja feito para instâncias íntegras da região seguinte mais próxima.

Ao concluir a configuração desse cenário, você terá um balanceador de carga HTTP(S) com a capacidade de atender a solicitações por meio de um endereço IP global e único. Com esse endereço IP, é possível rotear cada solicitação de entrada por tipo de conexão, HTTP ou HTTPS. Para solicitações HTTPS, a criptografia SSL/TLS é implementada no balanceador de carga entre o cliente que envia a solicitação e esse balanceador.

O seguinte diagrama ilustra a arquitetura do balanceador de carga:

Diagrama de balanceamento de carga entre regiões

Observe que o balanceador de carga incorpora diversos componentes para garantir o máximo de configurabilidade. Para uma descrição de cada componente, leia a Visão geral do balanceamento de carga HTTP(S).

Pré-requisitos

Neste tutorial, presumimos que você:

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 inclui duas instâncias de back-end, cada uma executando um servidor da Web Microsoft IIS no Windows Server 2012. 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 a instância de imagem de origem

Para criar a instância que você usará como imagem de origem:

  1. Na máquina Windows local, abra o PowerShell.
  2. Crie uma nova instância do Windows Server 2012 na região us-central1 e adicione as tags rdp-tag e www-tag a essa instância. Depois, ative o acesso externo à instância criando regras de firewall para essas tags:

    PS C:\> gcloud compute instances create src-img ^
         --zone us-central1-f --image windows-2012-r2 ^
         --tags rdp-tag,www-tag

Após criar a instância de imagem de origem, defina regras de firewall para acesso externo à instância:

  1. Crie uma regra de firewall que permita o acesso externo à porta 3389 em todas as instâncias com a tag rdp-tag. Essa regra permite que a instância de imagem de origem e quaisquer instâncias subsequentes que utilizem a tag rdp-tag fiquem acessíveis para o RDP:

    PS C:\> gcloud compute firewall-rules create rdp-rule ^
         --allow tcp:3389 --source-ranges 0.0.0.0/0 ^
         --target-tags rdp-tag
  2. Crie outra regra de firewall que permita o acesso externo à porta 80 em todas as instâncias com a tag www-tag. Essa regra permite o envio e o recebimento de tráfego HTTP na sua instância de imagem de origem e em quaisquer instâncias subsequentes que utilizem a tag www-tag:

     PS C:> gcloud compute firewall-rules create www-rule ^
         --allow tcp:80 --source-ranges 0.0.0.0/0 ^
         --target-tags www-tag

Configurar a instância de imagem de origem

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

  1. No navegador da Web, acesse a página Instâncias de VMs no Console do GCP e clique no nome da instância de imagem de origem (src-img).
  2. Clique no botão Definir senha do Windows.
  3. 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.
  4. Copie a senha fornecida e feche a caixa de diálogo.
  5. Na página do console da instância, clique em RDP.

    • Se você instalou a extensão Chrome RDP, a janela da extensão será aberta. Confirme que você quer se conectar à instância, digite o nome de usuário e a senha, e clique em OK para fazer a conexão.
    • Você terá a opção de fazer o download do arquivo RDP para a instância se tiver escolhido não instalar a extensão Chrome RDP. Use esse arquivo para se conectar à instância usando o Conexão de Área de Trabalho Remota do Windows ou o cliente de terceiros que preferir.

Depois de estabelecer uma conexão RDP com a instância de imagem de origem, instale o IIS e adicione uma página inicial padrão:

  1. Na instância de imagem de origem, abra o PowerShell como administrador.
  2. No PowerShell, cole o texto a seguir para instalar os serviços e as dependências do IIS:

    PS C:\> Dism /Online /Enable-Feature /FeatureName:IIS-WebServerRole /FeatureName:IIS-WebServer /FeatureName:IIS-StaticContent /FeatureName:IIS-DefaultDocument /FeatureName:IIS-DirectoryBrowsing /FeatureName:IIS-HttpErrors /FeatureName:IIS-HealthAndDiagnostics /FeatureName:IIS-HttpLogging /FeatureName:IIS-LoggingLibraries /FeatureName:IIS-RequestMonitor /FeatureName:IIS-Security /FeatureName:IIS-RequestFiltering /FeatureName:IIS-HttpCompressionStatic /FeatureName:IIS-WebServerManagementTools /FeatureName:IIS-ManagementConsole /FeatureName:WAS-WindowsActivationService /FeatureName:WAS-ProcessModel /FeatureName:WAS-NetFxEnvironment /FeatureName:WAS-ConfigurationAPI /All
  3. Após a instalação dos serviços, crie uma página inicial em C:\inetpub\wwwroot, o diretório da Web padrão do IIS:

    PS C:\> 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 disponibilizar conteúdo

No navegador da Web, acesse a página Instâncias de VMs. Clique no 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 2012 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:

     PS C:> GCESysprep

    Quando a operação GCESysprep for concluída, você será desconectado automaticamente 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:

     PS C:> gcloud compute instances delete src-img --keep-disks boot

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

     PS C:> gcloud compute images create win-be-img --source-disk src-img --source-disk-zone us-central1-f

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

Agora que você criou uma imagem de disco do servidor Windows configurado, use-a como a imagem de origem para um modelo de instância. Depois, configure dois grupos de instâncias gerenciados com esse modelo para criar novas instâncias.

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

PS C:\> 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 seguida, crie grupos de instâncias gerenciados em cada região. Após serem criados, esses grupos são preenchidos com duas instâncias idênticas baseadas no modelo de instância que você definiu anteriormente. Depois, o balanceador de carga será configurado para tratar esses grupos de instâncias como destinos de back-end.

Para criar os grupos de instâncias gerenciadas:

  1. Na máquina local, execute o comando a seguir para criar um novo grupo de instâncias gerenciadas na zona us-central1-f e preenchê-lo com duas instâncias idênticas:

     PS C:> gcloud compute instance-groups managed create us-be-group ^
          --base-instance-name us ^
          --size 2 ^
          --zone us-central1-f ^
          --template win-be-tmpl

  2. Faça o mesmo na zona europe-west1-d:

    PS C:\> gcloud compute instance-groups managed create eu-be-group ^
          --base-instance-name eu ^
          --size 2 ^
          --zone europe-west1-d ^
          --template win-be-tmpl

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

No navegador da Web, acesse a página Instâncias de VMs. Clique no 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 diversos componentes. Nesta seção, você criará esses componentes e fará a conexão entre eles.

  1. Na máquina local, execute o comando a seguir para criar uma nova verificação de integridade. O balanceador de carga usará essa verificação para avaliar a integridade das instâncias de back-end:

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

    PS C:\> gcloud compute backend-services create be-srv ^
          --protocol HTTP --http-health-check basic-check
  3. Adicione seus grupos de instância como destinos para o serviço de back-end:

    PS C:\> gcloud beta compute backend-services add-backend be-srv ^
          --instance-group us-be-group --zone us-central1-f
    PS C:\> gcloud beta compute backend-services add-backend be-srv ^
          --instance-group eu-be-group --zone europe-west1-d
  4. Crie um mapa padrão de URLs para direcionar todas as solicitações recebidas para todas as suas instâncias:

    PS C:\> gcloud compute url-maps create lb-map --default-service be-srv
  5. Crie um recurso de certificado SSL. O balanceador de carga usará esse recurso para criptografar e descriptografar o tráfego.

    Se você já tiver uma chave particular e um certificado SSL de uma autoridade de certificação, use-os para criar um novo recurso SSLCertificate. Basta executar o comando abaixo. Caso contrário, você pode criar e usar um certificado autoassinado para testes. Para mais informações, consulte Certificados SSL.

    Execute o seguinte comando para criar o recurso de certificado SSL. Substitua <crt_file_path> pelo caminho do arquivo local do certificado e <key_file_path> pelo caminho do arquivo da chave particular.

    PS C:\> gcloud beta compute ssl-certificates create www-cert ^
    --certificate  --private-key 
  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.

     PS C:> gcloud compute target-http-proxies create http-lb-proxy ^
          --url-map lb-map
     PS C:> gcloud beta compute target-https-proxies create https-lb-proxy ^
          --url-map lb-map --ssl-certificate www-cert

  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 IP estático global, execute o comando a seguir:

     PS C:> gcloud compute addresses create lb-ip --global

    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 enviará tráfego para um dos proxies de destino que você criou, dependendo da especificação de endereço IP, protocolo IP e porta.

    Substitua <lb_ip_addr> nos comandos a seguir pelo endereço IP estático que você criou na etapa anterior:

    PS C:\> gcloud compute forwarding-rules create http-fwd-rule ^
          --address  --global ^
          --target-http-proxy http-lb-proxy --port-range 80
    PS C:\> gcloud beta compute forwarding-rules create https-fwd-rule ^
          --address  --global ^
          --target-https-proxy https-lb-proxy --port-range 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, monitore a configuração no Console do Google Cloud Platform ou execute o seguinte comando na máquina local:

PS C:\> gcloud compute backend-services get-health be-srv

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.

Para enviar tráfego aos back-ends:

  1. Abra a página do balanceador de carga HTTP(S) no Console do GCP.
  2. Clique nos endereços IP da coluna Tráfego de entrada. A página inicial padrão é exibida.

Restringir o acesso aos back-ends

Após verificar se tudo está funcionando conforme esperado, modifique as regras de firewall para que o tráfego HTTP(S) venha exclusivamente do seu serviço de balanceamento de carga:

  1. Na máquina local, execute o comando a seguir para atualizar a regra de firewall www-rule. Restrinja os IPs de origem permitidos para o intervalo 130.211.0.0/22, que corresponde ao intervalo de IPs da verificação de integridade do balanceamento de carga HTTP(S):

    PS C:\> gcloud compute firewall-rules update www-rule ^
           --source-ranges 130.211.0.0/22 ^
           --target-tags www-tag
  2. No navegador da Web, acesse a página Instâncias de VMs.

  3. Clique em cada instância para verificar se ela agora está inacessível.

Simular uma interrupção

Você pode simular a interrupção de uma ou mais instâncias em uma região para observar como a carga será equilibrada entre as instâncias íntegras restantes.

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:

    PS C:\> 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:

    PS C:\> gcloud compute backend-services get-health be-srv
  5. Depois que a instância começar a informar um status UNHEALTHY, envie uma solicitação para o balanceador de carga. Só há a resposta de instâncias íntegras.

  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 íntegra e execute o comando a seguir para excluir a regra:

    PS C:\> netsh advfirewall firewall delete rule name="Outage Test"

Limpeza

Depois de concluir o tutorial de IIS da Microsoft, limpe os recursos criados no Google Cloud Platform para que eles não utilizem a cota e você não receba cobranças no futuro. Nas seções a seguir, veja como excluir e desativar esses recursos.

Como excluir o projeto do Cloud Platform

A maneira mais fácil de evitar a cobrança é excluir o projeto criado para o tutorial.

Para excluir o projeto:

  1. No console do GCP, acesse a página "Projetos".

    Acessar a página Projetos

  2. Na lista de projetos, selecione o que você quer excluir e clique em Excluir projeto. Após marcar a caixa de seleção ao lado do nome do projeto, clique em Excluir projeto
  3. Na caixa de diálogo, digite o código do projeto e clique em Encerrar para excluí-lo.

Excluir as instâncias

Para excluir uma instância do Compute Engine:

  1. No Console do GCP, acesse a página "Instâncias da VM".

    Acessar a página "Instâncias de VMs"

  2. Clique na caixa de seleção ao lado da da instância que deseja excluir.
  3. Clique no botão Excluir na parte superior da página para excluir a instância.

Excluir os discos permanentes

Para excluir um disco do Compute Engine:

  1. No console do GCP, acesse a página "Discos".

    Acessar a página Discos

  2. Clique na caixa de seleção ao lado do disco que deseja excluir.
  3. Clique no botão Excluir na parte superior da página para excluir o disco.

A seguir

Leia mais sobre o uso do Windows no Compute Engine

Leia a documentação referente a instâncias do Windows no Compute Engine.

Conheça outros tutoriais

Conheça outros recursos do Google Cloud Platform. Veja nossos tutoriais.

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Compute Engine