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
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
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: Un Google Cloud firewall te permite admitir o denegar 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 Google Cloud , ve a la página Redes de VPC.
Haga clic en Crear red de VPC.
En Nombre, ingresa
web-app-vpc
.Establece el Modo de creación de subred en Personalizado.
Crea una subred nueva de la siguiente manera:
- En la sección Subredes, configura el campo Nombre y, luego, ingresa
web-app-vpc-subnet
. - En el menú desplegable Región, selecciona us-central1.
- Asegúrate de que la opción Tipo de pila de IP esté configurada como IPv4.
- En la sección Rango IPv4 principal, ingresa el rango IPv4
10.2.0.0/24
.
- En la sección Subredes, configura el campo Nombre y, luego, ingresa
Al final de la página, haz clic en Crear.
Espera a que se cree 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 el campo Nombre, ingresa
allow-web-app-http
.Configura Red como
web-app-vpc
.Asegúrate de que las siguientes opciones estén configuradas como se indica:
- La opción Dirección del tráfico está configurada como Ingress.
- La opción Acción en caso de coincidencia está establecida en Permitir.
En el menú desplegable Destinos, selecciona Todas las instancias de la red.
Establece Filtro fuente como
IPv4 ranges
.En el campo Rangos de IP de origen, ingresa
130.211.0.0/22, 35.191.0.0/16
para permitir las verificaciones de estado del balanceador de cargas.En Protocolos y puertos, haz lo siguiente:
- Selecciona Protocolos y puertos especificados.
- Elige TCP.
- En el campo Puertos, ingresa
80
para permitir el acceso al tráfico HTTP.
Haz 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 con una secuencia de comandos de inicio.
En la consola de Google Cloud , ve a la página Plantillas de instancias.
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-medium
.Haz clic en la sección Opciones avanzadas para expandirla.
Haz clic en la sección Herramientas de redes y haz lo siguiente:
- En la sección Interfaces de red, haz clic en el ícono junto a las interfaces de red existentes para borrarlas.
- Haz clic en Agregar una interfaz de red y, luego, selecciona la red
web-app-vpc
. Esto obliga a que cada instancia creada con esta plantilla se ejecute en la red creada con anterioridad. - En el menú desplegable Subred, selecciona
web-app-vpc-subnet
. - Haz clic en Listo.
Haz clic en la sección Administración y haz lo siguiente:
En el campo Automatización, ingresa la siguiente secuencia de comandos de inicio:
apt-get update apt-get -y install git python3-pip python3-venv git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git python3 -m venv venv ./venv/bin/pip3 install -Ur ./python-docs-samples/compute/managed-instances/demo/requirements.txt ./venv/bin/pip3 install gunicorn ./venv/bin/gunicorn --bind 0.0.0.0:80 app:app --daemon --chdir ./python-docs-samples/compute/managed-instances/demo
La secuencia de comandos obtiene, instala y, luego, inicia la aplicación web cuando se inicia una instancia de VM.
Deja los valores predeterminados en las otras opciones.
Haz clic en Crear.
Espera a que se cree la plantilla 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.
Haz clic en Crear grupo de instancias.
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.Para desactivar el ajuste de escala automático, ve a la sección Ajuste de escala automático. En el menú desplegable Modo de ajuste de escala automático, selecciona Desactivado: no ajustar la escala automáticamente.
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
Deja los valores predeterminados en las otras opciones.
Haz clic en Crear. Esto te redirecciona a la página Grupos de instancias.
Es posible que debas esperar unos minutos hasta que todas las instancias del grupo estén en ejecución.
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 cualquier recurso Google Cloud afiliado. 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.
Haz clic en Reservar dirección IP externa estática.
En el campo Nombre, ingresa
web-app-ipv4
.Configura 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 varios componentes, esta tarea se divide en cinco partes:
- Selecciona el tipo de balanceador de cargas
- Asigna un nombre al balanceador de cargas
- Configura el frontend
- Configura el backend
- Revisa y finaliza
Completa todas las partes para crear el balanceador de cargas.
Selecciona el tipo de balanceador de cargas
En la consola de Google Cloud , ve a la página Balanceo de cargas.
- Haz clic en Crear balanceador de cargas.
- En Tipo de balanceador de cargas, selecciona Balanceador de cargas de aplicaciones (HTTP/HTTPS) y haz clic en Siguiente.
- En Orientado al público o interno, selecciona Orientado al público (externo) y haz clic en Siguiente.
- En Implementación global o de una sola región, selecciona Mejor para cargas de trabajo globales y haz clic en Siguiente.
- En Generación de balanceadores de cargas, selecciona Balanceador de cargas de aplicaciones externo global y haz clic en Siguiente.
- Haz clic en Configurar.
Asigna un nombre al balanceador de cargas
- En el panel izquierdo, en Nombre del balanceador de cargas, ingresa
web-app-load-balancer
.
Configura el 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.
Configura el backend
- En el panel izquierdo, haz clic en Configuración de backend.
- Haz clic en el menú desplegable Servicios y buckets de backend para abrir un menú y, luego, haz clic en Crear un servicio de backend.
- En la ventana nueva, para el Nombre del servicio de backend, ingresa
web-app-backend
. - En la sección Backends, haz lo siguiente:
- 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.
- Establece Grupo de instancias en
Crea la verificación de estado para el backend del balanceador de cargas de la siguiente manera:
- Haz clic en el menú desplegable Verificación de estado y, luego, en Crear una verificación de estado. Se abrirá 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 la cantidad de 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 Crear para crear una verificación de estado.
Deja los valores predeterminados en las otras opciones.
Haz clic en Crear para crear el servicio de backend.
Revisa y finaliza
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 que Frontend use una dirección IP con un Protocolo de
HTTP
.En la misma página, 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 es
load-balancing-web-app-group
.
- El Servicio de backend debe ser
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.
Prueba el balanceador de cargas
Verifica que puedas conectarte a la aplicación web a través del balanceador de cargas de la siguiente manera:
En la consola de Google Cloud , ve a la página Balanceo de cargas.
En la columna Nombre, haz clic en
web-app-load-balancer
para expandir el balanceador de cargas que acabas de crear.Para conectarte a la app web con las direcciones IP externas estáticas, haz lo siguiente:
- En la sección Frontend, copia la dirección IP que se muestra en la columna IP:Port.
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.
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 deGoogle Cloud . La sesión puede tardar unos segundos en inicializarse.
Guarda la dirección IP externa estática de tu balanceador de cargas de la siguiente manera:
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
El resultado se verá de la siguiente manera. Copia el
EXTERNAl_IP_ADDRESS
del resultado.IPAddress: EXTERNAl_IP_ADDRESS ...
Crea una variable Bash local:
export LOAD_BALANCER_IP=EXTERNAl_IP_ADDRESS
Reemplaza
EXTERNAl_IP_ADDRESS
por 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 sleep 2 # Wait for 2 seconds done
Esta secuencia de comandos intenta conectarse continuamente a la aplicación web con 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.
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
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Borra recursos específicos
En las siguientes secciones, se describe cómo borrar los recursos específicos que creaste durante este instructivo.
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
Espera hasta que se borre el balanceador de cargas antes de borrar 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 Liberar para confirmar la liberación.
Borra el grupo de instancias
Espera hasta que se borre el balanceador de cargas antes de borrar el grupo de instancias.
- In the Google Cloud console, go to the Instance groups page.
-
Select the checkbox for
your
load-balancing-web-app-group
instance group. - To delete the instance group, click Delete.
Borra la plantilla de instancias
Debes terminar de borrar el grupo de instancias antes de borrar la plantilla de instancias. No puedes borrar una plantilla de instancias si un grupo de instancias administrado la está usando.
En la consola de Google Cloud , ve a la página Plantillas de instancias.
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
Debes terminar de borrar el grupo de instancias antes de borrar la red de VPC. No puedes borrar una red de VPC si otros recursos aún la usan.
En la consola de Google Cloud , ve a la página Redes de VPC.
Haz clic en
web-app-vpc
.Haz clic en
Borrar red de VPC 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 para compilar aplicaciones web escalables y resilientes en Google Cloud.