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 segnalati da un controllo di integrità HTTP utilizzando il bilanciamento del carico ponderato.
Il bilanciamento del carico ponderato richiede la configurazione di entrambi gli elementi seguenti:
- Devi impostare il criterio di bilanciamento del carico per le 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 i pesi con valori interi da 0 a 1000 in rappresentazione decimale per ogni istanza di backend.
Se utilizzi lo stesso gruppo di istanze come backend per più bilanciatori del carico di rete basati su servizi di backend che utilizzano il bilanciamento del carico ponderato, ti consigliamo di utilizzare un percorso di richiesta univoco per ogni controllo di integrità del servizio di backend. Per saperne di più, consulta Criteri di esito positivo per i controlli di integrità HTTP, HTTPS e HTTP/2.
Il controllo di integrità HTTP deve restituire una risposta HTTP 200 (OK) affinché i controlli di integrità vengano superati e l'istanza di backend venga considerata integra. Nelle situazioni in cui tutte le istanze di backend superano i controlli di integrità e restituiscono X-Load-Balancing-Endpoint-Weight con peso zero, il bilanciatore del carico distribuisce le nuove connessioni tra i backend integri, trattandoli con lo stesso peso. Il bilanciatore del carico può anche distribuire nuove connessioni tra i backend non integri. Per maggiori informazioni, consulta la sezione Distribuzione del traffico.
Per esempi di bilanciamento del carico ponderato, vedi Selezione del backend e monitoraggio della connessione.
Il bilanciamento del carico ponderato può essere utilizzato nei seguenti scenari:
- Se alcune connessioni elaborano più dati di altre o se alcune connessioni durano più a lungo di altre, la distribuzione del carico di backend potrebbe diventare irregolare. Segnalando un peso inferiore per istanza, un'istanza con carico elevato può ridurre la sua quota di nuove connessioni, continuando a gestire quelle esistenti.
- Se un backend è sovraccarico e l'assegnazione di più connessioni potrebbe interrompere le connessioni esistenti, questi backend si assegnano un peso pari a zero. Se viene segnalato un peso pari a zero, un'istanza di backend interrompe la gestione di nuove connessioni, ma continua a gestire quelle esistenti.
- Se un backend esaurisce le connessioni esistenti prima della manutenzione, si assegna un peso pari a zero. Se viene segnalato un peso pari a zero, l'istanza di backend interrompe la gestione delle 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 segnalati da un controllo di integrità HTTP utilizzando il bilanciamento del carico ponderato.
Configurazione dell'ambiente autonoma
- Accedi alla console Google Cloud e crea un nuovo progetto o riutilizzane uno esistente. Se non hai già un account Gmail o Google Workspace, devi crearne uno.
- Il nome del progetto è il nome visualizzato per i partecipanti a questo progetto. È una stringa di caratteri non utilizzata dalle API di Google. Puoi aggiornarlo in qualsiasi momento.
- L'ID progetto è univoco in tutti i progetti Google Cloud ed è immutabile (non può essere modificato dopo l'impostazione). La console Cloud genera automaticamente una stringa univoca, di solito non ti interessa di cosa si tratta. Nella maggior parte dei codelab, devi fare riferimento all'ID progetto (in genere è identificato come
PROJECT_ID
). Se non ti piace l'ID generato, puoi generarne un altro casuale. In alternativa, puoi provare a crearne uno e vedere se è disponibile. Non può essere modificato dopo questo passaggio e rimarrà per tutta la durata del progetto. - Per tua informazione, esiste un terzo valore, un numero di progetto, utilizzato da alcune API. Scopri di più su tutti e tre questi valori nella documentazione.
- Successivamente, devi abilitare la fatturazione in Cloud Console per utilizzare le risorse/API Cloud. L'esecuzione di questo codelab non dovrebbe costare molto, se non nulla. Per arrestare le risorse in modo da non incorrere in costi di fatturazione oltre a quelli previsti da questo tutorial, puoi eliminare le risorse che hai creato o l'intero progetto. I nuovi utenti di Google Cloud possono beneficiare del programma prova senza costi di 300$.
Avvia Cloud Shell
Sebbene Google Cloud possa essere gestito da remoto dal tuo laptop, in questo codelab utilizzerai Google Cloud Shell, un ambiente a riga di comando in esecuzione nel cloud.
Nella console Google Cloud, fai clic sull'icona di Cloud Shell nella barra degli strumenti in alto a destra:
Bastano pochi istanti per eseguire il provisioning e connettersi all'ambiente. Al termine, dovresti vedere un risultato simile a questo:
Questa macchina virtuale è caricata con tutti gli strumenti di sviluppo di cui avrai bisogno. 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 devi installare nulla.
2. Avvia configurazione
Il codelab richiede un singolo progetto.
In questo tutorial, crei un gruppo di istanze con tre istanze VM e assegni pesi a ciascuna istanza. Crea un controllo di integrità HTTP per segnalare i pesi delle istanze di backend. Il bilanciatore del carico di rete ponderato è abilitato sul servizio di backend con la policy di bilanciamento del carico per località WEIGHTED_MAGLEV.
Prima di iniziare
- Leggi la panoramica del bilanciamento del carico di rete esterno basato sui servizi di backend.
- Installa Google Cloud CLI. Per una panoramica completa dello strumento, consulta la panoramica di gcloud CLI. Puoi trovare i comandi relativi al bilanciamento del carico nella documentazione di riferimento dell'API e di 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 locale e assegnare pesi alle istanze VM. Utilizza invece 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 bilanciatore del carico.
- Crea 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 principale 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 distribuzione dei pacchetti inviati alle porte TCP di destinazione 80 e 443 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.
Crea istanze VM e assegna pesi
Crea tre istanze VM e assegna i pesi:
- Configura tre istanze VM di backend per restituire i pesi nell'intestazione X-Load-Balancing-Endpoint-Weight con le risposte HTTP. Per questo tutorial, configuri una prima 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 regionale configurato per utilizzare il bilanciamento del carico ponderato.
- Crea un servizio di backend con il controllo di integrità HTTP e imposta la policy di bilanciamento 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 regionale 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 prenotato ("IP_ADDRESS'
").
gcloud compute addresses describe ADDRESS_NAME
- Crea una regola di forwarding utilizzando l'indirizzo IP esterno regionale 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 quanto segue:
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 prenotato, non il nome dell'indirizzo.
Verifica i pesi del backend utilizzando l'API del servizio di backend
Verifica che i pesi di backend vengano segnalati correttamente al controllo di integrità HTTP.
- Per ottenere i pesi del backend (insieme agli stati di integrità) 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