Questo documento è destinato agli architetti e alle persone che lavorano nelle operazioni e squadre amministrative. Il documento descrive un modello di esempio che puoi utilizzare per le tue implementazioni in Google Cloud. In questo modello, un bilanciatore del carico indirizza il traffico a Motore di calcolo istanze in gruppi di istanze gestite che servono il contenuto. In caso di interruzione, aggiorni il file Bilanciamento del carico HTTP(S) esterno configurazione e failover su un sito statico in Archiviazione cloud. Per completare questo tutorial, è necessario un nome di dominio registrato che controlli e si desidera utilizzare con questo documento. Nelle distribuzioni di produzione, il tuo sito Web probabilmente include molti più file e codice dell'applicazione aggiuntivo nelle macchine virtuali del gruppo di istanze gestite (VM) rispetto a quanto mostrato in questo documento. Cloud Storage ospita quindi un altro versione statica limitata che fornisce funzionalità minime. In un caldo failover scenario, gli utenti visualizzano questo sito Web limitato fino ai gruppi di istanze gestite recuperare e può servire il traffico per l'esperienza completa del sito web. In questa esercitazione, distribuisci le risorse per creare un ambiente come mostrato in immagine seguente: Quando è necessario eseguire il failover, aggiornare la configurazione del bilanciamento del carico a direct traffico verso Cloud Storage, come mostrato nell'immagine seguente: Questo modello di failover a caldo bilancia il costo dell'esecuzione di un altro gestito gruppo di istanze in una regione diversa che utilizzi solo quando le regioni primarie fallire. Il costo di un sito statico che utilizza Cloud Storage è inferiore a quello in esecuzione un altro gruppo di istanze gestite, ma c'è un breve ritardo durante l'aggiornamento del carico configurazione del bilanciatore tra le opzioni di hosting. Il sito limitato l'esperienza in Cloud Storage è migliore di un sito Web non disponibile e scadente esperienza del cliente. Per un approccio alternativo che utilizza Cloud DNS anziché esterno Bilanciamento del carico HTTP(S) per controllare il failover, vedere Distribuisci un server web warm recovery utilizzando Cloud DNS con Compute Engine e Cloud Storage. Questo pattern è utile se hai, o vuoi usare, Cloud DNS. Per eseguire applicazioni affidabili in Google Cloud, ti consigliamo di progettare l'infrastruttura dell'applicazione per gestire le interruzioni. A seconda della tua applicazione e le esigenze aziendali, potrebbe essere necessario un failover a freddo, a caldo o a caldo modello di failover. Per ulteriori informazioni su come determinare l'approccio migliore per le proprie applicazioni, vedere il Guida alla pianificazione del ripristino di emergenza. Questo documento usa un basic Server Web Apache, ma lo stesso approccio alla distribuzione dell'infrastruttura si applica ad altri ambienti applicativi da creare. ## Obiettivi - - Crea gruppi di istanze gestite a livello di area geografica con un'immagine VM personalizzata. - Crea un bucket Cloud Storage. - Creare e configurare il bilanciamento del carico HTTP(S) esterno. - Testare il failover del server Web a caldo con un bilanciatore di carico aggiornato configurazione. - Testare il ripristino e il failback con una configurazione del bilanciamento del carico aggiornata. ## Costi Questo tutorial utilizza i seguenti componenti fatturabili di Google Cloud: - - Motore di calcolo - Rete - Archiviazione cloud Per generare una stima dei costi basata sull'utilizzo previsto, utilizzare il calcolatore dei prezzi. ## Prima di iniziare - - Accedi al tuo account Google Cloud. Se sei nuovo a Google Cloud, creare un account per valutare le prestazioni dei nostri prodotti scenari del mondo reale. I nuovi clienti ricevono anche $ 300 in crediti gratuiti per eseguire, testare e distribuire i carichi di lavoro. - Nella console di Google Cloud, nella pagina di selezione del progetto, seleziona o crea un progetto Google Cloud. - Assicurati che la fatturazione sia abilitata per il tuo progetto Cloud. Impara come controlla se la fatturazione è abilitata su un progetto. - Abilita l'API di Compute Engine. - Installa e inizializza l'interfaccia a riga di comando di Google Cloud. - Nella console di Google Cloud, nella pagina di selezione del progetto, seleziona o crea un progetto Google Cloud. - Assicurati che la fatturazione sia abilitata per il tuo progetto Cloud. Impara come controlla se la fatturazione è abilitata su un progetto. - Abilita l'API di Compute Engine. - Installa e inizializza l'interfaccia a riga di comando di Google Cloud. Puoi eseguire l'interfaccia a riga di comando di Google Cloud in console senza installare il file interfaccia a riga di comando di Google Cloud. Per eseguire l'interfaccia a riga di comando di gcloud nel file console, utilizza Cloud Shell ## Preparare l'ambiente In questa sezione, definisci alcune variabili per i nomi delle tue risorse e luoghi. Queste variabili vengono utilizzate dai comandi dell'interfaccia a riga di comando di Google Cloud come te distribuire le risorse. In questo documento, se non diversamente specificato, inserisci tutti i comandi in Guscio Nuvoloso o il tuo ambiente di sviluppo locale. - Sostituire con il tuo ID progetto. Se desiderato, fornire il proprio suffisso del nome per le risorse per facilitare la ricerca e l'identificazione loro, come ID_PROGETTO app Specificare due regioni, ad esempio E noi-ovest1 e una zona all'interno di una di queste regioni, ad esempio noi-ovest2 . Questa zona definisce dove si trova la VM di base iniziale viene creato utilizzato per creare un'immagine per il gruppo di istanze gestite noi-ovest1-a Infine, imposta un dominio utilizzato per il tuo sito Web statico, ad esempio esempio.com ID_PROGETTO= ID_PROGETTO NAME_SUFFIX= app REGION1= us-west1 REGION2= us-west2 ZONA= us-west1-a DOMINIO= esempio.com ## Crea un VPC e una sottorete Per fornire l'accesso di rete alle VM, crei Virtual Private Cloud (VPC) e sottoreti. Poiché hai bisogno di gruppi di istanze gestite in due aree geografiche, creane uno sottorete in ogni regione. Per maggiori informazioni sui vantaggi del custom modalità subnet per gestire gli intervalli di indirizzi IP in uso nel proprio ambiente, vedere Utilizza le reti VPC in modalità personalizzata. - Crea il VPC con una modalità di sottorete personalizzata: le reti di calcolo gcloud creano network-$NAME_SUFFIX --subnet-mode=custom Ora crea due sottoreti nel nuovo VPC, una per ciascuna regione. Definisci i tuoi intervalli di indirizzi, ad esempio E 10.1.0.0/20 , Quello adatta alla tua gamma di rete: 10.2.0.0/20 gcloud compute networks subnets create n subnet-$NAME_SUFFIX-$REGION1 n --network=network-$NAME_SUFFIX n --range= 10.1.0.0/20n --regione=$REGIONE1 gcloud compute networks subnets create n subnet-$NAME_SUFFIX-$REGION2 n --network=network-$NAME_SUFFIX n --range= 10.2.0.0/20n --region=$REGION2 ## Crea regole firewall Per consentire il corretto flusso del traffico di rete nel VPC, utilizzare regole del firewall. - Crea regole firewall per consentire il traffico Web e i controlli di integrità per il carico bilanciatore e gruppi di istanze gestite: gcloud compute firewall-rules create allow-http-$NAME_SUFFIX n --network=network-$NAME_SUFFIX n --direction=INGRESS n --priority=1000 n --action=ALLOW n --rules=tcp:80 n -- source-range=0.0.0.0/0 n --target-tags=http-server gcloud compute firewall-rules create allow-health-check-$NAME_SUFFIX n --network=network-$NAME_SUFFIX n --action=allow n --direction=ingress n --source-ranges=130.211.0.0/22,35.191. 0.0/16 n --target-tags=allow-health-check n --rules=tcp:80 La regola HTTP consente il traffico verso qualsiasi macchina virtuale in cui il file http-servertag viene applicato, e da qualsiasi fonte utilizzando il file 0.0.0.0/0intervallo. Per il regola del controllo sanitario, gli intervalli predefiniti per Google Cloud sono impostati per consentire alla piattaforma di funzionare correttamente controllare lo stato di salute delle risorse. Per consentire il traffico SSH per la configurazione iniziale di un'immagine di macchina virtuale di base, scope la regola del firewall al tuo ambiente utilizzando il file --source-rangeparameter. Potrebbe essere necessario collaborare con il team di rete per determinare quali intervalli di origine utilizza la tua organizzazione Sostituire con i tuoi ambiti di indirizzi IP: INDIRIZZO_IP_SCOPE gcloud compute firewall-rules create allow-ssh-$NAME_SUFFIX n --network=network-$NAME_SUFFIX n --direction=INGRESS n --priority=1000 n --action=ALLOW n --rules=tcp:22 n -- sorgenti-intervalli= INDIRIZZO_IP_SCOPE Dopo aver creato le regole del firewall, verifica che le tre regole siano state aggiunto: gcloud compute firewall-rules list n --project=$PROJECT_ID n --filter="NETWORK=network-$NAME_SUFFIX"L'output di esempio seguente mostra che le tre regole sono state corrette creato: NOME RETE DIREZIONE PRIORITÀ PERMETTI allow-health-check-app network-app INGRESSO 1000 tcp:80 allow-http-app network-app INGRESSO 1000 tcp:80 allow-ssh-app network-app INGRESSO 1000 tcp:22 ## Crea e configura un'immagine VM di base Per creare macchine virtuali identiche che distribuisci senza configurazione aggiuntiva, tu usa un'immagine VM personalizzata. Questa immagine acquisisce la configurazione del sistema operativo e di Apache e viene usato per creare ogni macchina virtuale nel gruppo di istanze gestite nei passaggi successivi. Nella macchina virtuale crei un file basic index.html sul disco permanente e montarlo su /var/www/esempio.com. Un file di configurazione di Apache su /etc/apache2/sites-available/example.com.conf fornisce contenuti web da posizione del disco permanente montata Il seguente diagramma mostra la pagina HTML di base servita da Apache che è archiviata sul disco persistente: Si crea questo ambiente nei passaggi seguenti. - Crea una VM di base con un disco persistente collegato: istanze di calcolo gcloud create vm-base-$NAME_SUFFIX n --zone=$ZONE n --machine-type=n1-standard-1 n --subnet=subnet-$NAME_SUFFIX-$REGION1 n --tags=http-server n --image=debian-10-buster-v20210420 n --image-project=debian-cloud n --boot-disk-size=10GB n --boot-disk-type=pd-balanced n --boot-disk- device-name=vm-base-$NAME_SUFFIX n --create-disk=type=pd-ssd,name=disk-base-$NAME_SUFFIX,size=10GB,device-name=disk-base-$NAME_SUFFIX Si utilizzano i parametri definiti all'inizio di questo documento per denominare la VM e connettersi alla sottorete corretta. I nomi vengono assegnati anche dai parametri per il disco di avvio e il disco dati. Per installare e configurare il sito Web semplice, connettiti alla VM di base utilizzando SSH: gcloud compute ssh vm-base-$NAME_SUFFIX --zone=$ZONA Nella tua sessione SSH alla VM, crea uno script per configurare la VM in un file editore di tua scelta. L'esempio seguente usa Nano come redattore: nano configure-vm. Incolla il seguente script di configurazione nel file: bin/bash NOME_SUFFIX= app # Crea una directory per i file di base del sito web sudo mkdir -p /var/www/example.com sudo chmod a+w /var/www/example.com sudo chown -R www-data: /var/www/example.com # Trova il nome del disco, quindi formattalo e montalo DISK_NAME="google-disk-base-$NAME_SUFFIX"DISK_PATHfind /dev/disk/by-id -name DISK_NAME}"| xargs -Ireadlink -f n sudo mkfs.ext4 -m 0 -E lazy_itable_init=0,lazy_journal_init=0,discard $DISK_PATH sudo mount -o scarta,predefinito $DISK_PATH /var/www/example.com # Installa Apache sudo apt-get update&& sudo apt-get -y install apache2 # Scrivi un file HTML di base sul disco persistente montato sudo tee -a /var/www/example.com/index.html >/dev/null EOF' Esempio HA/DR

Benvenuto in un sito web di Compute Engine con failover a caldo su Cloud Storagep>

*:80> ServerName www.example.com ServerAdmin webmaster@localhost DocumentRoot /var/www/example.com ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined EOF # Abilita il file di configurazione di Apache e ricarica il servizio sudo a2dissite 000-predefinito sudo a2ensite example.com.conf sudo systemctl ricarica apache2 Aggiorna il variabile in modo che corrisponda al valore impostato l'inizio di questo documento, ad esempio NAME_SUFFIX app. Scrivi il file ed esci dall'editor. Ad esempio, in Nano usi Ctrl-Oper scrivere il file, quindi uscire con Ctrl-X. Rendi eseguibile lo script di configurazione, quindi eseguilo: chmod +x configure-vm../configure-vm. Uscire dalla sessione SSH sulla VM: Uscita Ottieni l'indirizzo IP della VM e usa curlper vedere la pagina web di base: curl $(le istanze di calcolo gcloud descrivono vm-base-$NAME_SUFFIX n --zone $ZONE n --format="value(networkInterfaces.accessConfigs.[0].natIPn Viene restituito il sito Web di base, come mostrato nel seguente output di esempio: Esempio HA/DR

Benvenuto in un sito web di Compute Engine con failover a caldo su Cloud Storagep>

gcloud compute immagini create image-disk-$NAME_SUFFIX n --source-disk=disk-base-$NAME_SUFFIX n --source-disk-zone=$ZONE # Crea modelli di istanza gcloud compute instance-templates create template-$NAME_SUFFIX-$REGION1 n --machine-type=n1-standard-1 n --subnet=projects/$PROJECT_ID/regions/$REGION1/subnetworks/subnet-$NAME_SUFFIX-$REGION1 n --region=$REGION1 n --tags=http-server n --metadatastartup-script /bin/bashn'echo\ UUIDblkid\ -s\ UUID\ -o\ value\ /dev/sdb /var/www/example. com\ ext4\ scarta,impostazioni predefinite,nofail\ 0\ 2 ee\ -a\ /etc/fstabn'mount\ -a n --image=image-$NAME_SUFFIX n --create-disk=image=image-disk-$NAME_SUFFIX ,eliminazione automatica=sì gcloud compute instance-templates create template-$NAME_SUFFIX-$REGION2 n --machine-type=n1-standard-1 n --subnet=projects/$PROJECT_ID/regions/$REGION2/subnetworks/subnet-$NAME_SUFFIX-$REGION2 n --region=$REGION2 n --tags=http-server n --metadatastartup-script /bin/bashn'echo\ UUIDblkid\ -s\ UUID\ -o\ value\ /dev/sdb /var/www/example. com\ ext4\ scarta,impostazioni predefinite,nofail\ 0\ 2 ee\ -a\ /etc/fstabn'mount\ -a n --image=image-$NAME_SUFFIX n --create-disk=image=image-disk-$NAME_SUFFIX ,eliminazione automatica=sì # Crea un controllo dello stato per le istanze VM gcloud compute health-checks create http http-basic-check-$NAME_SUFFIX n --port 80 # Crea i gruppi di istanze gestite gcloud compute instance-groups managed create instance-group-$NAME_SUFFIX-$REGION1 n --template=template-$NAME_SUFFIX-$REGION1 n --size=2 n --region=$REGION1 n --health-check=http- controllo-di-base-$NAME_SUFFIX gcloud compute instance-groups managed create instance-group-$NAME_SUFFIX-$REGION2 n --template=template-$NAME_SUFFIX-$REGION2 n --size=2 n --region=$REGION2 n --health-check=http- controllo-di-base-$NAME_SUFFIX ## Crea e configura un bilanciatore del carico Affinché gli utenti possano accedere al tuo sito Web, devi consentire il traffico verso le VM in esecuzione nei gruppi di istanze gestite. Vuoi anche reindirizzare automaticamente traffico verso nuove macchine virtuali se si verifica un errore di zona in un gruppo di istanze gestite. Nella sezione seguente, crei un file bilanciamento del carico esterno con un servizio di backend per il traffico HTTP sulla porta 80, utilizzare il controllo dello stato creato nei passaggi precedenti e mappare un IP esterno indirizzo tramite il servizio di back-end. Per ulteriori informazioni, vedere Come configurare un semplice bilanciamento del carico HTTP esterno. - Crea e configura il bilanciamento del carico per la tua applicazione: # Configura le regole della porta per la porta HTTP 80 gcloud compute instance-groups set-named-ports n instance-group-$NAME_SUFFIX-$REGION1 n --named-ports http:80 n --region $REGION1 gcloud compute instance-groups set-named-ports n instance-group-$NAME_SUFFIX-$REGION2 n --named-ports http:80 n --region $REGION2 # Crea un servizio di backend e aggiungi i gruppi di istanze gestite gcloud compute backend-services create n web-backend-service-$NAME_SUFFIX n --protocol=HTTP n --port-name=http n --health-checks=http-basic-check-$NAME_SUFFIX n --global gcloud compute backend-services add-backend n web-backend-service-$NAME_SUFFIX n --instance-group=instance-group-$NAME_SUFFIX-$REGION1 n --instance-group-region=$REGION1 n --global gcloud compute backend-services add-backend n web-backend-service-$NAME_SUFFIX n --instance-group=instance-group-$NAME_SUFFIX-$REGION2 n --instance-group-region=$REGION2 n --global # Crea una mappa URL per il servizio di backend gcloud compute url-maps crea web-map-http-$NAME_SUFFIX n --default-service web-backend-service-$NAME_SUFFIX # Configura l'inoltro per il traffico HTTP gcloud compute target-http-proxy crea n http-lb-proxy-$NAME_SUFFIX n --url-map web-map-http-$NAME_SUFFIX gcloud compute forwarding-rules create n http-content-rule-$NAME_SUFFIX n --global n --target-http-proxy=http-lb-proxy-$NAME_SUFFIX n --ports=80 Ottieni l'indirizzo IP della regola di inoltro per il traffico web: IP_ADDRESSgcloud compute forwarding-rules describe http-content-rule-$NAME_SUFFIX n --global n --format="value(IPAddressn Utilizzo curl o aprire il browser Web per visualizzare il sito Web utilizzando l'IP indirizzo del bilanciamento del carico dal passaggio precedente: arriccia $IP_ADDRESS Sono necessari alcuni minuti affinché il sistema di bilanciamento del carico completi la distribuzione e indirizzare correttamente il traffico al tuo backend. Viene restituito un errore HTTP 404 se il file il bilanciamento del carico è ancora in fase di distribuzione. Se necessario, attendi qualche minuto e prova a farlo accedere nuovamente al sito web. Viene restituito il sito Web di base, come mostrato nel seguente output di esempio: Esempio HA/DR

Benvenuto in un sito web di Compute Engine con failover a caldo su Cloud Storagep>

i gruppi di istanze gestite vengono ripristinati e possono servire il traffico per l'intero sito web esperienza. - Verifica il dominio che vuoi utilizzare con il tuo bucket Cloud Storage. Crea un bucket Cloud Storage che corrisponda al nome del dominio che possiedi e vuoi usare: gsutil mb gsstatic-web.$DOMAIN IL Viene utilizzata la variabile DOMAIN definita all'inizio di questo documento, ad esempio . Questo esempio memorizza i file statici in esempio.com web-statico.esempio.com. Crea un file locale che copi nel bucket Cloud Storage nel file passo successivo: cat< index.html HA / DR example

Welcome to a test static web server with warm failover from Cloud Storagep>

HA / DR example

Welcome to a test static web server with warm failover from Cloud Storagep>

curlagain, or open your web browser, to access the IP address of the load balancer: curl $IP_ADDRESS It might take a few minutes for the load balancer to update the configuration and to correctly direct traffic back to your managed instance groups. If needed, wait a few minutes and try to access the website again. The main website from the managed instance groups is returned, as shown in the following example output: HA / DR example p>Welcome to a Compute Engine website with warm failover to Cloud Storagep> ## Clean up To avoid incurring charges to your Google Cloud account for the resources used in this tutorial, either delete the project that contains the resources, or keep the project and delete the individual resources. To delete the individual resources created in this document, complete the following steps: - Delete the Cloud Storage bucket: gsutil rm -r gsstatic-web.$DOMAIN Delete the load balancer configuration: gcloud compute forwarding-rules delete n http-content-rule-$NAME_SUFFIX --global --quiet gcloud compute target-http-proxies delete n http-lb-proxy-$NAME_SUFFIX --quiet gcloud compute url-maps delete web-map-http-$NAME_SUFFIX --quiet gcloud compute url-maps delete web-map-http-bucket-$NAME_SUFFIX --quiet gcloud compute backend-services delete n web-backend-service-$NAME_SUFFIX --global --quiet gcloud compute backend-buckets delete web-bucket-$NAME_SUFFIX --quiet Delete the managed instance groups and health check: gcloud compute instance-groups managed delete n instance-group-$NAME_SUFFIX-$REGION1 n --region=$REGION1 --quiet gcloud compute instance-groups managed delete n instance-group-$NAME_SUFFIX-$REGION2 n --region=$REGION2 --quiet gcloud compute health-checks delete http-basic-check-$NAME_SUFFIX --quiet Delete the instance templates, images, base VM, and persistent disks: gcloud compute instance-templates delete n template-$NAME_SUFFIX-$REGION1 --quiet gcloud compute instance-templates delete n template-$NAME_SUFFIX-$REGION2 --quiet gcloud compute images delete image-$NAME_SUFFIX --quiet gcloud compute images delete image-disk-$NAME_SUFFIX --quiet gcloud compute instances delete vm-base-$NAME_SUFFIX n --zone=$ZONE --quiet Delete the firewall rules. gcloud compute firewall-rules delete n allow-health-check-$NAME_SUFFIX --quiet gcloud compute firewall-rules delete n allow-ssh-$NAME_SUFFIX --quiet gcloud compute firewall-rules delete n allow-http-$NAME_SUFFIX --quiet Delete the subnet and VPC. gcloud compute networks subnets delete n subnet-$NAME_SUFFIX-$REGION1 --region=$REGION1 --quiet gcloud compute networks subnets delete n subnet-$NAME_SUFFIX-$REGION2 --region=$REGION2 --quiet gcloud compute networks delete network-$NAME_SUFFIX --quiet ## What's next - - For an alternative approach that uses Cloud DNS instead of external HTTP(S) Load Balancing to control the failover, see Deploy a warm recoverable web server using Cloud DNS with Compute Engine and Cloud Storage. This pattern is useful if you have, or want to use, Cloud DNS. - To learn how how to determine the best approach for your own applications and which recovery method to use, see the Disaster recovery planning guide. - To see other patterns for applications, such as cold and hot failover, see Disaster recovery scenarios for applications. - For more ways to handle scale and availability, see the Patterns for scalable and resilient apps. - Explore reference architectures, diagrams, tutorials, and best practices about Google Cloud. Take a look at our Cloud Architecture Center.