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:
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.
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
- 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.
-
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 theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
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 theserviceusage.services.enable
permission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init
-
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 theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
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 theserviceusage.services.enable
permission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init
- 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.
- 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.
- Opcional: leia e compreenda a vista geral do balanceador de carga de aplicações externo.
Na Google Cloud consola, aceda à página do Cloud Marketplace do ASP.NET Framework.
Clique em Iniciar.
No campo Nome da implementação, introduza src-img.
No campo Zona, selecione uma zona na qual quer implementar a imagem.
No campo Versão do SO Windows Server, selecione 2016.
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
Aceite os Termos de Utilização e clique em Implementar.
Aguarde a criação da instância do Compute Engine.
Na Google Cloud consola, aceda à página Instâncias de VM.
Clique no nome da instância da imagem de origem (
src-img
).Clique em Definir palavra-passe do Windows.
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.
Copie a palavra-passe fornecida e feche a caixa de diálogo.
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.
Na instância da imagem de origem, abra o PowerShell como administrador.
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
- Na instância da imagem de origem, abra o PowerShell como administrador.
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.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.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.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 geridaBASE_INSTANCE_NAME_1
: o nome da instância baseZONE_1
: a zona na qual quer implementar a sua instância gerida
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 geridaBASE_INSTANCE_NAME_2
: o nome da instância baseZONE_2
: a zona na qual quer implementar a sua instância gerida
Na Google Cloud consola, aceda à página Instâncias de VM.
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.
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
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.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
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
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 certificadoKEY_FILE_PATH
: o caminho do ficheiro da sua chave privada
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.
- Se criou um recurso SSLCertificate com o seu certificado SSL e
chave privada, substitua
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.
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
-
Para um Application Load Balancer externo global, use o comando da CLI gcloud com
Na Google Cloud consola, aceda à página Equilíbrio de carga.
Selecione o separador Front-ends.
Para ver a sua página inicial predefinida, clique nos endereços IP na coluna Endereço.
Na Google Cloud consola, aceda à página Firewall.
Clique no nome da regra de firewall que permite o acesso externo à porta
tcp:80
.Clique em Editar para editar a regra da firewall.
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 intervalo130.211.0.0/22
, que é o intervalo de IPs de verificação de funcionamento do balanceamento de carga de HTTPS.Clique em Guardar.
Na Google Cloud consola, aceda à página Instâncias de VM.
Clique no endereço IP externo de cada instância para verificar se a instância está agora inacessível.
- Estabeleça uma ligação RDP à instância.
- Na instância, abra o PowerShell como administrador.
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
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
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.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"
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
- 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
- Elimine o endereço IP estático global:
gcloud compute addresses delete lb-ip --global
- Elimine os proxies HTTP/S:
gcloud compute target-https-proxies delete https-lb-proxy
gcloud compute target-http-proxies delete http-lb-proxy
- Elimine o certificado SSL:
gcloud compute ssl-certificates delete SSL_CERT
- Elimine o mapa de URLs:
gcloud compute url-maps delete lb-map
- Elimine o serviço de back-end:
gcloud compute backend-services delete BACKEND_SERVICE_NAME --global
- Elimine a verificação de funcionamento de HTTP:
gcloud compute http-health-checks delete basic-check
- 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
- Elimine o modelo de instância:
gcloud compute instance-templates delete win-be-tmpl
- In the Google Cloud console, go to the Images page.
- Select the checkbox for the image that you want to delete.
- To delete the image, click Delete.
- In the Google Cloud console, go to the Disks page.
- Select the checkbox for the disk that you want to delete.
- To delete the disk, click Delete.
- Siga o tutorial de implementação de servidores Web IIS com equilíbrio de carga.
- Reveja as práticas recomendadas no Google Cloud Well-Architected Framework.
- Explore arquiteturas de referência, diagramas e práticas recomendadas sobre o Google Cloud. Consulte o nosso Centro de arquitetura na nuvem.
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:
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:
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:
Verifique se a instância da imagem de origem pode publicar conteúdo
Na Google Cloud consola, aceda à página 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:
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:
Verifique se as instâncias de back-end estão em execução
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.
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:
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:
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:
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.
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: