En este instructivo interactivo, se muestra cómo usar la autohealing para compilar aplicaciones con alta disponibilidad en Compute Engine.
Las aplicaciones con alta disponibilidad están diseñadas para entregar solicitudes a clientes con la mínima latencia y tiempo de actividad. La disponibilidad se ve afectada cuando una aplicación falla o se detiene. Los clientes con aplicaciones afectadas pueden experimentar latencia o tiempo de inactividad altos.
La reparación automática te permite reiniciar las apps afectadas de forma automática. Detecta con rapidez las instancias de máquina virtual (VM) con fallas y las recrea de forma automática para poder entregar a los clientes nuevamente. Gracias a la reparación automática, ya no tendrás que volver a poner en servicio una app de forma manual cuando ocurra una falla.
Objetivos
- Configurar una verificación de estado y una política de reparación automática
- Configurar un servicio web de demostración en un grupo de instancias administrado (MIG)
- Simular fallas de verificación de estado y observar el proceso de recuperación de la reparación automática
Costos
En este instructivo, se usan los siguientes componentes facturables de Google Cloud :- Compute Engine
Antes de comenzar
- Verificación de estado: Es una política de verificación de estado HTTP que usa la reparación automática para detectar VM con fallas.
- Reglas de firewall: Google Cloud Las reglas de firewall te permiten permitir o rechazar el tráfico a tus VMs.
- Grupo de instancias administrado: Es un grupo de VMs que ejecutan el mismo servicio web de demostración.
- Plantilla de instancias: Es una plantilla que se usa para crear cada VM en el grupo de instancias.
Crea una verificación de estado.
En la consola de Google Cloud , ve a la página Crear verificación de estado.
En el campo Nombre, ingresa
autohealer-check
.Configura el Permiso como
Regional
.En el menú desplegable Región, selecciona
europe-west1
.En Protocolo, selecciona
HTTP
.Establece el campo Ruta de la solicitud en
/health
. Esto indica qué ruta de acceso HTTP utiliza la verificación de estado. En este instructivo, el servidor web de demostración define la ruta de acceso/health
para mostrar una respuestaHTTP 200 (OK)
cuando está en buen estado o una respuestaHTTP 500 (Internal Server Error)
si está en mal estado.Configura el campo Criterios de estado:
- Establece el campo Intervalo de verificación en
10
. Esto define la cantidad de tiempo desde el inicio de un sondeo hasta el inicio del siguiente. - Establece el Tiempo de espera en
5
. Esto define la cantidad de tiempo queGoogle Cloud espera una respuesta a un sondeo. Este valor debe ser menor o igual que el intervalo de verificación. - En Umbral de buen estado selecciona
2
. Esto define la cantidad de sondeos secuenciales que deben tener éxito para que la VM se considere en buen estado. - Configura el campo Umbral en mal estado como
3
. Esto define la cantidad de sondeos secuenciales que deben fallar para que la VM se considere en mal estado.
- Establece el campo Intervalo de verificación en
Deja los valores predeterminados para las otras opciones.
Haz clic en Crear en la parte inferior.
Crea una regla de firewall para permitir que los sondeos de las verificaciones de estado realicen solicitudes HTTP.
En la consola de Google Cloud , ve a la página Crear una regla de firewall.
En Nombre, ingresa
default-allow-http-health-check
.En Red, selecciona
default
.En Destinos, selecciona
All instances in the network
.En Filtro de origen, selecciona
IPv4 ranges
.En Rangos de IPv4 de origen, ingresa
130.211.0.0/22, 35.191.0.0/16
.En Protocolos y puertos, selecciona TCP y, luego, ingresa
80
.Deja los valores predeterminados para las otras opciones.
Haz clic en Crear.
Crea una verificación de estado con el comando
health-checks create http
.gcloud compute health-checks create http autohealer-check \ --region europe-west1 \ --check-interval 10 \ --timeout 5 \ --healthy-threshold 2 \ --unhealthy-threshold 3 \ --request-path "/health"
check-interval
define la cantidad de tiempo desde el inicio de un sondeo hasta el inicio del siguiente.timeout
define la cantidad de tiempo que Google Cloudespera una respuesta a un sondeo. Este valor debe ser menor o igual que el intervalo de verificación.healthy-threshold
define la cantidad de sondeos secuenciales que deben realizarse con éxito para que la VM se considere en buen estado.unhealthy-threshold
define la cantidad de sondeos secuenciales que deben fallar para que la VM se considere en mal estado.request-path
indica qué ruta HTTP utiliza la verificación de estado. En este instructivo, el servidor web de demostración define la ruta de acceso/health
para mostrar una respuestaHTTP 200 (OK)
cuando se encuentra en buen estado o una respuestaHTTP 500 (Internal Server Error)
si está en mal estado.
Crea una regla de firewall para permitir que los sondeos de las verificaciones de estado realicen solicitudes HTTP.
gcloud compute firewall-rules create default-allow-http-health-check \ --network default \ --allow tcp:80 \ --source-ranges 130.211.0.0/22,35.191.0.0/16
unhealthy-threshold
: Debe ser mayor que1
. Lo ideal es que este valor sea3
o más. Esto brinda protección contra errores poco frecuentes, como una pérdida de paquetes de red.healthy-threshold
: un valor de2
es suficiente para la mayoría de las aplicaciones.timeout
: establece este valor de tiempo en una cantidad generosa (cinco veces mayor que el tiempo de respuesta esperado o más). Esto brinda protección contra retrasos inesperados, como instancias ocupadas o una conexión de red lenta.check-interval
: este valor debe estar entre 1 segundo y el doble del tiempo de espera (no muy largo ni muy corto). Cuando un valor es demasiado largo, las instancias con errores no se detectan a tiempo. Cuando un valor es demasiado corto, las instancias y la red pueden quedar muy ocupadas, debido a la gran cantidad de sondeos de verificación de estado que se envían cada segundo.Crea una plantilla de instancias. Incluye una secuencia de comandos de inicio que inicie el servidor web de demostración.
En la consola de Google Cloud , ve a la página Crear una plantilla de instancias.
Configura el campo Nombre como
webserver-template
.En la sección Ubicación, en el menú desplegable Región, selecciona europe-west1.
En la sección Configuración de la máquina, en el menú desplegable Tipo de máquina, selecciona e2-medium.
En la sección Firewall, selecciona la casilla de verificación Permitir tráfico HTTP.
Expande la sección Opciones avanzadas para ver la configuración avanzada. Aparecerán varias subsecciones.
En la sección Administración, busca Automatización y, luego, 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
Deja los valores predeterminados para las otras opciones.
Haz clic en Crear.
Implementa el servidor web como un grupo de instancias administrado.
En la consola de Google Cloud , ve a la página Crear grupo de instancias.
Configura el campo Nombre como
webserver-group
.En Plantilla de instancias, selecciona
webserver-template
.En Región, selecciona
europe-west1
.En Zona, selecciona
europe-west1-b
.En la sección Ajuste de escala automático, en Modo de ajuste de escala automático, selecciona Desactivar: No realizar ajuste de escala automático.
Regresa al campo Cantidad de instancias y configúralo en
3
.En la sección Reparación automática, haz lo siguiente:
- En el menú desplegable Verificación de estado, selecciona
autohealer-check
. En Retraso inicial, ingresa
300
.
- En el menú desplegable Verificación de estado, selecciona
Deja los valores predeterminados para las otras opciones.
Haz clic en Crear.
Crea una regla de firewall que permita las solicitudes HTTP a los servidores web.
En la consola de Google Cloud , ve a la página Crear una regla de firewall.
En Nombre, ingresa
default-allow-http
.En Red, selecciona
default
.En Destinos, selecciona
Specified target tags
.En Etiquetas de destino, ingresa
http-server
.En Filtro de origen, selecciona
IPv4 ranges
.En Rangos de IPv4 de origen, ingresa
0.0.0.0/0
para permitir el acceso a todas las direcciones IP.En Protocolos y puertos, selecciona TCP y, luego, ingresa
80
.Deja los valores predeterminados para las otras opciones.
Haz clic en Crear.
Crea una plantilla de instancias. Incluye una secuencia de comandos de inicio que inicie el servidor web de demostración.
gcloud compute instance-templates create webserver-template \ --instance-template-region europe-west1 \ --machine-type e2-medium \ --tags http-server \ --metadata startup-script=' 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'
Cree un grupo de instancias administrado.
gcloud compute instance-groups managed create webserver-group \ --zone europe-west1-b \ --template projects/PROJECT_ID/regions/europe-west1/instanceTemplates/webserver-template \ --size 3 \ --health-check projects/PROJECT_ID/regions/europe-west1/healthChecks/autohealer-check \ --initial-delay 300
Crea una regla de firewall que permita las solicitudes HTTP a los servidores web.
gcloud compute firewall-rules create default-allow-http \ --network default \ --allow tcp:80 \ --target-tags http-server
Navega a una VM del servidor web.
En la Google Cloud consola, ve a la página Instancias de VM.
En cualquier VM de
webserver-group
, en la columna IP externa, haz clic en la dirección IP. Se abrirá una pestaña nueva en el navegador web. Si la solicitud agota el tiempo de espera o la página web no está disponible, espera un minuto hasta que el servidor termine de configurarse y vuelve a intentar.
El servidor web de demostración muestra una página similar a la que muestra, a continuación:
En la página web de demostración, haz clic en Hacer que esté en mal estado.
Esto hace que el servidor web produzca fallas en la verificación de estado. En específico, el servidor web hace que la ruta de acceso
/health
muestre unHTTP 500 (Internal Server Error)
. Puedes verificar esto tú mismo si haces clic rápidamente en el botón Verificar estado (esto deja de funcionar después de que la reparación automática comienza a reiniciar la VM).Espera a que se inicie la reparación automática.
En la Google Cloud consola, ve a la página Instancias de VM.
Espera a que cambie el estado de la VM del servidor web. La marca de verificación verde junto al nombre de la VM debe cambiar a un cuadrado gris, lo que indica que la reparación automática comenzó a reiniciar la VM en mal estado.
Haz clic en Actualizar en la parte superior de la página de vez en cuando para obtener el estado más reciente.
El proceso de reparación automática finaliza cuando el cuadrado gris cambia de nuevo a una marca de verificación verde, lo que indica que la VM está nuevamente en buen estado.
Supervisa el estado del grupo de instancias administrado. (Cuando termines, presiona
Ctrl+C
).while : ; do gcloud compute instance-groups managed list-instances webserver-group \ --zone europe-west1-b sleep 5 # Wait for 5 seconds done
NAME: webserver-group-0zx6 ZONE: europe-west1-b STATUS: RUNNING HEALTH_STATE: HEALTHY ACTION: NONE INSTANCE_TEMPLATE: webserver-template VERSION_NAME: LAST_ERROR: NAME: webserver-group-4qbx ZONE: europe-west1-b STATUS: RUNNING HEALTH_STATE: HEALTHY ACTION: NONE INSTANCE_TEMPLATE: webserver-template VERSION_NAME: LAST_ERROR: NAME: webserver-group-m5v5 ZONE: europe-west1-b STATUS: RUNNING HEALTH_STATE: HEALTHY ACTION: NONE INSTANCE_TEMPLATE: webserver-template VERSION_NAME: LAST_ERROR:
Todas las VMs del grupo deben mostrar
STATUS: RUNNING
yACTION: NONE
. De no ser así, espera unos minutos para que las VMs terminen de configurarse y vuelve a intentarlo.Abre una sesión de Cloud Shell nueva con Google Cloud CLI instalada.
Obtén la dirección de una VM de servidor web.
gcloud compute instances list --filter webserver-group
Debajo de la columna
EXTERNAL_IP
, copia la dirección IP de cualquier VM de servidor web y guárdala como una variable de Bash local.export IP_ADDRESS=EXTERNAL_IP_ADDRESS
Verifica que el servidor web haya terminado de configurarse. El servidor mostrará una respuesta
HTTP 200 OK
.curl --head $IP_ADDRESS/health
HTTP/1.1 200 OK Server: gunicorn ...
Si recibes un error
Connection refused
, espera un minuto hasta que el servidor termine de configurarse y, luego, intenta nuevamente.Haz que el servidor web esté en mal estado.
curl $IP_ADDRESS/makeUnhealthy > /dev/null
Esto hace que el servidor web produzca fallas en la verificación de estado. En específico, el servidor web hace que la ruta de acceso
/health
muestre unHTTP 500 INTERNAL SERVER ERROR
. Puedes verificarlo tú mismo si haces una solicitud rápida a/health
(esto deja de funcionar después de que la reparación automática comienza a reiniciar la VM).curl --head $IP_ADDRESS/health
HTTP/1.1 500 INTERNAL SERVER ERROR Server: gunicorn ...
Regresa a la primera sesión de Shell para supervisar el grupo de instancias administrado y espera a que la reparación automática comience.
Cuando se inicia el proceso de reparación automática, se actualizan las columnas
STATUS
yACTION
, lo que indica que la reparación automática comenzó a reiniciar la VM en mal estado.NAME: webserver-group-0zx6 ZONE: europe-west1-b STATUS: STOPPING HEALTH_STATE: UNHEALTHY ACTION: RECREATING INSTANCE_TEMPLATE: webserver-template VERSION_NAME: LAST_ERROR: ...
El proceso de reparación finalizó cuando la VM vuelve a informar un
STATUS
deRUNNING
y unACTION
deNONE
, lo que indica que la VM se reinició correctamente.NAME: webserver-group-0zx6 ZONE: europe-west1-b STATUS: RUNNING HEALTH_STATE: HEALTHY ACTION: NONE INSTANCE_TEMPLATE: webserver-template VERSION_NAME: LAST_ERROR: ...
Cuando termines de supervisar el grupo de instancias administrado, presiona
Ctrl+C
para detenerte.
¿Qué sucede si haces que todas las VMs estén en mal estado al mismo tiempo? Para obtener más información sobre cómo funciona la reparación automática durante fallas simultáneas, consulta la documentación sobre el comportamiento de la reparación automática.
¿Es posible actualizar la configuración de la verificación de estado para recuperar las VMs lo más rápido posible? (En la práctica, debes configurar los parámetros de la verificación de estado para que usen valores conservadores, como se explica en este instructivo. De lo contrario, puedes correr el riesgo de que las VMs se borren y reinicien por error cuando no haya un problema real).
El grupo de instancias administrado tiene un parámetro de configuración
initial delay
. ¿Es posible determinar el retraso mínimo necesario para este servidor web de demostración? (En la práctica, debes establecer una demora un poco más larga (de 10% a 20%) de lo que tarda una VM en iniciarse y comenzar a entregar solicitudes de aplicaciones. De lo contrario, corres el riesgo de que la VM se atasque en un bucle de inicio de reparación automática).- 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.
- In the Google Cloud console, go to the Instance groups page.
-
Select the checkbox for
your
webserver-group
instance group. - To delete the instance group, click Delete.
En la consola de Google Cloud , ve a la página Plantillas de instancias.
Haz clic en la casilla de verificación junto a la plantilla de instancias.
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.En la consola de Google Cloud , ve a la página Verificaciones de estado.
Haz clic en la casilla de verificación junto a la verificación de estado.
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.En la consola de Google Cloud , ve a la página Reglas de firewall.
Haz en las casillas de verificación junto a las reglas de firewall llamadas
default-allow-http
ydefault-allow-http-health-check
.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.- Prueba otro instructivo:
- Obtén más información sobre los grupos de instancias administrados.
- Obtén más información sobre cómo diseñar sistemas sólidos.
- Obtén más información para compilar aplicaciones web escalables y resilientes en Google Cloud.
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.
Enable the Compute Engine API.
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.
Enable the Compute Engine API.
Si prefieres trabajar desde la línea de comandos, instala Google Cloud CLI.
Instala Google Cloud CLI. Después de la instalación, inicializa Google Cloud CLI ejecutando el siguiente comando:
gcloud init
Si usas un proveedor de identidad externo (IdP), primero debes acceder a gcloud CLI con tu identidad federada.
Arquitectura de apps
La app incluye los siguientes componentes de Compute Engine:
Cómo la verificación de estado sondea el servicio web de demostración
Una verificación de estado envía solicitudes de sondeo a una VM a través de un protocolo específico, como HTTP(S), SSL o TCP. Para obtener más información, consulta cómo funcionan las verificaciones de estado y sus categorías, protocolos y puertos.
La verificación de estado de este instructivo es una verificación de estado HTTP que sondea la ruta HTTP /health
en el puerto 80. En una verificación de estado HTTP, la solicitud de sondeo solo se transmite si la ruta de acceso muestra una respuesta HTTP 200 (OK)
. En este instructivo, el servidor web de demostración define la ruta de acceso /health
para mostrar una respuesta HTTP 200 (OK)
cuando se encuentra en buen estado o una respuesta HTTP 500 (Internal Server Error)
si está en mal estado.
Si quieres obtener más información, consulta los criterios de éxito para HTTP, HTTPS y HTTP/2.
Crea la verificación de estado
Para configurar la reparación automática, crea una verificación de estado personalizada y configura el firewall de la red de manera que permita sondeos de verificación de estado.
En este instructivo, crearás una verificación de estado regional. Para la reparación automática, puedes usar una verificación de estado regional o global. Las verificaciones de estado regionales reducen las dependencias entre regiones y ayudan a lograr la residencia de los datos. Las verificaciones de estado globales son convenientes si deseas usar la misma verificación de estado para MIGs en varias regiones.
Console
gcloud
Características de una buena verificación de estado de reparación automática
Las verificaciones de estado que se usan en la reparación automática deben ser conservadoras para que no borren ni vuelvan a crear tus instancias de manera preventiva. Cuando una verificación de estado de reparación automática es demasiado agresiva, la reparación automática puede confundir las instancias ocupadas con instancias con errores y reiniciarlas sin necesidad, lo que reduce la disponibilidad.
Configura el servicio web
En este instructivo, se usa una app web que se almacena en GitHub. Si deseas obtener más información sobre cómo se implementó la app, consulta el repositorio de GitHub GoogleCloudPlatform/python-docs-samples.
Para configurar el servicio web de demostración, crea una plantilla de instancias que inicie el servidor web de demostración al inicio. Luego, usa esta plantilla de instancias para implementar un grupo de instancias administrado y habilitar la reparación automática.
Console
gcloud
Espera unos minutos a que el grupo de instancias administrado cree y verifique sus VMs.
Simula fallas de verificación de estado
Para simular fallas de verificación de estado, el servidor web de demostración te ofrece formas de forzar una falla de verificación de estado.
Console
gcloud
Si lo deseas, puedes repetir este ejercicio. Estas son algunas ideas:
Visualiza el historial de reparación automática (opcional)
Para ver el historial de las operaciones de la reparación automática, usa el siguiente comando de gcloud
:
gcloud compute operations list --filter='operationType~compute.instances.repair.*'
Para obtener más información, consulta la sección sobre cómo visualizar el historial de operaciones de reparación automática.
Realiza una limpieza
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 específicos que creaste para este instructivo.
Borra el proyecto
Borra recursos específicos
Si no puedes borrar el proyecto que usaste para este instructivo, borra los recursos del instructivo de forma individual.
Borra el grupo de instancias
Console
gcloud
gcloud compute instance-groups managed delete webserver-group --zone europe-west1-b -q
Borra la plantilla de instancias
Console
gcloud
gcloud compute instance-templates delete webserver-template -q \ --region=europe-west1
Borra la verificación de estado
Console
gcloud
gcloud compute health-checks delete autohealer-check -q \ --region=europe-west1
Borra las reglas de firewall
Console
gcloud
gcloud compute firewall-rules delete default-allow-http default-allow-http-health-check -q