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 aplicaciones afectadas de forma automática. Detecta con rapidez las instancias 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
- 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 componentes facturables de Google Cloud, incluidos los siguientes:- Compute Engine
Antes de comenzar
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.
Enable the Compute Engine API.
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.
Enable the Compute Engine API.
Si prefieres trabajar desde la línea de comandos, instala Google Cloud CLI.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
Arquitectura de apps
La app incluye los siguientes componentes de Compute Engine:
- Verificación de estado: es una política de verificación de estado HTTP que usa la reparación automática para detectar instancias de VM con fallas.
- Reglas de firewall: Con las reglas de firewall de Google Cloud puedes permitir o rechazar el tráfico a las instancias.
- Grupo de instancias administrado: Es un grupo de instancias que ejecutan el mismo servicio web de demostración.
- Plantilla de instancias: Es una plantilla que se usa para crear cada instancia en el grupo de instancias.
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 instancia 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. 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. En este instructivo, crearás una verificación de estado global.
Console
Crea una verificación de estado.
En la consola de Google Cloud, ve a la página Verificaciones de estado.
Haz clic en Crear verificación de estado.
En el campo Nombre, ingresa
autohealer-check
.Configura el Permiso como
Global
. Para la reparación automática, puedes usar una verificación de estado regional o global.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 el tiempo que Google 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 instancia 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 instancia se considere en mal estado.
- Establece el campo Intervalo de verificación en
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 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
IP ranges
.En Rangos de IP de origen, ingresa
130.211.0.0/22
y35.191.0.0/16
.En Protocolos y puertos, selecciona TCP y, luego, ingresa
80
.Haz clic en Crear.
gcloud
Crea una verificación de estado global con el comando
health-checks create http
.gcloud compute health-checks create http autohealer-check \ --global \ --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 el tiempo que Google Cloud espera para una respuesta a un sondeo. Este valor debe ser menor o igual que el intervalo de verificación.healthy-threshold
define el número de sondeos secuenciales que deben tener éxito para que la instancia se considere en buen estado.unhealthy-threshold
define la cantidad de sondeos secuenciales que deben fallar para que la instancia 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
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.
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.
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 aplicación, 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
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 Plantillas de instancia.
Haga clic en Crear plantilla de instancias.
Establece el campo Nombre como
webserver-template
.En Configuración de la máquina, selecciona
micro
(e2-micro).En Firewall, selecciona la casilla de verificación Permitir tráfico HTTP.
Haz clic en Administración, seguridad, discos, redes, instancia única para revelar la configuración avanzada. Aparecerán varias pestañas.
En la pestaña Administración, busca Automatizacióny, luego, 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
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 Grupos de instancias.
Haz clic en Crear grupo de instancias.
Configura el campo Nombre como
webserver-group
.En Región, selecciona
europe-west1
.En Zona, selecciona
europe-west1-b
.En Plantilla de instancias, selecciona
webserver-template
.En Ajuste de escala automático, selecciona Sin ajuste de escala automático.
En Número de instancias, ingresa
3
.En Verificación de estado, selecciona
autohealer-check
.En Retraso inicial, ingresa
90
.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 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
IP ranges
.En Rangos de IP de origen, ingresa
0.0.0.0/0
.En Protocolos y puertos, selecciona TCP y, luego, ingresa
80
.Haz clic en Crear.
gcloud
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 \ --machine-type e2-micro \ --tags http-server \ --metadata startup-script=' 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'
Crear un grupo de instancias.
gcloud compute instance-groups managed create webserver-group \ --zone europe-west1-b \ --template webserver-template \ --size 3 \ --health-check autohealer-check \ --initial-delay 90
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
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
Navega a una instancia del servidor web.
En la consola de Google Cloud, ve a la página Instancias de VM.
En la columna IP externa, haz clic en la dirección IP de cualquier instancia de
webserver-group
. 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 instancia).Espera a que se inicie la reparación automática.
En la consola de Google Cloud, ve a la página Instancias de VM.
Espera que cambie el estado de la instancia del servidor web. La marca de verificación verde junto al nombre de la instancia debe cambiar a un cuadrado gris, lo que indica que la reparación automática comenzó a reiniciar la instancia 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 instancia está nuevamente en buen estado.
gcloud
Supervisa el estado del grupo de instancias. (Cuando termines, presiona
Ctrl+C
).while : ; do \ gcloud compute instance-groups managed list-instances webserver-group \ --zone europe-west1-b \ ; done
NAME ZONE STATUS ACTION INSTANCE_TEMPLATE VERSION_NAME LAST_ERROR webserver-group-d5tz europe-west1-b RUNNING NONE webserver-template webserver-group-q6t9 europe-west1-b RUNNING NONE webserver-template webserver-group-tbpj europe-west1-b RUNNING NONE webserver-template
Si alguna instancia muestra un estado que no sea
RUNNING
, comoSTAGING
, espera un minuto hasta que la instancia termine de configurarse y, luego, intenta nuevamente.Abre una sesión de Cloud Shell nueva con Google Cloud CLI instalada.
Obtén la dirección de una instancia de servidor web.
gcloud compute instances list --filter webserver-group
Debajo de la columna
EXTERNAL_IP
, copia la dirección IP de cualquier instancia 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/19.6.0 ...
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 verificar esto 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 instancia).curl --head $IP_ADDRESS/health
HTTP/1.1 500 INTERNAL SERVER ERROR Server: gunicorn/19.6.0 ...
Regresa a la primera sesión de Shell para supervisar el grupo de instancias 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 instancia en mal estado.NAME ZONE STATUS ACTION INSTANCE_TEMPLATE VERSION_NAME LAST_ERROR webserver-group-d5tz europe-west1-b RUNNING NONE webserver-template webserver-group-q6t9 europe-west1-b RUNNING NONE webserver-template webserver-group-tbpj europe-west1-b STOPPING RECREATING webserver-template
El proceso de reparación finalizó cuando la instancia vuelve a informar un
STATUS
deRUNNING
y unACTION
deNONE
, lo que indica que la instancia se reinició correctamente.NAME ZONE STATUS ACTION INSTANCE_TEMPLATE VERSION_NAME LAST_ERROR webserver-group-d5tz europe-west1-b RUNNING NONE webserver-template webserver-group-q6t9 europe-west1-b RUNNING NONE webserver-template webserver-group-tbpj europe-west1-b RUNNING NONE webserver-template
Cuando termines de supervisar el grupo de instancias, presiona
Ctrl+C
para detenerte.
Si lo deseas, puedes repetir este ejercicio. Estas son algunas ideas:
¿Qué sucede si haces que todas las instancias 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 instancias 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 instancias se borren y reinicien por error cuando no haya un problema real).
El grupo de instancias tiene una 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 instancia en iniciarse y comenzar a entregar solicitudes de aplicaciones. De lo contrario, corres el riesgo de que la instancia se atasque en un bucle de inicio de reparación automática).
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.
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 específicos que creaste para 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
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
- 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.
gcloud
gcloud compute instance-groups managed delete webserver-group --zone europe-west1-b -q
Borra la plantilla de instancias
Console
En la consola de Google Cloud, ve a la página Plantillas de instancia.
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.
gcloud
gcloud compute instance-templates delete webserver-template -q
Borra la verificación de estado
Console
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.
gcloud
gcloud compute health-checks delete autohealer-check -q
Borra las reglas de firewall
Console
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.
gcloud
gcloud compute firewall-rules delete default-allow-http default-allow-http-health-check -q
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 cómo diseñar sistemas sólidos.
- Obtén más información sobre cómo compilar aplicaciones web escalables y resistentes en Google Cloud.