Este documento está destinado a arquitectos y personas que trabajan en operaciones y equipos administrativos. El documento describe un patrón de ejemplo que puede utilizar para sus propias implementaciones en Google Cloud. En este patrón, un balanceador de carga dirige el tráfico a Motor de cómputo instancias en grupos de instancias administrados que sirven al contenido. En una interrupción, usted actualiza el Equilibrio de carga HTTP(S) externo configuración y conmutación por error a un sitio estático en Almacenamiento en la nube. Para completar este tutorial, necesita un nombre de dominio registrado que usted controle y desea usar con este documento. En las implementaciones de producción, es probable que su sitio web incluya muchos más archivos y código de aplicación adicional en las máquinas virtuales de su grupo de instancias administrado (VM) que se muestra en este documento. Luego, Cloud Storage aloja una versión más versión estática limitada que proporciona una funcionalidad mínima. En una conmutación por error cálida escenario, los usuarios ven este sitio web limitado hasta que los grupos de instancias administrados recuperar y puede atender el tráfico para la experiencia completa del sitio web. En este tutorial, implementará recursos para crear un entorno como se muestra en el siguiente imagen: Cuando necesite una conmutación por error, actualice la configuración del balanceador de carga para dirigir tráfico a Cloud Storage, como se muestra en la siguiente imagen: Este patrón de conmutación por error tibio equilibra el costo de ejecutar otro administrado grupo de instancias en una región diferente que solo usas cuando las regiones primarias fallar. El costo de un sitio estático usando Cloud Storage es menor que el de ejecutar otro grupo de instancias administrado, pero hay un breve retraso a medida que actualiza la carga configuración del equilibrador entre las opciones de alojamiento. El sitio web limitado la experiencia en Cloud Storage es mejor que un sitio web no disponible y pobre experiencia del cliente. Para un enfoque alternativo que usa Cloud DNS en lugar de externo Equilibrio de carga HTTP(S) para controlar la conmutación por error, consulte Implemente un servidor web recuperable tibio mediante Cloud DNS con Compute Engine y Cloud Storage. Este patrón es útil si tiene o desea usar Cloud DNS. Para ejecutar aplicaciones confiables en Google Cloud, le recomendamos que diseñe la infraestructura de su aplicación para manejar las interrupciones. Dependiendo de su aplicación y las necesidades del negocio, es posible que necesite una conmutación por error en frío, una conmutación por error en caliente o una conmutación en caliente patrón de conmutación por error. Para obtener más información sobre cómo determinar el mejor enfoque para sus propias aplicaciones, consulte la Guía de planificación de recuperación ante desastres. Este documento utiliza una base servidor web apache, pero el mismo enfoque para el despliegue de infraestructura se aplica a otros entornos de aplicación que necesita crear. ## Objetivos - - Cree grupos de instancias administrados regionales con una imagen de máquina virtual personalizada. - Crear un depósito de almacenamiento en la nube. - Crear y configurar balanceo de carga HTTP(S) externo. - Pruebe la conmutación por error del servidor web tibio con un balanceador de carga actualizado configuración. - Pruebe la recuperación y la conmutación por recuperación con una configuración actualizada del balanceador de carga. ## Costos Este instructivo usa los siguientes componentes facturables de Google Cloud: - - Motor de cómputo - Redes - Almacenamiento en la nube Para generar una estimación de costos basada en su uso proyectado, utiliza la calculadora de precios. ## Antes de que empieces - - Inicie sesión en su cuenta de Google Cloud. Si eres nuevo en nube de google, crear una cuenta para evaluar el rendimiento de nuestros productos en escenarios del mundo real. Los nuevos clientes también obtienen $300 en créditos gratis para ejecutar, probar e implementar cargas de trabajo. - En la consola de Google Cloud, en la página de selección de proyectos, seleccione o cree un proyecto de Google Cloud. - Asegúrate de que la facturación esté habilitada para tu proyecto de Cloud. Aprender como comprobar si la facturación está habilitada en un proyecto. - Habilite la API de Compute Engine. - Instale e inicialice la CLI de Google Cloud. - En la consola de Google Cloud, en la página de selección de proyectos, seleccione o cree un proyecto de Google Cloud. - Asegúrate de que la facturación esté habilitada para tu proyecto de Cloud. Aprender como comprobar si la facturación está habilitada en un proyecto. - Habilite la API de Compute Engine. - Instale e inicialice la CLI de Google Cloud. Puede ejecutar la CLI de Google Cloud en el consola sin instalar el CLI de la nube de Google. Para ejecutar la CLI de gcloud en el consola, usa Cloud Shell ## Preparar el ambiente En esta sección, define algunas variables para los nombres de sus recursos y ubicaciones. Estas variables son utilizadas por los comandos de la CLI de Google Cloud a medida que desplegar los recursos. A lo largo de este documento, a menos que se indique lo contrario, ingresa todos los comandos en Concha de nube o su entorno de desarrollo local. - Reemplazar con su propio ID de proyecto. Si es deseado, proporcione su propio sufijo de nombre para los recursos para ayudar a buscar e identificar ellos, como PROJECTO ID aplicación Especifique dos regiones, como y us-west1 , y una zona dentro de una de esas regiones, como us-west2 . Esta zona define dónde se encuentra la VM base inicial. se crea que se usa para crear una imagen para el grupo de instancias administrado us-west1-a Finalmente, configure un dominio que se use para su sitio web estático, como ejemplo.com PROYECTO_ID= PROJECTO ID NOMBRE_SUFIJO= aplicación REGION1= us-west1 REGION2= us-west2 ZONA= us-west1-a DOMINIO= ejemplo.com ## Crear una VPC y una subred Para proporcionar acceso a la red a las máquinas virtuales, crea una nube privada virtual (VPC) y subredes. Como necesita grupos de instancias administrados en dos regiones, debe crear uno subred en cada región. Para más información sobre las ventajas de la costumbre modo de subred para administrar rangos de direcciones IP en uso en su entorno, consulte Usa redes de VPC en modo personalizado. - Cree la VPC con un modo de subred personalizado: Las redes informáticas de gcloud crean red-$NOMBRE_SUFIJO --subnet-mode=custom Ahora cree dos subredes en la nueva VPC, una para cada región. Defina sus propios intervalos de direcciones, como y 10.1.0.0/20 , eso encaja en su rango de red: 10.2.0.0/20 Las subredes de redes informáticas de gcloud crean n subred-$NAME_SUFFIX-$REGION1 n --network=network-$NAME_SUFFIX n --range= 10.1.0.0/20n --región=$REGIÓN1 Las subredes de redes informáticas de gcloud crean n subred-$NAME_SUFFIX-$REGION2 n --network=network-$NAME_SUFFIX n --range= 10.2.0.0/20n --region=$REGION2 ## Crear reglas de cortafuegos Para permitir que el tráfico de red fluya correctamente en la VPC, utilice reglas del cortafuegos. - Cree reglas de firewall para permitir el tráfico web y las comprobaciones de estado de la carga balanceador y grupos de instancias administrados: 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=servidor-http 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 regla HTTP permite el tráfico a cualquier VM donde el se aplica http-servertag, y de cualquier fuente usando el 0.0.0.0/0rango. Para el regla de control de salud, los rangos predeterminados para Google Cloud están configurados para permitir que la plataforma funcione correctamente comprobar la salud de los recursos. Para permitir el tráfico SSH para la configuración inicial de una imagen de máquina virtual base, alcance la regla de firewall a su entorno usando el --fuente-parámetro de rango. Es posible que deba trabajar con su equipo de red para determinar qué rangos de fuente su organización utiliza Reemplazar con sus propios ámbitos de dirección IP: ALCANCE_DIRECCIÓN_IP 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 -- rangos de origen = ALCANCE_DIRECCIÓN_IP Después de crear las reglas del cortafuegos, verifique que se hayan aplicado las tres reglas. agregado: lista de reglas de firewall de computación de gcloud n --project=$PROJECT_ID n --filter="NETWORK=network-$NAME_SUFFIX"El siguiente ejemplo de salida muestra que las tres reglas se han aplicado correctamente. creado: NOMBRE RED DIRECCIÓN PRIORIDAD PERMITIR allow-health-check-app network-app INGRESS 1000 tcp:80 allow-http-app red-app INGRESS 1000 tcp:80 allow-ssh-app network-app INGRESS 1000 tcp:22 ## Crear y configurar una imagen de máquina virtual base Para crear máquinas virtuales idénticas que implemente sin configuración adicional, debe use una imagen de máquina virtual personalizada. Esta imagen captura la configuración del SO y Apache, y se usa para crear cada VM en el grupo de instancias administrado en los siguientes pasos. En la máquina virtual, crea un básico archivo index.html en el disco persistente y montarlo en /var/www/ejemplo.com. Un archivo de configuración de Apache en /etc/apache2/sites-available/example.com.conf sirve contenido web desde el ubicación del disco persistente montado El siguiente diagrama muestra la página HTML básica servida por Apache que está almacenada en el disco persistente: Este entorno se crea en los siguientes pasos. - Crea una máquina virtual base con un disco persistente adjunto: Las instancias informáticas de gcloud crean 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 Utilice los parámetros definidos al comienzo de este documento para nombrar la máquina virtual y conectarse a la subred correcta. También se asignan nombres a partir de los parámetros para el disco de arranque y el disco de datos. Para instalar y configurar el sitio web simple, conéctese a la VM base usando SSH: gcloud compute ssh vm-base-$NOMBRE_SUFIJO --zone=$ZONA En su sesión SSH a la VM, cree un script para configurar la VM en un editor de su elección. El siguiente ejemplo utiliza Nano como editor: nano configure-vm. Pegue el siguiente script de configuración en el archivo: papelera/golpe NOMBRE_SUFIJO= aplicación # Crear un directorio para los archivos básicos del sitio web sudo mkdir -p /var/www/ejemplo.com sudo chmod a+w /var/www/ejemplo.com sudo chown -R www-data: /var/www/example.com # Busque el nombre del disco, luego formatéelo y móntelo DISK_NAME="google-disco-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,descartar $DISK_PATH sudo mount -o descartar,predeterminado $DISK_PATH /var/www/example.com # Instalar Apache sudo apt-obtener actualización&& sudo apt-get -y install apache2 # Escriba un archivo HTML básico en el disco persistente montado sudo tee -a /var/www/example.com/index.html >/dev/null EOF' Ejemplo de HA/DR

Bienvenido a un sitio web de Compute Engine con conmutación por error en caliente a 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 FIN # Habilitar el archivo de configuración de Apache y recargar el servicio sudo a2dissite 000-predeterminado sudo a2ensite ejemplo.com.conf sudo systemctl recargar apache2 Actualizar el variable para que coincida con el valor establecido en el comienzo de este documento, como aplicación NAME_SUFFIX. Escriba el archivo y salga de su editor. Por ejemplo, en Nano usas Ctrl-Opara escribir el archivo, luego salga con Ctrl-X. Haga que el script de configuración sea ejecutable, luego ejecútelo: chmod +x configure-vm../configure-vm. Salga de la sesión SSH a la máquina virtual: salida Obtenga la dirección IP de la VM y use curl para ver la página web básica: curl $(las instancias informáticas de gcloud describen vm-base-$NAME_SUFFIX n --zone $ZONE n --format="value(networkInterfaces.accessConfigs.[0].natIPn Se devuelve el sitio web básico, como se muestra en el siguiente resultado de ejemplo: Ejemplo de HA/DR

Bienvenido a un sitio web de Compute Engine con conmutación por error en caliente a Cloud Storagep>

gcloud compute images create image-disk-$NAME_SUFFIX n --source-disk=disk-base-$NAME_SUFFIX n --source-disk-zone=$ZONE # Crear plantillas de instancias 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=servidor-http n --metadatastartup-script /bin/bashn'echo\ UUIDblkid\ -s\ UUID\ -o\ value\ /dev/sdb /var/www/example. com\ ext4\ descartar,predeterminado,nofalla\ 0\ 2 ee\ -a\ /etc/fstabn'mount\ -a n --image=imagen-$NOMBRE_SUFIJO n --create-disk=imagen=imagen-disco-$NOMBRE_SUFIJO ,borrado automático=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=servidor-http n --metadatastartup-script /bin/bashn'echo\ UUIDblkid\ -s\ UUID\ -o\ value\ /dev/sdb /var/www/example. com\ ext4\ descartar,predeterminado,nofalla\ 0\ 2 ee\ -a\ /etc/fstabn'mount\ -a n --image=imagen-$NOMBRE_SUFIJO n --create-disk=imagen=imagen-disco-$NOMBRE_SUFIJO ,borrado automático=sí # Crear una verificación de estado para las instancias de VM gcloud calcula las verificaciones de estado crear http http-basic-check-$NAME_SUFFIX n --port 80 # Crear los grupos de instancias administrados grupos de instancias de cálculo de gcloud administrados crear grupo de instancias-$NAME_SUFFIX-$REGION1 n --template=template-$NAME_SUFFIX-$REGION1 n --size=2 n --region=$REGION1 n --health-check=http- verificación-básica-$NAME_SUFFIX grupos de instancias de cálculo de gcloud administrados crear grupo de instancias-$NAME_SUFFIX-$REGION2 n --template=template-$NAME_SUFFIX-$REGION2 n --size=2 n --region=$REGION2 n --health-check=http- verificación-básica-$NAME_SUFFIX ## Crear y configurar un balanceador de carga Para que los usuarios accedan a su sitio web, debe permitir el tráfico a través de las máquinas virtuales. que se ejecutan en los grupos de instancias administrados. También desea redirigir automáticamente tráfico a nuevas VM si hay una falla de zona en un grupo de instancias administrado. En la siguiente sección, creará un equilibrador de carga externo con un servicio backend para el tráfico HTTP en el puerto 80, use la verificación de estado creada en los pasos anteriores y asigne una IP externa dirección a través del servicio backend. Para más información, ver Cómo configurar un balanceador de carga HTTP externo simple. - Cree y configure el balanceador de carga para su aplicación: # Configurar reglas de puerto para el puerto HTTP 80 gcloud computing grupos de instancias conjunto de puertos con nombre n grupo de instancias-$NAME_SUFFIX-$REGION1 n --named-ports http:80 n --region $REGION1 grupos de instancias de computación de gcloud set-named-ports n instancia-group-$NAME_SUFFIX-$REGION2 n --named-ports http:80 n --region $REGION2 # Crear un servicio de backend y agregarle los grupos de instancias administrados 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 # Crear un mapa de URL para el servicio de backend gcloud compute url-maps create web-map-http-$NAME_SUFFIX n --default-service web-backend-service-$NAME_SUFFIX # Configurar el reenvío para el tráfico HTTP gcloud compute target-http-proxies create n http-lb-proxy-$NAME_SUFFIX n --url-map web-map-http-$NAME_SUFFIX gcloud compute reglas de reenvío crear n http-regla-de-contenido-$NAME_SUFFIX n --global n --target-http-proxy=http-lb-proxy-$NAME_SUFFIX n --ports=80 Obtenga la dirección IP de la regla de reenvío para el tráfico web: IP_ADDRESSgcloud calcula las reglas de reenvío describen http-content-rule-$NAME_SUFFIX n --global n --format="value(IPAddressn Utilizar curl, o abra su navegador web, para ver el sitio web usando la IP dirección del balanceador de carga del paso anterior: curl $DIRECCIÓN_IP El balanceador de carga tarda unos minutos en terminar de implementarse y dirigir correctamente el tráfico a su backend. Se devuelve un error HTTP 404 si el el equilibrador de carga aún se está implementando. Si es necesario, espere unos minutos e intente acceder de nuevo al sitio web. Se devuelve el sitio web básico, como se muestra en el siguiente resultado de ejemplo: Ejemplo de HA/DR

Bienvenido a un sitio web de Compute Engine con conmutación por error en caliente a Cloud Storagep>

los grupos de instancias administrados se recuperan y pueden brindar tráfico para el sitio web completo experiencia. - Verificar el dominio que desea usar con su depósito de Cloud Storage. Crea un depósito de Cloud Storage para que coincida con el nombre del dominio que posees y quiero usar: gsutil mb gsstatic-web.$DOMINIO Él Se utiliza la variable DOMAIN definida al inicio de este documento, como por ejemplo . Este ejemplo almacena los archivos estáticos en ejemplo.com web estática.ejemplo.com. Cree un archivo local que copie en el depósito de Cloud Storage en el próximo paso: 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.