Ce document est destiné aux architectes et aux personnes qui travaillent dans les opérations et équipes administratives. Le document décrit un exemple de modèle que vous pouvez utiliser pour vos propres déploiements dans Google Cloud. Dans ce modèle, un équilibreur de charge dirige le trafic vers Moteur de calcul cas dans groupes d'instances gérés qui servent le contenu. En cas de panne, vous mettez à jour le Équilibrage de charge HTTP(S) externe configuration et basculer vers un site statique dans Stockage en ligne. Pour suivre ce tutoriel, vous avez besoin d'un nom de domaine enregistré que vous contrôlez et que vous souhaitez utiliser avec ce document. Dans les déploiements de production, votre site Web comprend probablement beaucoup plus de fichiers et code d'application supplémentaire sur les machines virtuelles de votre groupe d'instances géré (VM) que celui indiqué dans ce document. Cloud Storage héberge alors un plus version statique limitée qui fournit des fonctionnalités minimales. Dans un basculement à chaud scénario, les utilisateurs voient ce site Web limité jusqu'à ce que les groupes d'instances gérés récupérer et peut servir le trafic pour l'expérience complète du site Web. Dans ce didacticiel, vous déployez des ressources pour créer un environnement, comme indiqué dans le image suivante : Lorsque vous devez basculer, vous mettez à jour la configuration de l'équilibreur de charge pour diriger trafic vers Cloud Storage, comme illustré dans l'image suivante : Ce modèle de basculement à chaud équilibre le coût d'exécution d'un autre groupe d'instances dans une région différente que vous n'utilisez que lorsque les régions principales échouer. Le coût d'un site statique utilisant Cloud Storage est inférieur à celui de l'exécution un autre groupe d'instances géré, mais il y a un court délai pendant que vous mettez à jour la charge configuration de l'équilibreur entre les options d'hébergement. Le site limité l'expérience dans Cloud Storage est meilleure qu'un site Web indisponible et médiocre expérience client. Pour une approche alternative qui utilise Cloud DNS au lieu d'un DNS externe Équilibrage de charge HTTP(S) pour contrôler le basculement, voir Déployez un serveur Web récupérable à chaud à l'aide de Cloud DNS avec Compute Engine et Cloud Storage. Ce modèle est utile si vous possédez ou souhaitez utiliser Cloud DNS. Pour exécuter des applications fiables dans Google Cloud, nous vous recommandons de concevoir votre infrastructure applicative pour gérer les pannes. En fonction de votre demande et les besoins de l'entreprise, vous pourriez avoir besoin d'un basculement à froid, d'un basculement à chaud ou d'un basculement à chaud modèle de basculement. Pour plus d'informations sur la façon de déterminer la meilleure approche pour vos propres applications, voir le Guide de planification de reprise après sinistre. Ce document utilise une base Serveur Web Apache, mais la même approche du déploiement de l'infrastructure s'applique à d'autres environnements d'application que vous devez créer. ## Objectifs - - Créez des groupes d'instances gérés régionaux avec une image de VM personnalisée. - Créez un bucket Cloud Storage. - Créer et configurer l'équilibrage de charge HTTP(S) externe. - Testez le basculement du serveur Web à chaud avec un équilibreur de charge mis à jour configuration. - Testez la récupération et le rétablissement avec une configuration d'équilibreur de charge mise à jour. ## Frais Ce tutoriel utilise les composants facturables suivants de Google Cloud : - - Moteur de calcul - La mise en réseau - Stockage en ligne Pour générer une estimation des coûts en fonction de votre utilisation prévue, utilisez le calculateur de prix. ## Avant que tu commences - - Connectez-vous à votre compte Google Cloud. Si vous êtes nouveau à Google Cloud, créer un compte pour évaluer la performance de nos produits dans scénarios du monde réel. Les nouveaux clients obtiennent également 300 $ en crédits gratuits pour exécuter, tester et déployer des charges de travail. - Dans la console Google Cloud, sur la page de sélection de projet, sélectionnez ou créez un projet Google Cloud. - Assurez-vous que la facturation est activée pour votre projet Cloud. Apprendre à vérifier si la facturation est activée sur un projet. - Activez l'API Compute Engine. - Installez et initialisez l'interface de ligne de commande Google Cloud. - Dans la console Google Cloud, sur la page de sélection de projet, sélectionnez ou créez un projet Google Cloud. - Assurez-vous que la facturation est activée pour votre projet Cloud. Apprendre à vérifier si la facturation est activée sur un projet. - Activez l'API Compute Engine. - Installez et initialisez l'interface de ligne de commande Google Cloud. Vous pouvez exécuter l'interface de ligne de commande Google Cloud dans console sans installer le CLI Google Cloud. Pour exécuter l'interface de ligne de commande gcloud dans console, utilisez Cloud Shell ## Préparer l'environnement Dans cette section, vous définissez certaines variables pour vos noms de ressources et Emplacements. Ces variables sont utilisées par les commandes CLI de Google Cloud lorsque vous déployer les ressources. Tout au long de ce document, sauf indication contraire, vous entrez toutes les commandes dans Coquille de nuage ou votre environnement de développement local. - Remplacer avec votre propre ID de projet. Si on le désire, fournissez votre propre suffixe de nom pour les ressources permettant de rechercher et d'identifier eux, tels que PROJET_ID application Spécifiez deux régions, telles que et us-west1 , et une zone à l'intérieur de l'une de ces régions, telle que nous-ouest2 . Cette zone définit où la VM de base initiale est créé et utilisé pour créer une image pour le groupe d'instances géré us-west1-a Enfin, définissez un domaine utilisé pour votre site Web statique, tel que exemple.com PROJECT_ID= PROJET_ID NAME_SUFFIX= application REGION1= us-west1 REGION2= us-west2 ZONE= us-west1-a DOMAINE= exemple.com ## Créer un VPC et un sous-réseau Pour fournir un accès réseau aux VM, vous créez un Virtual Private Cloud (VPC) et sous-réseaux. Comme vous avez besoin de groupes d'instances gérés dans deux régions, vous en créez un sous-réseau dans chaque région. Pour plus d'informations sur les avantages de la coutume mode sous-réseau pour gérer les plages d'adresses IP utilisées dans votre environnement, voir Utilisez des réseaux VPC en mode personnalisé. - Créez le VPC avec un mode de sous-réseau personnalisé : les réseaux de calcul gcloud créent un réseau-$NAME_SUFFIX --subnet-mode=custom Créez maintenant deux sous-réseaux dans le nouveau VPC, un pour chacun Région. Définissez vos propres plages d'adresses, telles que et 10.1.0.0/20 , que s'adapter à la portée de votre réseau : 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 --region=$REGION1 gcloud compute networks subnets create n subnet-$NAME_SUFFIX-$REGION2 n --network=network-$NAME_SUFFIX n --range= 10.2.0.0/20n --region=$REGION2 ## Créer des règles de pare-feu Pour que le trafic réseau circule correctement dans le VPC, utilisez règles de pare-feu. - Créer des règles de pare-feu pour autoriser le trafic Web et les vérifications de l'état du chargement équilibreur et groupes d'instances gérés : 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 -- sources-ranges=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 règle HTTP autorise le trafic vers n'importe quelle machine virtuelle sur laquelle http-servertag est appliqué, et à partir de n'importe quelle source utilisant le 0.0.0.0/0plage. Pour le règle de contrôle de santé, les plages par défaut de Google Cloud sont définies pour permettre à la plate-forme de vérifier la santé des ressources. Pour autoriser le trafic SSH pour la configuration initiale d'une image de VM de base, la règle de pare-feu à votre environnement à l'aide de --source-rangeparameter. Vous devrez peut-être travailler avec votre équipe réseau pour déterminer quelles plages de source votre organisation utilise Remplacer avec vos propres étendues d'adresse IP : 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 -- plages-source= IP_ADDRESS_SCOPE Après avoir créé les règles de pare-feu, vérifiez que les trois règles ont été ajoutée: gcloud compute firewall-rules list n --project=$PROJECT_ID n --filter="NETWORK=network-$NAME_SUFFIX"L'exemple de sortie suivant montre que les trois règles ont été correctement créé: NOM RESEAU DIRECTION PRIORITE AUTORISER allow-health-check-app network-app INGRESS 1000 tcp:80 allow-http-app réseau-app INGRESS 1000 tcp:80 allow-ssh-app network-app INGRESS 1000 tcp:22 ## Créer et configurer une image de VM de base Pour créer des machines virtuelles identiques que vous déployez sans configuration supplémentaire, vous utiliser une image de machine virtuelle personnalisée. Cette image capture la configuration du système d'exploitation et d'Apache, et est utilisé pour créer chaque VM dans le groupe d'instances géré dans les étapes suivantes. Sur la VM, vous créez une base fichier index.html sur le disque persistant et le monter sur /var/www/exemple.com. Un fichier de configuration Apache sur /etc/apache2/sites-available/example.com.conf sert du contenu Web à partir du emplacement du disque persistant monté Le schéma suivant montre la page HTML de base servie par Apache qui est stockée sur le disque persistant : Vous construisez cet environnement dans les étapes suivantes. - Créez une VM de base avec un disque persistant associé : gcloud compute instances 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=10 Go 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 Vous utilisez les paramètres définis au début de ce document pour nommer la VM et connectez-vous au bon sous-réseau. Des noms sont également attribués à partir des paramètres de le disque de démarrage et le disque de données. Pour installer et configurer le site Web simple, connectez-vous à la machine virtuelle de base à l'aide de SSH : gcloud calculate ssh vm-base-$NAME_SUFFIX --zone=$ZONE Dans votre session SSH à la VM, créez un script pour configurer la VM dans un éditeur de votre choix. L'exemple suivant utilise Nano en tant qu'éditeur : nano configure-vm. Collez le script de configuration suivant dans le fichier : bin/bash NAME_SUFFIX= application # Créer un répertoire pour les fichiers de base du site Web sudo mkdir -p /var/www/exemple.com sudo chmod a+w /var/www/example.com sudo chown -R www-data: /var/www/example.com # Trouvez le nom du disque, puis formatez-le et montez-le 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 jeter, par défaut $DISK_PATH /var/www/example.com # Installer Apache sudo apt-obtenir la mise à jour&& sudo apt-get -y install apache2 # Écrire un fichier HTML de base sur le disque persistant monté sudo tee -a /var/www/example.com/index.html >/dev/null EOF' Exemple HA/DR

Bienvenue sur un site Web Compute Engine avec basculement à chaud vers 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 # Activer le fichier de configuration Apache et recharger le service sudo a2dissite 000-default sudo a2ensite example.com.conf sudo systemctl recharger apache2 Mettre à jour le variable pour correspondre à la valeur définie à le début de ce document, comme Application NAME_SUFFIX. Écrivez le fichier et quittez votre éditeur. Par exemple, dans Nano, vous utilisez Ctrl-Opour écrire le fichier, puis quittez avec Ctrl-X. Rendez le script de configuration exécutable, puis exécutez-le : chmod +x configure-vm../configure-vm. Quittez la session SSH sur la VM : sortir Obtenez l'adresse IP de la VM et utilisez curlpour voir la page Web de base : curl $(gcloud compute instances describe vm-base-$NAME_SUFFIX n --zone $ZONE n --format="value(networkInterfaces.accessConfigs.[0].natIPn Le site Web de base est renvoyé, comme illustré dans l'exemple de sortie suivant : Exemple HA/DR

Bienvenue sur un site Web Compute Engine avec basculement à chaud vers Cloud Storagep>

gcloud compute images create image-disk-$NAME_SUFFIX n --source-disk=disk-base-$NAME_SUFFIX n --source-disk-zone=$ZONE # Créer des modèles d'instance 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\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=oui 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\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=oui # Créer une vérification de l'état des instances de VM gcloud compute health-checks create http http-basic-check-$NAME_SUFFIX n --port 80 # Créer les groupes d'instances gérés gcloud compute instances-groups managed create instance-group-$NAME_SUFFIX-$REGION1 n --template=template-$NAME_SUFFIX-$REGION1 n --size=2 n --region=$REGION1 n --health-check=http- vérification de base-$NAME_SUFFIX gcloud compute instances-groups managed create instance-group-$NAME_SUFFIX-$REGION2 n --template=template-$NAME_SUFFIX-$REGION2 n --size=2 n --region=$REGION2 n --health-check=http- vérification de base-$NAME_SUFFIX ## Créer et configurer un équilibreur de charge Pour que les utilisateurs accèdent à votre site Web, vous devez autoriser le trafic vers les machines virtuelles qui s'exécutent dans les groupes d'instances gérés. Vous souhaitez également rediriger automatiquement trafic vers de nouvelles VM en cas de défaillance d'une zone dans un groupe d'instances géré. Dans la section suivante, vous créez un équilibreur de charge externe avec un service backend pour le trafic HTTP sur le port 80, utilisez la vérification de l'état créée aux étapes précédentes et mappez une adresse IP externe adresse via le service backend. Pour plus d'informations, voir Comment configurer un équilibreur de charge HTTP externe simple. - Créez et configurez l'équilibreur de charge pour votre application : # Configurer les règles de port pour le port HTTP 80 gcloud compute instances-groups set-named-ports n instance-group-$NAME_SUFFIX-$REGION1 n --named-ports http:80 n --region $REGION1 gcloud compute instances-groups set-named-ports n instance-group-$NAME_SUFFIX-$REGION2 n --named-ports http:80 n --region $REGION2 # Créez un service de backend et ajoutez-y les groupes d'instances gérés 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 # Créer un mappage d'URL pour le service backend gcloud compute url-maps create web-map-http-$NAME_SUFFIX n --default-service web-backend-service-$NAME_SUFFIX # Configurer le transfert pour le trafic HTTP gcloud compute target-http-proxies create 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 Obtenez l'adresse IP de la règle de transfert pour le trafic Web : IP_ADDRESSgcloud compute forwarding-rules describe http-content-rule-$NAME_SUFFIX n --global n --format="value(IPAddressn Utiliser curl ou ouvrez votre navigateur Web pour afficher le site Web à l'aide de l'adresse IP adresse de l'équilibreur de charge de l'étape précédente : curl $IP_ADDRESS Il faut quelques minutes à l'équilibreur de charge pour terminer le déploiement et pour diriger correctement le trafic vers votre backend. Une erreur HTTP 404 est renvoyée si le l'équilibreur de charge est toujours en cours de déploiement. Si nécessaire, attendez quelques minutes et essayez de accéder à nouveau au site Web. Le site Web de base est renvoyé, comme illustré dans l'exemple de sortie suivant : Exemple HA/DR

Bienvenue sur un site Web Compute Engine avec basculement à chaud vers Cloud Storagep>

les groupes d'instances gérés récupèrent et peuvent diffuser le trafic pour l'intégralité du site Web de l'expérience. - Vérifier le domaine que vous souhaitez utiliser avec votre bucket Cloud Storage. Créez un bucket Cloud Storage correspondant au nom du domaine que vous possédez et que vous souhaitez utiliser : gsutil mb gsstatic-web.$DOMAIN Les La variable DOMAIN définie au début de ce document est utilisée, telle que . Cet exemple stocke les fichiers statiques à exemple.com statique-web.exemple.com. Créez un fichier local que vous copiez dans le bucket Cloud Storage dans le L'étape suivante: 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.