En este instructivo, se explica cómo usar el balanceo de cargas con un grupo de instancias administrado regional para redireccionar el tráfico desde instancias de VM ocupadas o no disponibles, lo que te permite proporcionar alta disponibilidad incluso durante una interrupción zonal.
Un grupo de instancias administrado regional distribuye una aplicación en varias instancias en varias zonas. Un balanceador de cargas global dirige el tráfico por múltiples regiones a través de una sola dirección IP. Si usas estos dos servicios para distribuir tu aplicación en varias zonas, puedes ayudar a garantizar que tu aplicación esté disponible incluso en casos extremos, como una interrupción zonal.
Se pueden usar los balanceadores de cargas para dirigir una variedad de tipos de tráfico. En este instructivo, se muestra cómo crear un balanceador de cargas global que dirige el tráfico HTTP externo, pero gran parte del contenido de este instructivo aún es relevante para otros tipos de balanceadores de cargas. Para obtener más información sobre otros tipos de tráfico que se pueden dirigir con un balanceador de cargas, consulta esta sección sobre los tipos de Cloud Load Balancing.
En este instructivo, se incluyen pasos detallados para iniciar una aplicación web en un grupo de instancias administrado regional, configurar el acceso a la red, crear un balanceador de cargas a fin de dirigir el tráfico a la aplicación web y observar el balanceador de cargas mediante la simulación de una interrupción zonal. Según la experiencia que tengas con estas funciones, completar este instructivo te llevará alrededor de 45 minutos.
Objetivos
- Inicia una aplicación web de demostración en un grupo de instancias administrado regional.
- Configura un balanceador de cargas global que dirija el tráfico HTTP a través de múltiples zonas.
- Observa los efectos del balanceador de cargas mediante la simulación de una interrupción zonal.
Costos
En este documento, usarás los siguientes componentes facturables de Google Cloud:
- Compute Engine
Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.
Antes de comenzar
- Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.
Arquitectura de aplicaciones
En la aplicación se incluyen los siguientes componentes de Compute Engine:
- Red de VPC: Una red virtual dentro de Google Cloud que puede proporcionar conectividad global a través de sus propias rutas y reglas de firewall.
- Regla de firewall: Con un firewall de Google Cloud puedes permitir o rechazar el tráfico a tus instancias.
- Plantilla de instancias: Una plantilla que se usa para crear cada instancia de VM en el grupo de instancias administrado.
- Grupo de instancias administrado regional: Un grupo de instancias de VM que ejecutan la misma aplicación en varias zonas.
- Dirección IP externa estática global: una dirección IP estática a la que se puede acceder en redes externas y que se puede conectar a un recurso global.
- Balanceador de cargas global: un balanceador de cargas que permite que las instancias de backend se distribuyan entre varias regiones. Usa un balanceador de cargas global cuando tus usuarios necesiten acceso a las mismas aplicaciones y contenido y desees proporcionar acceso mediante una dirección IP única de difusión ilimitada.
- Verificación de estado: Una política que usa el balanceador de cargas para evaluar la capacidad de respuesta de la aplicación en cada instancia de VM.
Inicia la aplicación web
En este instructivo, se usa una aplicación web almacenada en GitHub. Si deseas obtener más información sobre cómo se implementó la aplicación, consulta el repositorio GoogleCloudPlatform/python-docs-samples en GitHub.
Inicia la aplicación web en cada VM de un grupo de instancias mediante la inclusión de una secuencia de comandos de inicio en una plantilla de instancias. Además, ejecuta el grupo de instancias en una red de VPC dedicada para evitar que las reglas de firewall de este instructivo interfieran con los recursos existentes que se ejecutan en tu proyecto.
Crear red de VPC
El uso de una red de VPC evita que los recursos existentes en tu proyecto se vean afectados por los recursos que crearás para este instructivo. También se requiere una red de VPC a fin de restringir el tráfico entrante para que deba pasar por el balanceador de cargas.
Crea una red de VPC a fin de encapsular las reglas de firewall para la aplicación web de demostración:
En la consola de Cloud, ve a la página Redes de VPC.
Haga clic en Crear red de VPC.
En Nombre, ingresa
web-app-vpc
.Establece Modo de creación de subred en Automático.
Al final de la página, haz clic en Crear.
Espera hasta que se termine de crear la red de VPC antes de continuar.
Crea una regla de firewall
Después de crear la red de VPC, configura una regla de firewall para permitir el tráfico HTTP a la red de VPC:
En la consola de Google Cloud, ve a la página Firewalls.
Haz clic en Crear regla de firewall.
En Nombre, ingresa
allow-web-app-http
.Configura Red como
web-app-vpc
.En Destinos, selecciona Todas las instancias de la red.
Establece Filtro fuente como
IP ranges
.En Rangos de IP de origen, ingresa
0.0.0.0/0
para permitir el acceso a todas las direcciones IP.En Puertos y protocolos, selecciona Protocolos y puertos especificados.
Marca TCP y, luego, ingresa80
para permitir el acceso al tráfico HTTP.Haga clic en Crear.
Crea una plantilla de instancias
Crea una plantilla que usarás para crear un grupo de instancias de VM. Cada instancia creada a partir de la plantilla inicia una aplicación web de demostración a través de una secuencia de comandos de inicio.
En la consola de Google Cloud, ve a la página Plantillas de instancia.
Haga clic en Crear plantilla de instancias.
En Nombre, ingresa
load-balancing-web-app-template
.En Configuración de máquina, establece el Tipo de máquina en
e2-micro
.En Firewall, selecciona Permitir tráfico HTTP.
Haz clic en Herramientas de redes, discos, seguridad, administración, usuario único para ver la configuración avanzada.
Haz clic en la pestaña Administración. En Automatización, ingresa la siguiente secuencia de comandos de inicio.
sudo apt update && sudo apt -y install git gunicorn3 python3-pip git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git cd python-docs-samples/compute/managed-instances/demo sudo pip3 install -r requirements.txt sudo gunicorn3 --bind 0.0.0.0:80 app:app --daemon
La secuencia de comandos obtiene, instala y, luego, inicia la aplicación web cuando se inicia la instancia.
Haz clic en la pestaña Redes. En Red, selecciona
web-app-vpc
. Esto obliga a que cada instancia creada con esta plantilla se ejecute en la red creada con anterioridad.Haga clic en Crear.
Espera hasta que la plantilla termine de crearse antes de continuar.
Crea un grupo de instancias administrado regional.
Para ejecutar la aplicación web, usa la plantilla de instancias a fin de crear un grupo de instancias administrado regional:
En la consola de Google Cloud, ve a la página Grupos de instancias.
Haga clic en Crear grupo de instancias.
Selecciona Nuevo grupo de instancias administrado (sin estado)".
En Nombre, ingresa
load-balancing-web-app-group
.En Plantilla de instancias, selecciona
load-balancing-web-app-template
.En Número de instancias, ingresa
6
. Si este campo está inhabilitado, primero desactiva el ajuste de escala automático.En Ubicación, selecciona Varias zonas.
En Región, seleccione us-central1.
En Zonas, selecciona las siguientes zonas de la lista desplegable:
- us-central1-b
- us-central1-c
- us-central1-f
Selecciona Permitir redistribución de instancias.
En Modo de ajuste de escala automático, selecciona Desactivar: No realizar ajuste de escala automático.
Haga clic en Crear. Esto te redirecciona a la página Grupos de instancias.
Sigue estos pasos para verificar que tus instancias ejecutan la aplicación web de demostración de manera correcta:
- Desde la página Grupos de instancias, haz clic en
load-balancing-web-app-group
para ver las instancias en ese grupo. En IP externa, haz clic en una dirección IP para conectar esa instancia. Se abrirá una nueva pestaña del navegador en la que se muestra la app web de demostración.
Cuando termines, cierra la pestaña del navegador correspondiente a la aplicación web de demostración.
- Desde la página Grupos de instancias, haz clic en
Configura el balanceador de cargas
Si quieres usar un balanceador de cargas a fin de dirigir el tráfico a tu aplicación web, debe reservar una dirección IP externa para recibir todo el tráfico entrante. Luego, crea un balanceador de cargas que acepte el tráfico de esa dirección IP y redireccione ese tráfico al grupo de instancias.
Reserva una dirección IP estática
Usa una dirección IP externa estática global a fin de proporcionar al balanceador de cargas un único punto de entrada para recibir todo el tráfico de usuarios. Compute Engine conserva las direcciones IP estáticas incluso si cambias o borras los recursos de Google Cloud afiliados. Esto permite que la aplicación web siempre tenga el mismo punto de entrada, incluso si otras partes de la aplicación cambian.
En la consola de Google Cloud, ve a la página Direcciones IP externas.
Haga clic en Reservar dirección estática.
En Nombre, ingresa
web-app-ipv4
.Configura la Versión de IP como IPv4.
Establece Tipo en Global.
Haz clic en Reservar.
Crea un balanceador de cargas
En esta sección, se explican los pasos necesarios para crear un balanceador de cargas global que dirija el tráfico HTTP.
Este balanceador de cargas usa un frontend para recibir tráfico entrante y un backend a fin de distribuir este tráfico a instancias en buen estado. Debido a que el balanceador de cargas tiene múltiples componentes, esta tarea se divide en las siguientes partes:
- Configuración de backend
- Configuración de frontend
- Revisión y finalización
Completa todos los pasos para crear el balanceador de cargas.
En la consola de Google Cloud, ve a la página Crear un balanceador de cargas.
En la sección Balanceador de cargas de aplicaciones (HTTP/S), haz clic en Iniciar configuración.
En Orientado a Internet o solo interno, selecciona De Internet a mis VMs. Luego, haz clic en Continuar.
Para el Nombre del balanceador de cargas, ingresa
web-app-load-balancer
.
Configuración de backend
- En el panel izquierdo de la página Crear balanceador de cargas de aplicaciones externo global, haz clic en Configuración de backend.
- Haz clic en Crear o seleccionar servicios y bucket de backend para abrir un menú desplegable. Haz clic en Servicios de backend y, luego, en Crear un servicio de backend.
- En la ventana nueva, para el Nombre de la aplicación de backend, ingresa
web-app-backend
. - Establece Grupo de instancias en
load-balancing-web-app-group
. - Establece Números de puerto en
80
. Esto permite el tráfico HTTP entre el balanceador de cargas y el grupo de instancias. - En Modo de balanceo, selecciona Utilización.
- Haz clic en Listo para crear el backend.
Crea la verificación de estado para el backend del balanceador de cargas:
- En Verificación de estado, selecciona Crear una verificación de estado (o Crear otra verificación de estado) del menú desplegable. Se abre una ventana nueva.
- En la ventana nueva debajo de Nombre, ingresa
web-app-load-balancer-check
. - Establece el Protocolo en HTTP.
- En Puerto, ingresa
80
. - Para este instructivo, configura la ruta de solicitud en
/health
, que es una ruta a la que la aplicación web de demostración está configurada para responder. Establece los siguientes Criterios de estado:
- Establece el Intervalo de verificación en
3
segundos. Esto define la cantidad de tiempo desde el inicio de un sondeo hasta el inicio del siguiente. - Establece el Tiempo de espera en
3
segundos. Esto define el tiempo que Google Cloud espera una respuesta a un sondeo. Su valor debe ser menor o igual que el intervalo de verificación. - Establece Umbral de buen estado en
2
sondeos exitosos consecutivos. Esto define la cantidad de sondeos secuenciales que deben tener éxito para que la instancia se considere en buen estado. - Establece Umbral de mal estado en
2
fallas consecutivas. Esto define la cantidad de sondeos secuenciales que deben fallar para que la instancia se considere en mal estado.
- Establece el Intervalo de verificación en
Haz clic en Guardar y continuar para crear la verificación de estado.
Haz clic en Crear para crear el servicio de backend.
Configuración de frontend
- En el panel izquierdo de la página Crear balanceador de cargas de aplicaciones externo global, haz clic en Configuración de frontend.
- En la página Configuración de frontend, debajo de Nombre, ingresa
web-app-ipv4-frontend
. - Configura el Protocolo en
HTTP
. - Establece la Versión de IP en
IPv4
. - Establece la Dirección IP en
web-app-ipv4
. - Configura el Puerto en
80
. - Haz clic en Listo para crear el frontend.
Revisión y finalización
Para verificar la configuración del balanceo de cargas antes de crear el balanceador de cargas, sigue estos pasos:
- En el panel izquierdo de la página Crear balanceador de cargas de aplicaciones externo global, haz clic en Revisar y finalizar.
En la página Revisar y finalizar, verifica la siguiente configuración de Backend:
- El Servicio de backend debe ser
web-app-backend
. - El Protocolo de extremo es
HTTP
. - La Verificación de estado es
web-app-load-balancer-check
. - El Grupo de instancias debe ser
load-balancing-web-app-group
.
- El Servicio de backend debe ser
En la misma página, verifica que Frontend use una dirección IP con un Protocolo de
HTTP
.
En el panel izquierdo de la página Crear balanceador de cargas de aplicaciones externo global, haz clic en Crear para terminar de crear el balanceador de cargas.
Es posible que debas esperar unos minutos para que el balanceador de cargas termine de crearse.
Simula una interrupción zonal
Puedes observar la funcionalidad del balanceador de cargas si simulas la falta de disponibilidad generalizada de una interrupción zonal. Esta simulación funciona cuando se fuerza a todas las instancias ubicadas en una zona específica a informar un mal estado en la ruta de solicitud /health
. Cuando estas instancias informan un mal estado, falla la verificación de estado del balanceo de cargas, lo que hace que el balanceador de cargas deje de dirigir el tráfico a estas instancias.
Supervisa a qué zonas el balanceador de cargas dirige el tráfico.
En la consola de Google Cloud, ve a Cloud Shell
Cloud Shell se abre en un panel de la consola de Google Cloud. La sesión puede tardar unos segundos en inicializarse.
Guarda la dirección IP externa estática de tu balanceador de cargas:
Para obtener la dirección IP externa de la regla de reenvío de frontend del balanceador de cargas, ingresa el siguiente comando en tu terminal:
gcloud compute forwarding-rules describe web-app-ipv4-frontend --global
Copia el
EXTERNAl_IP_ADDRESS
del resultado:IPAddress: EXTERNAl_IP_ADDRESS ...
Crea una variable Bash local:
export LOAD_BALANCER_IP=EXTERNAl_IP_ADDRESS
En la que
EXTERNAl_IP_ADDRESS
es la dirección IP externa que copiaste.
Para supervisar a qué zonas el balanceador de cargas dirige el tráfico, ejecuta la siguiente secuencia de comandos Bash:
while true do BODY=$(curl -s "$LOAD_BALANCER_IP") NAME=$(echo -n "$BODY" | grep "load-balancing-web-app-group" | perl -pe 's/.+?load-balancing-web-app-group-(.+?)<.+/\1/') ZONE=$(echo -n "$BODY" | grep "us-" | perl -pe 's/.+?(us-.+?)<.+/\1/') echo $ZONE done
Esta secuencia de comandos intenta conectarse continuamente a la aplicación web a través de la dirección IP del frontend del balanceador de cargas y muestra desde qué zona se ejecuta la aplicación web para cada conexión.
El resultado debe incluir las zonas
us-central1-b
,us-central1-c
yus-central1-f
:us-central1-f us-central1-b us-central1-c us-central1-f us-central1-f us-central1-c us-central1-f us-central1-c us-central1-c
Mantén esta terminal abierta.
Mientras se ejecuta la supervisión, comienza a simular la interrupción zonal.
- En Cloud Shell, haz clic en el botón abrir una segunda sesión de la terminal. Agregar para
Crea una variable Bash local para el ID del proyecto:
export PROJECT_ID=PROJECT_ID
en la que
PROJECT_ID
es el ID del proyecto actual, que se muestra en cada línea nueva en Cloud Shell:user@cloudshell:~ (PROJECT_ID)$
Crea una variable Bash local para la zona que deseas inhabilitar. Para simular una falla de la zona
us-central1-f
, usa el siguiente comando:export DISABLE_ZONE=us-central1-f
Luego, ejecuta la siguiente secuencia de comandos Bash. Esta secuencia de comandos hace que las instancias de la aplicación web de demostración en la zona inhabilitada generen respuestas de mal estado a la verificación de estado del balanceador de cargas. Las respuestas de mal estado hacen que el balanceador de cargas aleje el tráfico de estas instancias.
export MACHINES=$(gcloud --project=$PROJECT_ID compute instances list --filter="zone:($DISABLE_ZONE)" --format="csv(name,networkInterfaces[0].accessConfigs[0].natIP)" | grep "load-balancing-web-app-group") for i in $MACHINES; do NAME=$(echo "$i" | cut -f1 -d,) IP=$(echo "$i" | cut -f2 -d,) echo "Simulating zonal failure for zone $DISABLE_ZONE, instance $NAME" curl -q -s "http://$IP/makeUnhealthy" >/dev/null --retry 2 done
Después de una breve demora, el balanceador de cargas deja de dirigir el tráfico a las zonas en mal estado, por lo que el resultado de la primera ventana de la terminal deja de enumerar la zona
us-central1-f
:us-central1-c us-central1-c us-central1-c us-central1-b us-central1-b us-central1-c us-central1-b us-central1-c us-central1-c
Esto indica que el balanceador de cargas dirige el tráfico solo a las instancias en buen estado y receptivas.
Mantén ambas terminales abiertas.
En la segunda terminal, crea una variable Bash local para la zona que deseas restablecer. Para restablecer el tráfico a la zona
us-central1-f
, usa el siguiente comando:export ENABLE_ZONE=us-central1-f
Luego, ejecuta la siguiente secuencia de comandos Bash. Esta secuencia de comandos hace que las instancias de la aplicación web de demostración en la zona habilitada generen respuestas de buen estado a la verificación de estado del balanceador de cargas. Las respuestas de buen estado hacen que el balanceador de cargas comience a distribuir el tráfico hacia estas instancias.
export MACHINES=$(gcloud --project=$PROJECT_ID compute instances list --filter="zone:($ENABLE_ZONE)" --format="csv(name,networkInterfaces[0].accessConfigs[0].natIP)" | grep "load-balancing-web-app-group") for i in $MACHINES; do NAME=$(echo "$i" | cut -f1 -d,) IP=$(echo "$i" | cut -f2 -d,) echo "Simulating zonal restoration for zone $ENABLE_ZONE, instance $NAME" curl -q -s "http://$IP/makeHealthy" >/dev/null --retry 2 done
Después de unos minutos, el resultado de la primera ventana de la terminal enumera de forma gradual la zona
us-central1-f
de nuevo:us-central1-b us-central1-b us-central1-c us-central1-f us-central1-c us-central1-c us-central1-b us-central1-c us-central1-f
Esto indica que el balanceador de cargas dirige el tráfico entrante a todas las zonas de nuevo.
Cierra ambas terminales cuando termines.
Restringe el tráfico entrante (opcional)
Cuando creaste el grupo de instancias administrado regional, pudiste acceder a cada instancia de forma directa a través de su dirección IP externa efímera. Sin embargo, ahora que preparaste un balanceador de cargas y una dirección IP externa estática, es posible que desees modificar el firewall de la red para que el tráfico entrante deba pasar por el balanceador de cargas.
Si deseas restringir el tráfico entrante al balanceador de cargas, modifica el firewall de la red para inhabilitar la dirección IP externa efímera de cada instancia.
Edita la regla de firewall para restringir el tráfico HTTP, de modo que solo se pueda acceder a la aplicación web mediante el balanceador de cargas:
En la consola de Google Cloud, ve a la página Firewalls.
En Nombre, haz clic en
allow-web-app-http
.Haz clic en Editar.
Modifica los Rangos de IP de origen para permitir solo sondeos de verificación de estado:
- Borra
0.0.0.0/0
. - En la misma línea, ingresa
130.211.0.0/22
y presiona Tabulador. - En la misma línea, ingresa
35.191.0.0/16
y presiona Tabulador.
- Borra
Haz clic en Guardar.
Verifica que no puedas conectarte a la aplicación web mediante la dirección IP externa efímera de una instancia específica:
En la consola de Google Cloud, ve a la página Grupos de instancias.
Haz clic en
load-balancing-web-app-group
para ver las instancias en ese grupo.En IP externa, haz clic en una dirección IP para conectar esa instancia. Se abrirá una pestaña nueva del navegador, pero la aplicación web no se abrirá (con el tiempo, la página mostrará un error de tiempo de espera).
Cuando termines, cierra la pestaña del navegador para la instancia.
Verifica que puedas conectarte a la aplicación web a través del balanceador de cargas:
En la consola de Google Cloud, ve a la página Balanceo de cargas.
En Nombre, haz clic en
web-app-load-balancer
para expandir el balanceador de cargas que acabas de crear.Para conectarte a la aplicación web mediante las direcciones IP estáticas externas, busca en Frontend y IP:Port y copia la dirección IP. Luego, abre una pestaña nueva del navegador y pega la dirección IP en la barra de direcciones. Esto debería mostrar la aplicación web de demostración:
Ten en cuenta que, cada vez que actualizas la página, el balanceador de cargas se conecta a instancias diferentes ubicadas en zonas distintas. Esto sucede porque no te conectas a una instancia de forma directa; te conectas al balanceador de cargas, que selecciona la instancia a la que se te redirecciona.
Cuando termines, cierra la pestaña del navegador correspondiente a la aplicación web de demostración.
Limpia
Una vez que completes el instructivo, puedes limpiar los recursos que creaste para que dejen de usar la cuota y generar cargos. En las siguientes secciones, se describe cómo borrar o desactivar estos recursos.
Si creaste un proyecto aparte para este instructivo, borra todo el proyecto. De lo contrario, si el proyecto tiene recursos que deseas conservar, borra solo los recursos creados en este instructivo.
Borra el proyecto
- En la consola de Google Cloud, ve a la página Administrar recursos.
- En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
- En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.
Borra recursos específicos
Borra el balanceador de cargas
En la consola de Google Cloud, ve a la página Balanceo de cargas.
Haz clic en la casilla de verificación junto a
web-app-load-balancer
.Haz clic en
Borrar en la parte superior de la página.En la ventana nueva, selecciona todas las casillas de verificación. Luego, haz clic en Borrar el balanceador de cargas y los recursos seleccionados para confirmar la eliminación.
Borra la dirección IP externa estática
En la consola de Google Cloud, ve a la página Direcciones IP externas.
Haz clic en la casilla de verificación junto a
web-app-ipv4
.Haz clic en
Liberar dirección estática en la parte superior de la página. En la ventana nueva, haz clic en Borrar para confirmar la eliminación.
Borra el grupo de instancias
- En la consola de Google Cloud, ve a la página Grupos de instancias.
-
Selecciona la casilla de verificación de tu grupo de instancias de
load-balancing-web-app-group
. - Para borrar el grupo de instancias, haz clic en Borrar.
Borra la plantilla de instancias
En la consola de Google Cloud, ve a la página Plantillas de instancia.
Haz clic en la casilla de verificación junto a
load-balancing-web-app-template
.Haz clic en
Borrar en la parte superior de la página. En la ventana nueva, haz clic en Borrar para confirmar la eliminación.
Borra la red de VPC
En la consola de Cloud, ve a la página Redes de VPC.
Haga clic en
web-app-vpc
.Haz clic en
Borrar en la parte superior de la página. En la ventana nueva, haz clic en Borrar para confirmar la eliminación.
Próximos pasos
- Prueba otro instructivo:
- Obtén más información sobre los grupos de instancias administrados.
- Obtén más información sobre el balanceo de cargas.
- Obtén más información sobre la optimización de la latencia de las aplicaciones con el balanceo de cargas.
- Obtén más información sobre el diseño de sistemas robustos.
- Obtén más información sobre cómo compilar aplicaciones web escalables y resilientes en Google Cloud.