Usa la reparación automática para apps con alta disponibilidad


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

    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.

    Go to project selector

    Verify that billing is enabled for your Google Cloud project.

    Enable the Compute Engine API.

    Enable the API

    In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

    Verify that billing is enabled for your Google Cloud project.

    Enable the Compute Engine API.

    Enable the 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:

    Arquitectura del sistema de una verificación de estado y un 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 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

    1. Crea una verificación de estado.

      1. En la consola de Google Cloud , ve a la página Crear verificación de estado.

        Ir a Crear verificación de estado

      2. En el campo Nombre, ingresa autohealer-check.

      3. Configura el Permiso como Regional.

      4. En el menú desplegable Región, selecciona europe-west1.

      5. En Protocolo, selecciona HTTP.

      6. 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 respuesta HTTP 200 (OK) cuando está en buen estado o una respuesta HTTP 500 (Internal Server Error) si está en mal estado.

      7. Configura el campo Criterios de estado:

        1. 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.
        2. 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.
        3. 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.
        4. 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.
      8. Deja los valores predeterminados para las otras opciones.

      9. Haz clic en Crear en la parte inferior.

    2. Crea una regla de firewall para permitir que los sondeos de las verificaciones de estado realicen solicitudes HTTP.

      1. En la consola de Google Cloud , ve a la página Crear una regla de firewall.

        Ir a Crear regla de firewall

      2. En Nombre, ingresa default-allow-http-health-check.

      3. En Red, selecciona default.

      4. En Destinos, selecciona All instances in the network.

      5. En Filtro de origen, selecciona IPv4 ranges.

      6. En Rangos de IPv4 de origen, ingresa 130.211.0.0/22, 35.191.0.0/16.

      7. En Protocolos y puertos, selecciona TCP y, luego, ingresa 80.

      8. Deja los valores predeterminados para las otras opciones.

      9. Haz clic en Crear.

    gcloud

    1. 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 respuesta HTTP 200 (OK) cuando se encuentra en buen estado o una respuesta HTTP 500 (Internal Server Error) si está en mal estado.
    2. 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 que 1. Lo ideal es que este valor sea 3 o más. Esto brinda protección contra errores poco frecuentes, como una pérdida de paquetes de red.
    • healthy-threshold: un valor de 2 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 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

    1. Crea una plantilla de instancias. Incluye una secuencia de comandos de inicio que inicie el servidor web de demostración.

      1. En la consola de Google Cloud , ve a la página Crear una plantilla de instancias.

        Ir a Crea una plantilla de instancias

      2. Configura el campo Nombre como webserver-template.

      3. En la sección Ubicación, en el menú desplegable Región, selecciona europe-west1.

      4. En la sección Configuración de la máquina, en el menú desplegable Tipo de máquina, selecciona e2-medium.

      5. En la sección Firewall, selecciona la casilla de verificación Permitir tráfico HTTP.

      6. Expande la sección Opciones avanzadas para ver la configuración avanzada. Aparecerán varias subsecciones.

      7. 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
        

      8. Deja los valores predeterminados para las otras opciones.

      9. Haz clic en Crear.

    2. Implementa el servidor web como un grupo de instancias administrado.

      1. En la consola de Google Cloud , ve a la página Crear grupo de instancias.

        Ir a Crear grupo de instancias

      2. Configura el campo Nombre como webserver-group.

      3. En Plantilla de instancias, selecciona webserver-template.

      4. En Región, selecciona europe-west1.

      5. En Zona, selecciona europe-west1-b.

      6. 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.

      7. Regresa al campo Cantidad de instancias y configúralo en 3.

      8. En la sección Reparación automática, haz lo siguiente:

        1. En el menú desplegable Verificación de estado, selecciona autohealer-check.
        2. En Retraso inicial, ingresa 300.

      9. Deja los valores predeterminados para las otras opciones.

      10. Haz clic en Crear.

    3. Crea una regla de firewall que permita las solicitudes HTTP a los servidores web.

      1. En la consola de Google Cloud , ve a la página Crear una regla de firewall.

        Ir a Crear regla de firewall

      2. En Nombre, ingresa default-allow-http.

      3. En Red, selecciona default.

      4. En Destinos, selecciona Specified target tags.

      5. En Etiquetas de destino, ingresa http-server.

      6. En Filtro de origen, selecciona IPv4 ranges.

      7. En Rangos de IPv4 de origen, ingresa 0.0.0.0/0 para permitir el acceso a todas las direcciones IP.

      8. En Protocolos y puertos, selecciona TCP y, luego, ingresa 80.

      9. Deja los valores predeterminados para las otras opciones.

      10. Haz clic en Crear.

    gcloud

    1. 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'
      
    2. 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
      
    3. 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
      

    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

    1. Navega a una VM del servidor web.

      1. En la Google Cloud consola, ve a la página Instancias de VM.

        Ir a Instancias de VM

      2. 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:

      Página web de demostración que muestra botones de estado verdes y botones de acción azules.

    2. 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 un HTTP 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).

    3. Espera a que se inicie la reparación automática.

      1. En la Google Cloud consola, ve a la página Instancias de VM.

        Ir a Instancias de VM

      2. 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.

      3. Haz clic en Actualizar en la parte superior de la página de vez en cuando para obtener el estado más reciente.

      4. 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.

    gcloud

    1. 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 y ACTION: NONE. De no ser así, espera unos minutos para que las VMs terminen de configurarse y vuelve a intentarlo.

    2. Abre una sesión de Cloud Shell nueva con Google Cloud CLI instalada.

    3. 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
      
    4. 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.

    5. 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 un HTTP 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
      ...
      
    6. 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.

      1. Cuando se inicia el proceso de reparación automática, se actualizan las columnas STATUS y ACTION, 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:
        
          ...
        
      2. El proceso de reparación finalizó cuando la VM vuelve a informar un STATUS de RUNNING y un ACTION de NONE, 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:
        
          ...
        
      3. Cuando termines de supervisar el grupo de instancias administrado, presiona Ctrl+C para detenerte.

    Si lo deseas, puedes repetir este ejercicio. Estas son algunas ideas:

    • ¿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).

    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

    1. In the Google Cloud console, go to the Manage resources page.

      Go to Manage resources

    2. In the project list, select the project that you want to delete, and then click Delete.
    3. In the dialog, type the project ID, and then click Shut down to delete the project.

    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

    1. In the Google Cloud console, go to the Instance groups page.

      Go to Instance groups

    2. Select the checkbox for your webserver-group instance group.
    3. 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

    1. En la consola de Google Cloud , ve a la página Plantillas de instancias.

      Ir a Plantillas de instancia

    2. Haz clic en la casilla de verificación junto a la plantilla de instancias.

    3. 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 \
        --region=europe-west1
    

    Borra la verificación de estado

    Console

    1. En la consola de Google Cloud , ve a la página Verificaciones de estado.

      Ir a Verificaciones de estado

    2. Haz clic en la casilla de verificación junto a la verificación de estado.

    3. 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 \
        --region=europe-west1
    

    Borra las reglas de firewall

    Console

    1. En la consola de Google Cloud , ve a la página Reglas de firewall.

      Ir a Reglas de firewall

    2. Haz en las casillas de verificación junto a las reglas de firewall llamadas default-allow-http y default-allow-http-health-check.

    3. 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