Detta dokument är avsett för arkitekter och personer som arbetar inom drift och administrativa team. Dokumentet beskriver ett exempelmönster som du kan använda för dina egna implementeringar i Google Cloud. I detta mönster dirigerar en lastbalanserare trafik till Compute Engine instanser i hanterade instansgrupper som tjänar innehållet. Vid ett avbrott uppdaterar du extern HTTP(S) lastbalansering konfiguration och misslyckas över till en statisk webbplats i Molnlagring. För att slutföra den här handledningen behöver du ett registrerat domännamn som du kontrollerar och vill använda med detta dokument. I produktionsinstallationer innehåller din webbplats sannolikt många fler filer och ytterligare programkod på dina virtuella datorer för hanterade instansgrupper (VM) än som visas i detta dokument. Cloud Storage är sedan värd för en mer begränsad statisk version som ger minimal funktionalitet. I en varm failover scenario, användare ser denna begränsade webbplats tills de hanterade instansgrupperna återställa och kan betjäna trafik för hela webbplatsupplevelsen. I den här självstudien distribuerar du resurser för att skapa en miljö som visas i följande bild: När du behöver misslyckas uppdaterar du lastbalanserarens konfiguration till direkt trafik till Cloud Storage, som visas i följande bild: Detta varma failover-mönster balanserar kostnaderna för att driva en annan hanterad instansgrupp i en annan region som du bara använder när de primära regionerna misslyckas. Kostnaden för en statisk webbplats som använder Cloud Storage är lägre än att köra en annan hanterad instansgrupp, men det är en kort fördröjning när du uppdaterar laddningen balanseringskonfiguration mellan värdalternativen. Den begränsade webbplatsen erfarenhet av Cloud Storage är bättre än en otillgänglig webbplats och dålig kundupplevelse. För ett alternativt tillvägagångssätt som använder Cloud DNS istället för externt HTTP(S) Lastbalansering för att kontrollera failover, se Distribuera en varm återställningsbar webbserver med Cloud DNS med Compute Engine och Cloud Storage. Det här mönstret är användbart om du har, eller vill använda, Cloud DNS. För att köra pålitliga applikationer i Google Cloud rekommenderar vi att du designar din applikationsinfrastruktur för att hantera avbrott. Beroende på din ansökan och affärsbehov kan du behöva en kall failover, varm failover eller varm failover-mönster. För mer information om hur man avgör det bästa tillvägagångssättet för dina egna applikationer, se Planeringsguide för katastrofåterställning. Detta dokument använder en grundläggande Apache webbserver, men samma tillvägagångssätt för utbyggnaden av infrastrukturen gäller för andra applikationsmiljöer du behöver skapa. ## Mål - - Skapa regionala hanterade instansgrupper med en anpassad VM-bild. - Skapa en Cloud Storage-hink. - Skapa och konfigurera extern HTTP(S) lastbalansering. - Testa den varma webbserverns failover med en uppdaterad lastbalanserare konfiguration. - Testa återställningen och återställningen med en uppdaterad lastbalanseringskonfiguration. ## Kostar Denna handledning använder följande fakturerbara komponenter i Google Cloud: - - Compute Engine - Nätverk - Molnlagring För att generera en kostnadsuppskattning baserad på din beräknade användning, använd priskalkylatorn. ## Innan du börjar - - Logga in på ditt Google Cloud-konto. Om du är ny på Google Cloud, skapa ett konto för att utvärdera hur våra produkter presterar i verkliga scenarier. Nya kunder får också $300 i gratis krediter till köra, testa och distribuera arbetsbelastningar. - I Google Cloud-konsolen, på projektväljarsidan, välj eller skapa ett Google Cloud-projekt. - Se till att fakturering är aktiverat för ditt molnprojekt. Lära sig hur kontrollera om fakturering är aktiverat för ett projekt. - Aktivera Compute Engine API. - Installera och initiera Google Cloud CLI. - I Google Cloud-konsolen, på projektväljarsidan, välj eller skapa ett Google Cloud-projekt. - Se till att fakturering är aktiverat för ditt molnprojekt. Lära sig hur kontrollera om fakturering är aktiverat för ett projekt. - Aktivera Compute Engine API. - Installera och initiera Google Cloud CLI. Du kan köra Google Cloud CLI i konsolen utan att installera Google Cloud CLI. För att köra gcloud CLI i konsolen, använd Cloud Shell ## Förbered miljön I det här avsnittet definierar du några variabler för dina resursnamn och platser. Dessa variabler används av Google Cloud CLI-kommandon som du sätta in resurserna. Genomgående i detta dokument, om inget annat anges, anger du alla kommandon i Molnskal eller din lokala utvecklingsmiljö. - Byta ut med ditt eget projekt-ID. Om så önskas, ange ditt eget namnsuffix för resurser som hjälper dig att söka efter och identifiera dem, som t.ex PROJECT_ID app Ange två regioner, t.ex och us-west1 , och en zon inom en av dessa regioner, t.ex us-west2 . Denna zon definierar var den ursprungliga VM:n skapas som används för att skapa en bild för den hanterade instansgruppen us-west1-a Slutligen, ställ in en domän som används för din statiska webbplats, t.ex exempel.com PROJECT_ID= PROJECT_ID NAME_SUFFIX= app REGION1= us-west1 REGION2= us-west2 ZONE= us-west1-a DOMAIN= example.com ## Skapa en VPC och subnät För att ge nätverksåtkomst till virtuella datorer skapar du Virtual Private Cloud (VPC) och undernät. Eftersom du behöver hanterade instansgrupper i två regioner skapar du en subnät i varje region. För mer information om fördelarna med anpassad subnätläge för att hantera IP-adressintervall som används i din miljö, se Använd anpassat läge VPC-nätverk. - Skapa VPC med ett anpassat undernätsläge: gcloud compute-nätverk skapar nätverk-$NAME_SUFFIX --subnet-mode=custom Skapa nu två undernät i den nya VPC, ett för varje område. Definiera dina egna adressintervall, som t.ex och 10.1.0.0/20 , den där passa i ditt nätverksområde: 10.2.0.0/20 gcloud compute nätverk undernät skapa n subnät-$NAME_SUFFIX-$REGION1 n --network=nätverk-$NAME_SUFFIX n --range= 10.1.0.0/20n --region=$REGION1 gcloud beräkningsnätverk undernät skapa n undernät-$NAME_SUFFIX-$REGION2 n --network=nätverk-$NAME_SUFFIX n --range= 10.2.0.0/20n --region=$REGION2 ## Skapa brandväggsregler För att låta nätverkstrafiken flöda korrekt i VPC:n, använd brandväggsregler. - Skapa brandväggsregler för att tillåta webbtrafik och hälsokontroller för belastningen balanserar och hanterade instansgrupper: gcloud compute brandvägg-regler skapa allow-http-$NAME_SUFFIX n --network=nätverk-$NAME_SUFFIX n --direction=INGRESS n --priority=1000 n --action=ALLOW n --rules=tcp:80 n -- source-ranges=0.0.0.0/0 n --target-tags=http-server gcloud compute-brandväggsregler skapar allow-health-check-$NAME_SUFFIX n --network=nätverk-$NAME_SUFFIX n --action=tillåt 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 HTTP-regeln tillåter trafik till alla virtuella datorer där http-servertagg tillämpas, och från vilken källa som helst som använder 0.0.0.0/0-intervall. För regel för hälsokontroll, standardintervallen för Google Cloud är inställda för att plattformen ska fungera korrekt kontrollera resursernas hälsa. För att tillåta SSH-trafik för den initiala konfigurationen av en bas-VM-bild, scope brandväggsregeln till din miljö med hjälp av --source-rangeparameter. Du kan behöva samarbeta med ditt nätverksteam för att avgöra vilket källarintervall din organisation använder Byta ut med dina egna IP-adressomfång: IP_ADDRESS_SCOPE gcloud compute brandvägg-regler skapa allow-ssh-$NAME_SUFFIX n --network=nätverk-$NAME_SUFFIX n --direction=INGRESS n --priority=1000 n --action=ALLOW n --rules=tcp:22 n -- källintervall= IP_ADDRESS_SCOPE När du har skapat brandväggsreglerna, kontrollera att de tre reglerna har varit det Lagt till: gcloud compute-brandväggsreglerlista n --project=$PROJECT_ID n --filter="NETWORK=nätverk-$NAME_SUFFIX"Följande exempel visar att de tre reglerna har varit korrekta skapat: NAMN NÄTVERK RIKTNING PRIORITET TILLÅT allow-health-check-app network-app INGRESS 1000 tcp:80 tillåt-http-app nätverk-app INGRESS 1000 tcp:80 tillåt-ssh-app nätverksapp INGRESS 1000 tcp:22 ## Skapa och konfigurera en bas-VM-avbildning För att skapa identiska virtuella datorer som du distribuerar utan ytterligare konfiguration, måste du använd en anpassad VM-bild. Den här bilden fångar OS- och Apache-konfigurationen och används för att skapa varje virtuell dator i den hanterade instansgruppen i nästa steg. På den virtuella datorn skapar du en grundläggande index.html-filen på den beständiga disken och montera den på /var/www/exempel.com. En Apache-konfigurationsfil på /etc/apache2/sites-available/example.com.conf serverar webbinnehåll från monterad beständig diskplats Följande diagram visar den grundläggande HTML-sidan som serveras av Apache som är lagrad på den beständiga disken: Du bygger den här miljön i följande steg. - Skapa en bas-VM med en ansluten beständig disk: gcloud compute-instanser skapar 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-moln 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 Du använder parametrar som definierats i början av detta dokument för att namnge den virtuella datorn och ansluta till rätt subnät. Namn tilldelas också från parametrarna för startskivan och datadisken. För att installera och konfigurera den enkla webbplatsen, anslut till bas-VM med hjälp av SSH: gcloud compute ssh vm-base-$NAME_SUFFIX --zone=$ZONE I din SSH-session till den virtuella datorn, skapa ett skript för att konfigurera den virtuella datorn i en valfri redaktör. Följande exempel använder Nano som redaktör: nano configure-vm. Klistra in följande konfigurationsskript i filen: bin/bash NAME_SUFFIX= app # Skapa katalog för de grundläggande webbplatsfilerna sudo mkdir -p /var/www/example.com sudo chmod a+w /var/www/example.com sudo chown -R www-data: /var/www/example.com # Hitta skivnamnet, formatera och montera den 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,kassera $DISK_PATH sudo mount -o kassera, förinställer $DISK_PATH /var/www/example.com # Installera Apache sudo apt-get uppdatering&& sudo apt-get -y installera apache2 # Skriv ut en grundläggande HTML-fil till den monterade persistenta disken sudo tee -a /var/www/example.com/index.html >/dev/null EOF' HA / DR-exempel

Välkommen till en Compute Engine-webbplats med varm failover till 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 # Aktivera Apache-konfigurationsfilen och ladda om tjänsten sudo a2dissite 000-standard sudo a2ensite example.com.conf sudo systemctl ladda om apache2 Uppdatera variabel för att matcha värdet som satts till början av detta dokument, som t.ex NAME_SUFFIX-appen. Skriv ut filen och avsluta din editor. Till exempel i Nano använder du Ctrl-Oför att skriva ut filen och avsluta sedan med Ctrl-X. Gör konfigurationsskriptet körbart och kör det sedan: chmod +x configure-vm../configure-vm. Avsluta SSH-sessionen till den virtuella datorn: utgång Hämta IP-adressen till den virtuella datorn och använd curl för att se den grundläggande webbsidan: curl $(gcloud compute-instanser beskriver vm-base-$NAME_SUFFIX n --zon $ZONE n --format="value(networkInterfaces.accessConfigs.[0].natIPn Den grundläggande webbplatsen returneras, som visas i följande exempelutdata: HA / DR-exempel

Välkommen till en Compute Engine-webbplats med varm failover till Cloud Storagep>

gcloud compute-avbildningar skapa image-disk-$NAME_SUFFIX n --source-disk=disk-base-$NAME_SUFFIX n --source-disk-zone=$ZONE # Skapa instansmallar gcloud compute instans-mallar skapa mall-$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\ värde\ /dev/sdb /var/www/exempel. com\ ext4\ discard,defaults,nofail\ 0\ 2 ee\ -a\ /etc/fstabn'mount\ -a n --image=image-$NAME_SUFFIX n --create-disk=image=image-disk-$NAME_SUFFIX ,auto-delete=ja gcloud compute instans-mallar skapa mall-$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\ värde\ /dev/sdb /var/www/exempel. com\ ext4\ discard,defaults,nofail\ 0\ 2 ee\ -a\ /etc/fstabn'mount\ -a n --image=image-$NAME_SUFFIX n --create-disk=image=image-disk-$NAME_SUFFIX ,auto-delete=ja # Skapa en hälsokontroll för VM-instanser gcloud compute hälsokontroller skapar http http-basic-check-$NAME_SUFFIX n --port 80 # Skapa de hanterade instansgrupperna gcloud compute instans-grupper hanteras skapa instans-grupp-$NAME_SUFFIX-$REGION1 n --template=mall-$NAME_SUFFIX-$REGION1 n --size=2 n --region=$REGION1 n --health-check=http- basic-check-$NAME_SUFFIX gcloud compute instans-grupper hanteras skapa instans-grupp-$NAME_SUFFIX-$REGION2 n --template=mall-$NAME_SUFFIX-$REGION2 n --size=2 n --region=$REGION2 n --health-check=http- basic-check-$NAME_SUFFIX ## Skapa och konfigurera en lastbalanserare För att användare ska få tillgång till din webbplats måste du tillåta trafik till de virtuella datorerna som körs i de hanterade instansgrupperna. Du vill också omdirigera automatiskt trafik till nya virtuella datorer om det finns ett zonfel i en hanterad instansgrupp. I följande avsnitt skapar du en extern lastbalanserare med en backend-tjänst för HTTP-trafik på port 80, använd hälsokontrollen som skapades i de föregående stegen och mappa en extern IP adress till backend-tjänsten. För mer information, se Hur man ställer in en enkel extern HTTP-lastbalanserare. - Skapa och konfigurera lastbalanseraren för din applikation: # Konfigurera portregler för HTTP-port 80 gcloud compute instans-grupper set-named-ports n instans-group-$NAME_SUFFIX-$REGION1 n --named-ports http:80 n --region $REGION1 gcloud compute instans-grupper set-named-ports n instans-group-$NAME_SUFFIX-$REGION2 n --named-ports http:80 n --region $REGION2 # Skapa en backend-tjänst och lägg till de hanterade instansgrupperna till den 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 # Skapa en URL-karta för backend-tjänsten gcloud compute url-maps create web-map-http-$NAME_SUFFIX n --default-service web-backend-service-$NAME_SUFFIX # Konfigurera vidarebefordran för HTTP-trafiken gcloud compute target-http-proxies skapa n http-lb-proxy-$NAME_SUFFIX n --url-map web-map-http-$NAME_SUFFIX gcloud compute forwarding-rules skapa n http-content-rule-$NAME_SUFFIX n --global n --target-http-proxy=http-lb-proxy-$NAME_SUFFIX n --ports=80 Hämta IP-adressen för vidarebefordranregeln för webbtrafiken: IP_ADDRESSgcloud compute forwarding-regler beskriver http-content-rule-$NAME_SUFFIX n --global n --format="value(IPAddressn Använda sig av curl, eller öppna din webbläsare för att visa webbplatsen med IP:n adress för lastbalanseraren från föregående steg: krulla $IP_ADDRESS Det tar några minuter för lastbalanseraren att slutföra driftsättningen och att dirigera trafik till din backend korrekt. Ett HTTP 404-fel returneras om lastbalanseraren är fortfarande i drift. Om det behövs, vänta några minuter och försök gå in på webbplatsen igen. Den grundläggande webbplatsen returneras, som visas i följande exempelutdata: HA / DR-exempel

Välkommen till en Compute Engine-webbplats med varm failover till Cloud Storagep>

hanterade instansgrupper återställs och kan betjäna trafik för hela webbplatsen erfarenhet. - Verifiera domänen som du vill använda med din Cloud Storage-hink. Skapa en Cloud Storage-bucket som matchar namnet på domänen du äger och vill använda: gsutil mb gsstatic-web.$DOMAIN De DOMAIN-variabel definierad i början av detta dokument används, som t.ex . Detta exempel lagrar de statiska filerna på exempel.com static-web.example.com. Skapa en lokal fil som du kopierar till Cloud Storage-bucket i Nästa steg: 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.