Dit document is bedoeld voor architecten en mensen die werkzaam zijn in operations en administratieve teams. Het document beschrijft een voorbeeldpatroon dat u kunt gebruiken voor uw eigen implementaties in Google Cloud. In dit patroon stuurt een load balancer verkeer naar Compute-engine gevallen in beheerde instantiegroepen die de inhoud dienen. Bij een storing update je de externe HTTP(S) Load Balancing configuratie en failover naar een statische site in Cloud opslag. Om deze zelfstudie te voltooien, hebt u een geregistreerde domeinnaam nodig die u beheert en wilt gebruiken met dit document. Bij productie-implementaties bevat uw website waarschijnlijk veel meer bestanden en aanvullende toepassingscode op uw beheerde instantiegroep virtuele machines (VM's) dan in dit document wordt weergegeven. Cloud Storage host dan een meer beperkte statische versie die minimale functionaliteit biedt. In een warme failover scenario zien gebruikers deze beperkte website tot de beheerde instantiegroepen herstellen en kan verkeer bedienen voor de volledige website-ervaring. In deze zelfstudie implementeert u resources om een ​​omgeving te creëren zoals weergegeven in de volgende afbeelding: Wanneer u een failover moet uitvoeren, werkt u de load balancer-configuratie bij naar direct verkeer naar Cloud Storage, zoals weergegeven in de volgende afbeelding: Dit warme failover-patroon compenseert de kosten van het uitvoeren van een andere beheerde instantiegroep in een andere regio die u alleen gebruikt als de primaire regio's mislukking. De kosten van een statische site die Cloud Storage gebruikt, zijn lager dan het gebruik ervan een andere beheerde instantiegroep, maar er is een korte vertraging bij het bijwerken van de belasting balancerconfiguratie tussen de hostingopties. De beperkte website ervaring in Cloud Storage is beter dan een niet-beschikbare website en slecht klantenervaring. Voor een alternatieve benadering die Cloud DNS gebruikt in plaats van extern HTTP(S) Load Balancing om de failover te regelen, zie Implementeer een warme herstelbare webserver met behulp van Cloud DNS met Compute Engine en Cloud Storage. Dit patroon is handig als u Cloud DNS heeft of wilt gebruiken. Om betrouwbare applicaties in Google Cloud uit te voeren, raden we u aan te ontwerpen uw applicatie-infrastructuur om storingen op te vangen. Afhankelijk van uw toepassing en zakelijke behoeften, hebt u mogelijk een koude failover, warme failover of hot nodig failover-patroon. Voor meer informatie over het bepalen van de beste aanpak voor uw eigen toepassingen, zie de Planningsgids voor noodherstel. Dit document maakt gebruik van een basis Apache-webserver, maar dezelfde aanpak voor de implementatie van de infrastructuur is van toepassing op andere toepassingsomgevingen die u moet maken. ## Doelstellingen - - Maak regionaal beheerde instantiegroepen met een aangepaste VM-image. - Maak een Cloud Storage-bucket. - Creëer en configureer externe HTTP(S) Load Balancing. - Test de failover van de warme webserver met een bijgewerkte load balancer configuratie. - Test het herstel en de failback met een bijgewerkte load balancer-configuratie. ## Kosten In deze zelfstudie worden de volgende factureerbare componenten van Google Cloud gebruikt: - - Compute-engine - Netwerken - Cloud opslag Om een ​​kostenraming te genereren op basis van uw verwachte gebruik, gebruik de prijscalculator. ## Voordat je begint - - Log in op uw Google Cloud-account. Als je nieuw bent Google Cloud, maak een account aan om te evalueren hoe onze producten presteren scenario's uit de echte wereld. Nieuwe klanten krijgen ook $ 300 aan gratis tegoeden workloads uitvoeren, testen en implementeren. - In de Google Cloud-console, op de projectkiezerpagina, selecteer of maak een Google Cloud-project. - Zorg ervoor dat facturering is ingeschakeld voor uw Cloud-project. Leren hoe te controleer of facturering is ingeschakeld voor een project. - Schakel de Compute Engine-API in. - Installeer en initialiseer de Google Cloud CLI. - In de Google Cloud-console, op de projectkiezerpagina, selecteer of maak een Google Cloud-project. - Zorg ervoor dat facturering is ingeschakeld voor uw Cloud-project. Leren hoe te controleer of facturering is ingeschakeld voor een project. - Schakel de Compute Engine-API in. - Installeer en initialiseer de Google Cloud CLI. U kunt de Google Cloud CLI uitvoeren in de console zonder de Google Cloud CLI. Om de gcloud CLI uit te voeren in de console, gebruik dan de Cloud Shell ## Bereid de omgeving voor In deze sectie definieert u enkele variabelen voor uw resourcenamen en locaties. Deze variabelen worden gebruikt door de Google Cloud CLI-opdrachten als u de middelen inzetten. In dit document voert u, tenzij anders aangegeven, alle opdrachten in Wolk Shell of uw lokale ontwikkelomgeving. - Vervangen met uw eigen project-ID. Indien gewenst, geef uw eigen naamsuffix op voor bronnen om te helpen zoeken en identificeren zij, zoals PROJECT_ID app Geef twee regio's op, zoals en ons-west1 , en een zone binnen een van die regio's, zoals ons-west2 . Deze zone definieert waar de initiële basis-VM wordt gemaakt die wordt gebruikt om een ​​afbeelding voor de beheerde instantiegroep te maken us-west1-a Stel ten slotte een domein in dat wordt gebruikt voor uw statische website, zoals voorbeeld.com PROJECT_ID= PROJECT_ID NAME_SUFFIX=app REGIO1= us-west1 REGIO2= us-west2 ZONE= us-west1-a DOMEIN= voorbeeld.com ## Maak een VPC en subnet Om netwerktoegang tot de VM's te bieden, maakt u Virtual Private Cloud (VPC) aan en subnetten. Aangezien u beheerde instantiegroepen in twee regio's nodig hebt, maakt u er een subnet in elke regio. Voor meer informatie over de voordelen van de custom subnet-modus om IP-adresbereiken te beheren die in uw omgeving worden gebruikt, zie Gebruik aangepaste VPC-netwerken. - Maak de VPC met een aangepaste subnetmodus: gcloud-rekennetwerken maken netwerk-$NAME_SUFFIX --subnet-mode=custom Maak nu twee subnetten in de nieuwe VPC, één voor elk regio. Definieer uw eigen adresbereiken, zoals en 10.1.0.0/20 , Dat passen in uw netwerkbereik: 10.2.0.0/20 gcloud rekennetwerken subnetten creëren n subnet-$NAME_SUFFIX-$REGION1 n --network=network-$NAME_SUFFIX n --range= 10.1.0.0/20n --region=$REGION1 gcloud rekennetwerken subnetten creëren n subnet-$NAME_SUFFIX-$REGION2 n --network=network-$NAME_SUFFIX n --range= 10.2.0.0/20n --region=$REGION2 ## Maak firewallregels Gebruik om netwerkverkeer correct te laten stromen in de VPC firewall regels. - Maak firewallregels om webverkeer en statuscontroles voor de belasting toe te staan balancer en beheerde instantiegroepen: 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-ranges=0.0.0.0/0 n --target-tags=http-server gcloud compute firewall-regels 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 De HTTP-regel staat verkeer toe naar elke VM waar de http-servertag is toegepast, en vanaf elke bron met behulp van de 0.0.0.0/0bereik. Voor de gezondheidscheck regel, standaardbereiken voor Google Cloud zijn ingesteld om het platform correct te laten werken controleer de gezondheid van bronnen. Om SSH-verkeer toe te staan ​​voor de initiële configuratie van een basis-VM-image, scope de firewallregel naar uw omgeving met behulp van de --source-bereikparameter. Mogelijk moet u met uw netwerkteam samenwerken om te bepalen welke bronbereiken uw organisatie gebruikt Vervangen met uw eigen IP-adresbereiken: IP_ADDRESS_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 -- source-bereiken= IP_ADDRESS_SCOPE Nadat u de firewallregels hebt gemaakt, controleert u of de drie regels zijn uitgevoerd toegevoegd: gcloud compute lijst met firewallregels n --project=$PROJECT_ID n --filter="NETWORK=network-$NAME_SUFFIX"De volgende voorbeelduitvoer laat zien dat de drie regels correct zijn aangemaakt: NAAM NETWERKRICHTING PRIORITEIT TOEGESTAAN toestaan-gezondheid-check-app netwerk-app INGRESS 1000 tcp:80 toestaan-http-app netwerk-app INGRESS 1000 tcp:80 toestaan-ssh-app netwerk-app INGRESS 1000 tcp:22 ## Maak en configureer een basis-VM-image Om identieke VM's te maken die u zonder aanvullende configuratie implementeert, moet u gebruik een aangepaste VM-image. Deze afbeelding legt de OS- en Apache-configuratie vast, en wordt gebruikt om elke VM in de beheerde instantiegroep in de volgende stappen te maken. Op de VM maakt u een basis index.html-bestand op de permanente schijf en monteer het op /var/www/voorbeeld.com. Een Apache-configuratiebestand op /etc/apache2/sites-available/example.com.conf levert webinhoud van de aangekoppelde persistente schijflocatie Het volgende diagram toont de standaard HTML-pagina die door Apache wordt bediend en die is opgeslagen op de permanente schijf: U bouwt deze omgeving in de volgende stappen. - Maak een basis-VM met een gekoppelde persistente schijf: gcloud rekeninstanties maken 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 U gebruikt parameters die aan het begin van dit document zijn gedefinieerd om de VM een naam te geven en verbinding maken met het juiste subnet. Er worden ook namen toegewezen vanuit de parameters voor de opstartschijf en de gegevensschijf. Om de eenvoudige website te installeren en configureren, maakt u verbinding met de basis-VM met behulp van SSH: gcloud compute ssh vm-base-$NAME_SUFFIX --zone=$ZONE Maak in uw SSH-sessie met de virtuele machine een script om de virtuele machine te configureren in een redacteur naar keuze. Het volgende voorbeeld gebruikt Nano als redacteur: nano configureren-vm. Plak het volgende configuratiescript in het bestand: bin/bash NAME_SUFFIX= app # Maak een map voor de basiswebsitebestanden sudo mkdir -p /var/www/example.com sudo chmod a+w /var/www/example.com sudo chown -R www-data: /var/www/example.com # Zoek de schijfnaam, formatteer en koppel deze 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,gooi $DISK_PATH weg sudo mount -o weggooien, standaard $DISK_PATH /var/www/example.com # Installeer Apache sudo apt-get-update&& sudo apt-get -y install apache2 # Schrijf een eenvoudig HTML-bestand naar de aangekoppelde persistente schijf sudo tee -a /var/www/example.com/index.html >/dev/null EOF' HA/DR-voorbeeld

Welkom bij een Compute Engine-website met warme failover naar 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 # Schakel het Apache-configuratiebestand in en laad de service opnieuw sudo a2dissite 000-standaard sudo a2ensite voorbeeld.com.conf sudo systemctl herlaad apache2 Update de variabele die overeenkomt met de waarde die is ingesteld op het begin van dit document, zoals NAME_SUFFIX-app. Schrijf het bestand uit en sluit uw editor af. In Nano gebruik je bijvoorbeeld Ctrl-O om het bestand weg te schrijven en vervolgens af te sluiten met Ctrl-X. Maak het configuratiescript uitvoerbaar en voer het uit: chmod +x configure-vm../configure-vm. Verlaat de SSH-sessie naar de VM: Uitgang Haal het IP-adres van de virtuele machine op en gebruik curlom de basiswebpagina te zien: curl $(gcloud compute instances beschrijven vm-base-$NAME_SUFFIX n --zone $ZONE n --format="value(networkInterfaces.accessConfigs.[0].natIPn De basiswebsite wordt geretourneerd, zoals weergegeven in de volgende voorbeelduitvoer: HA/DR-voorbeeld

Welkom bij een Compute Engine-website met warme failover naar Cloud Storagep>

gcloud compute-images create image-disk-$NAME_SUFFIX n --source-disk=disk-base-$NAME_SUFFIX n --source-disk-zone=$ZONE # Maak instantiesjablonen gcloud compute instance-templates maken sjabloon-$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\ delete,defaults,nofail\ 0\ 2 ee\ -a\ /etc/fstabn'mount\ -a n --image=image-$NAME_SUFFIX n --create-disk=image=image-disk-$NAME_SUFFIX ,automatisch verwijderen=ja gcloud compute instance-templates maken sjabloon-$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\ delete,defaults,nofail\ 0\ 2 ee\ -a\ /etc/fstabn'mount\ -a n --image=image-$NAME_SUFFIX n --create-disk=image=image-disk-$NAME_SUFFIX ,automatisch verwijderen=ja # Maak een statuscontrole voor VM-instanties gcloud compute health-checks maken http http-basic-check-$NAME_SUFFIX n --port 80 # Maak de beheerde instantiegroepen gcloud beheerde instantiegroepen beheren instantiegroep maken-$NAME_SUFFIX-$REGION1 n --template=template-$NAME_SUFFIX-$REGION1 n --size=2 n --region=$REGION1 n --health-check=http- basiscontrole-$NAME_SUFFIX gcloud beheerde instantiegroepen beheren instantiegroep maken-$NAME_SUFFIX-$REGION2 n --template=template-$NAME_SUFFIX-$REGION2 n --size=2 n --region=$REGION2 n --health-check=http- basiscontrole-$NAME_SUFFIX ## Maak en configureer een load balancer Om gebruikers toegang te geven tot uw website, moet u verkeer naar de VM's doorlaten die worden uitgevoerd in de beheerde instantiegroepen. U wilt ook automatisch doorverwijzen verkeer naar nieuwe VM's als er een zonefout is in een beheerde instantiegroep. In de volgende sectie maakt u een externe loadbalancer met een backend-service voor HTTP-verkeer op poort 80, gebruik de statuscontrole die in de vorige stappen is gemaakt en wijs een extern IP-adres toe adres door naar de backend-service. Voor meer informatie, zie Hoe een eenvoudige externe HTTP-loadbalancer in te stellen. - Maak en configureer de load balancer voor uw toepassing: # Configureer poortregels voor HTTP-poort 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 # Maak een backend-service en voeg de beheerde instantiegroepen eraan toe 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 # Maak een URL-kaart voor de backend-service gcloud bereken url-kaarten maak web-kaart-http-$NAME_SUFFIX n --default-service web-backend-service-$NAME_SUFFIX # Configureer doorsturen voor het HTTP-verkeer gcloud compute target-http-proxy's maken 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 Haal het IP-adres van de doorstuurregel voor het webverkeer op: IP_ADDRESSgcloud compute forwarding-regels beschrijven http-content-regel-$NAME_SUFFIX n --global n --format="value(IPAddressn Gebruiken curl, of open uw webbrowser, om de website te bekijken met behulp van het IP-adres adres van de load balancer uit de vorige stap: krul $IP_ADDRESS Het duurt een paar minuten voordat de load balancer klaar is met implementeren en klaar is verkeer correct naar uw backend leiden. Er wordt een HTTP 404-fout geretourneerd als de load balancer wordt nog steeds geïmplementeerd. Wacht indien nodig een paar minuten en probeer het weer toegang tot de website. De basiswebsite wordt geretourneerd, zoals weergegeven in de volgende voorbeelduitvoer: HA/DR-voorbeeld

Welkom bij een Compute Engine-website met warme failover naar Cloud Storagep>

beheerde instantiegroepen herstellen en kunnen verkeer voor de volledige website verwerken ervaring. - Verifieer het domein die u wilt gebruiken met uw Cloud Storage-bucket. Maak een Cloud Storage-bucket die overeenkomt met de naam van het domein waarvan u de eigenaar bent en wil gebruiken: gsutil mb gsstatic-web.$DOMEIN De DOMAINvariabele gedefinieerd aan het begin van dit document wordt gebruikt, zoals . In dit voorbeeld worden de statische bestanden opgeslagen op voorbeeld.com statisch-web.voorbeeld.com. Maak een lokaal bestand dat u kopieert naar de Cloud Storage-bucket in de volgende stap: 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.