1. Introduzione
Puoi configurare un bilanciatore del carico di rete per distribuire il traffico tra le istanze di backend del bilanciatore del carico in base ai pesi riportati da un controllo di integrità HTTP utilizzando il bilanciamento del carico ponderato.
Il bilanciamento del carico ponderato richiede la configurazione di entrambi i seguenti elementi:
- Devi impostare il criterio del bilanciatore del carico per la località (localityLbPolicy) del servizio di backend su WEIGHTED_MAGLEV.
- Devi configurare il servizio di backend con un controllo di integrità HTTP/HTTP2/HTTPS. Le risposte del controllo di integrità HTTP devono contenere un campo di intestazione della risposta HTTP personalizzato X-Load-Balancing-Endpoint-Weight per specificare le ponderazioni con valori interi compresi tra 0 e 1000 nella rappresentazione decimale per ciascuna istanza di backend.
Se utilizzi lo stesso gruppo di istanze come backend per più bilanciatori del carico di rete basati su servizi di backend utilizzando il bilanciamento del carico ponderato, ti consigliamo di utilizzare un percorso di richiesta univoco per ogni controllo di integrità del servizio di backend. Per ulteriori informazioni, vedi Criteri di successo per i controlli di integrità HTTP, HTTPS e HTTP/2.
Il controllo di integrità HTTP dovrebbe restituire una risposta HTTP 200 (OK) affinché i controlli di integrità vengano superati e l'istanza di backend viene considerata integro. Nelle situazioni in cui tutte le istanze di backend superano i controlli di integrità e restituiscono X-Load-Balancing-Endpoint-Weight senza peso, il bilanciatore del carico distribuisce le nuove connessioni tra i backend in stato integro, trattandole con lo stesso peso. Il bilanciatore del carico può anche distribuire nuove connessioni tra backend in stato non integro. Per saperne di più, consulta Distribuzione del traffico.
Per esempi di bilanciamento del carico ponderato, consulta Selezione del backend e monitoraggio delle connessioni.
Il bilanciamento del carico ponderato può essere utilizzato nei seguenti scenari:
- Se alcune connessioni elaborano più dati di altre o se alcune vivono più a lungo di altre, la distribuzione del carico del backend potrebbe diventare non uniforme. Indicando un peso per istanza inferiore, un'istanza con un carico elevato può ridurre la quota di nuove connessioni, pur continuando a gestire le connessioni esistenti.
- Se un backend è sovraccarico e l'assegnazione di più connessioni potrebbe interrompere le connessioni esistenti, questi backend non assegnano alcun peso a se stessi. Segnalando un peso pari a zero, un'istanza di backend smette di gestire le nuove connessioni, ma continua a gestire quelle esistenti.
- Se un backend svuota le connessioni esistenti prima della manutenzione, non assegna alcun peso a se stesso. Segnalando un peso pari a zero, l'istanza di backend smette di gestire le nuove connessioni, ma continua a gestire quelle esistenti.
Cosa imparerai a fare
- Come configurare un bilanciatore del carico di rete per distribuire il traffico tra le istanze di backend del bilanciatore del carico in base ai pesi riportati da un controllo di integrità HTTP utilizzando il bilanciamento del carico ponderato.
Configurazione dell'ambiente da seguire in modo autonomo
- Accedi alla console Google Cloud e crea un nuovo progetto o riutilizzane uno esistente. Se non hai ancora un account Gmail o Google Workspace, devi crearne uno.
- Il Nome progetto è il nome visualizzato dei partecipanti del progetto. Si tratta di una stringa di caratteri non utilizzata dalle API di Google. Puoi aggiornarla in qualsiasi momento.
- L'ID progetto è univoco in tutti i progetti Google Cloud ed è immutabile (non può essere modificato dopo essere stato impostato). La console Cloud genera automaticamente una stringa univoca. di solito non ti importa cosa sia. Nella maggior parte dei codelab, dovrai fare riferimento all'ID progetto (in genere è identificato come
PROJECT_ID
). Se l'ID generato non ti soddisfa, puoi generarne un altro casuale. In alternativa, puoi provarne una personalizzata per verificare se è disponibile. Non può essere modificato dopo questo passaggio e rimarrà per tutta la durata del progetto. - Per informazione, c'è un terzo valore, un numero di progetto, utilizzato da alcune API. Scopri di più su tutti e tre questi valori nella documentazione.
- Successivamente, dovrai abilitare la fatturazione nella console Cloud per utilizzare risorse/API Cloud. Eseguire questo codelab non dovrebbe costare molto. Per arrestare le risorse in modo da non incorrere in fatturazione oltre questo tutorial, puoi eliminare le risorse che hai creato o eliminare l'intero progetto. I nuovi utenti di Google Cloud sono idonei al programma prova senza costi di 300$.
Avvia Cloud Shell
Anche se Google Cloud può essere utilizzato da remoto dal tuo laptop, in questo codelab utilizzerai Google Cloud Shell, un ambiente a riga di comando in esecuzione nel cloud.
Dalla console Google Cloud, fai clic sull'icona di Cloud Shell nella barra degli strumenti in alto a destra:
Dovrebbe richiedere solo qualche istante per eseguire il provisioning e connettersi all'ambiente. Al termine, dovresti vedere una schermata simile al seguente:
Questa macchina virtuale viene caricata con tutti gli strumenti di sviluppo necessari. Offre una home directory permanente da 5 GB e viene eseguita su Google Cloud, migliorando notevolmente le prestazioni di rete e l'autenticazione. Tutto il lavoro in questo codelab può essere svolto all'interno di un browser. Non occorre installare nulla.
2. Avvia configurazione
Il codelab richiede un singolo progetto.
In questo tutorial, creerai un gruppo di istanze con tre istanze VM e assegnerai dei pesi a ciascuna istanza. Creerai un controllo di integrità HTTP per segnalare i pesi delle istanze di backend. Il bilanciatore del carico di rete ponderato è abilitato nel servizio di backend con il criterio del bilanciatore del carico per località come WEIGHTED_MAGLEV.
Prima di iniziare
- Leggi la panoramica del bilanciamento del carico di rete esterno basato sul servizio di backend.
- Installa Google Cloud CLI. Per una panoramica completa dello strumento, consulta la panoramica dell'interfaccia a riga di comando gcloud. Puoi trovare i comandi relativi al bilanciamento del carico nella documentazione di riferimento per API e gcloud CLI. Se non hai mai eseguito Google Cloud CLI, esegui prima gcloud init per l'autenticazione.
- Abilita l'API Compute.
gcloud services enable compute.googleapis.com
Nota:non puoi utilizzare la console Google Cloud per configurare il criterio del bilanciatore del carico per località e assegnare ponderazioni alle istanze VM. Utilizza Google Cloud CLI.
Crea rete VPC, subnet e regole firewall
Crea una rete VPC, una subnet e regole firewall di autorizzazione in entrata per consentire le connessioni alle VM di backend del tuo bilanciatore del carico.
- Creare una rete VPC e una subnet. a. Per creare la rete VPC, esegui il comando
gcloud compute networks create
:
gcloud compute networks create NETWORK_NAME --subnet-mode custom
b. In questo esempio, l'intervallo di indirizzi IPv4 principali della subnet è 10.10.0.0/24
.
Per creare la subnet, esegui il comando gcloud compute networks subnets create
:
gcloud compute networks subnets create SUBNET_NAME \ --network=NETWORK_NAME \ --range=10.10.0.0/24 \ --region=us-central1
Sostituisci quanto segue:
NETWORK_NAME
: il nome della rete VPC da creare.SUBNET_NAME
: il nome della subnet da creare.
- Crea una regola firewall di autorizzazione in entrata per consentire la consegna dei pacchetti inviati alle porte TCP 80 e 443 di destinazione alle VM di backend. In questo esempio, la regola firewall consente le connessioni da qualsiasi indirizzo IP di origine. La regola firewall si applica alle VM con il tag di rete
network-lb-tag
. Per creare la regola firewall, esegui il comandogcloud compute firewall-rules create
:
gcloud compute firewall-rules create FIREWALL_RULE_NAME \ --direction=INGRESS \ --priority=1000 \ --network=NETWORK_NAME \ --action=ALLOW \ --rules=tcp:80,tcp:443 \ --source-ranges=0.0.0.0/0 \ --target-tags=network-lb-tag
Sostituisci FIREWALL_RULE_NAME
con il nome della regola firewall da creare.
Creare istanze VM e assegnare pesi
Crea tre istanze VM e assegna le ponderazioni:
- Configura tre istanze VM di backend per restituire i pesi nell'intestazione X-Load-Balancing-Endpoint-Weight con risposte HTTP. Per questo tutorial, configurerai un'istanza di backend per segnalare un peso pari a zero, una seconda istanza di backend per segnalare un peso pari a 100 e una terza istanza di backend per segnalare un peso pari a 900. Per creare le istanze, esegui il comando
gcloud compute instances create
:
gcloud compute instances create instance-0 \ --zone=us-central1-a \ --tags=network-lb-tag \ --image-family=debian-10 \ --image-project=debian-cloud \ --subnet= SUBNET_NAME \ --metadata=load-balancing-weight=0,startup-script='#! /bin/bash apt-get update apt-get install apache2 -y ln -sr /etc/apache2/mods-available/headers.load /etc/apache2/mods-enabled/headers.load vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html lb_weight="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/attributes/load-balancing-weight)" echo "Header set X-Load-Balancing-Endpoint-Weight \"$lb_weight\"" | \ tee /etc/apache2/conf-enabled/headers.conf systemctl restart apache2'
gcloud compute instances create instance-100 \ --zone=us-central1-a \ --tags=network-lb-tag \ --image-family=debian-10 \ --image-project=debian-cloud \ --subnet=SUBNET_NAME \ --metadata=load-balancing-weight=100,startup-script='#! /bin/bash apt-get update apt-get install apache2 -y ln -sr /etc/apache2/mods-available/headers.load /etc/apache2/mods-enabled/headers.load vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html lb_weight="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/attributes/load-balancing-weight)" echo "Header set X-Load-Balancing-Endpoint-Weight \"$lb_weight\"" | \ tee /etc/apache2/conf-enabled/headers.conf systemctl restart apache2'
gcloud compute instances create instance-900 \ --zone=us-central1-a \ --tags=network-lb-tag \ --image-family=debian-10 \ --image-project=debian-cloud \ --subnet= SUBNET_NAME \ --metadata=load-balancing-weight=900,startup-script='#! /bin/bash apt-get update apt-get install apache2 -y ln -sr /etc/apache2/mods-available/headers.load /etc/apache2/mods-enabled/headers.load vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html lb_weight="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/attributes/load-balancing-weight)" echo "Header set X-Load-Balancing-Endpoint-Weight \"$lb_weight\"" | \ tee /etc/apache2/conf-enabled/headers.conf systemctl restart apache2'
Crea un gruppo di istanze
In questo tutorial, fornisci le istruzioni per creare un gruppo di istanze non gestite contenente tutte e tre le istanze VM(instance-0, instance-100, and instance-900
).
- Per creare il gruppo di istanze, esegui il comando
gcloud compute instance-groups unmanaged create
:
gcloud compute instance-groups unmanaged create INSTANCE_GROUP --zone=us-central1-a
gcloud compute instance-groups unmanaged add-instances INSTANCE_GROUP \ --zone=us-central1-a \ --instances=instance-0,instance-100,instance-900
Sostituisci INSTANCE_GROUP
con il nome del gruppo di istanze da creare.
Crea un controllo di integrità HTTP
In questo tutorial, fornisci istruzioni per creare un controllo di integrità HTTP per leggere la risposta HTTP contenente il peso della VM di backend."
- Per creare il controllo di integrità HTTP, esegui il comando
gcloud compute health-checks create
:
gcloud compute health-checks create http HTTP_HEALTH_CHECK_NAME \ --region=us-central1
Sostituisci HTTP_HEALTH_CHECK_NAME
con il nome del controllo di integrità HTTP da creare.
Crea un servizio di backend
L'esempio seguente fornisce istruzioni per creare un servizio di backend esterno a livello di regione configurato per l'utilizzo del bilanciamento del carico ponderato.
- Crea un servizio di backend con il controllo di integrità HTTP e imposta il criterio del bilanciatore del carico per le località su WEIGHTED_MAGLEV.
- Per creare il servizio di backend, esegui il comando
gcloud compute backend-services create
:
gcloud compute backend-services create BACKEND_SERVICE_NAME \ --load-balancing-scheme=external \ --protocol=tcp \ --region=us-central1 \ --health-checks=HTTP_HEALTH_CHECK_NAME \ --health-checks-region=us-central1 \ --locality-lb-policy=WEIGHTED_MAGLEV
- Sostituisci
BACKEND_SERVICE_NAME
con il nome del servizio di backend da creare.
- Aggiungi il gruppo di istanze al servizio di backend.
- Per aggiungere il gruppo di istanze, esegui il comando
gcloud compute backend-services add-backend
:
gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --instance-group=INSTANCE_GROUP \ --instance-group-zone=us-central1-a \ --region=us-central1
- Prenota un indirizzo IP esterno a livello di regione per il bilanciatore del carico.
- Per prenotare uno o più indirizzi IP, esegui il comando
gcloud compute addresses create
:
gcloud compute addresses create ADDRESS_NAME \ --region us-central1
Sostituisci ADDRESS_NAME
con il nome dell'indirizzo IP da creare. Utilizza il comando compute addresses describe
per visualizzare il risultato. Prendi nota dell'indirizzo IP esterno statico riservato ("IP_ADDRESS'
").
gcloud compute addresses describe ADDRESS_NAME
- Crea una regola di forwarding utilizzando l'indirizzo IP esterno a livello di regione riservato "IP_ADDRESS". Collega la regola di forwarding al servizio di backend.
- Per creare la regola di forwarding, esegui il comando
gcloud compute forwarding-rules create
:
gcloud compute forwarding-rules create FORWARDING_RULE \ --region=us-central1 \ --ports=80 \ --address=IP_ADDRESS \ --backend-service=BACKEND_SERVICE_NAME
- Sostituisci
FORWARDING_RULE
: il nome della regola di forwarding da creare.IP_ADDRESS:
l'indirizzo IP da assegnare all'istanza. Utilizza l'indirizzo IP esterno statico riservato, non il nome dell'indirizzo.
Verifica i pesi dei backend utilizzando l'API del servizio di backend
Verifica che i pesi del backend siano segnalati correttamente al controllo di integrità HTTP.
- Per ottenere i pesi e gli stati di integrità del backend da un servizio di backend, esegui il comando
gcloud compute backend-services get-health
:
gcloud compute backend-services get-health HTTP_HEALTH_CHECK_NAME \ --region=us-central1
L'output dovrebbe essere simile al seguente:
backend: https://www.googleapis.com/compute/projects/project-name/{project}/zones/us-central1-a/instanceGroups/{instance-group-name} status: healthStatus: - forwardingRule: https://www.googleapis.com/compute/projects/{project}/regions/us-central1/forwardingRules/{firewall-rule-name} forwardingRuleIp: 34.135.46.66 healthState: HEALTHY instance: https://www.googleapis.com/compute/projects/{project}/zones/us-central1-a/instances/instance-0 ipAddress: 10.10.0.5 port: 80 weight: '0' - forwardingRule: https://www.googleapis.com/compute/projects/{project}/regions/us-central1/forwardingRules/{firewall-rule-name} forwardingRuleIp: 34.135.46.66 healthState: HEALTHY instance: https://www.googleapis.com/compute/projects/{project}/zones/us-central1-a/instances/instance-100 ipAddress: 10.10.0.6 port: 80 weight: '100' - forwardingRule: https://www.googleapis.com/compute/projects/{project}/regions/us-central1/forwardingRules/{firewall-rule-name} forwardingRuleIp: 34.135.46.66 healthState: HEALTHY instance: https://www.googleapis.com/compute/projects/{project}/zones/us-central1-a/instances/instance-900 ipAddress: 10.10.0.7 port: 80 weight: '900' kind: compute#backendServiceGroupHealth