Vaciado de conexiones

El vaciado de conexiones es un proceso que garantiza que las solicitudes existentes en curso tengan tiempo para completarse cuando se quita una instancia de máquina virtual (VM) de un grupo de instancias o cuando se quita un extremo de los grupos de extremos de red (NEG) que es zonal dentro del alcance.

La información de esta página solo se aplica a los grupos de instancias y a los siguientes tipos de NEG que son zonales dentro del alcance:

El vaciado de conexiones se aplica en los siguientes casos:

El vaciado de conexiones no se aplica cuando se quita un grupo de backend (grupo de instancias o NEG zonal) de un servicio de backend del balanceador de cargas.

Cómo funciona el vaciado de conexiones

Para habilitar el vaciado de conexiones, debes establecer un tiempo de espera de vaciado de conexiones en el servicio de backend. La duración del tiempo de espera debe ser entre 0 y 3, 600 segundos.

Pueden pasar hasta 60 segundos a partir de que transcurrió el tiempo de espera especificado para que se cierre la instancia.

A continuación, se muestra una lista de especificaciones sobre el vaciado de conexiones:

  • El vaciado de conexiones está disponible para los servicios de backend que forman parte de los siguientes balanceadores de cargas:

    Los balanceadores de cargas de red de transferencia internos y los balanceadores de cargas de red de transferencia externos regionales admiten el vaciado de conexiones para TCP, UDP y otros protocolos que no son TCP.

  • El vaciado de conexiones también está disponible para los servicios de backend que forman parte de Cloud Service Mesh implementaciones.

  • Cuando se configura un tiempo de espera para el vaciado de conexiones y se quita una instancia del grupo de instancias o de un extremo de un NEG zonal, Google Cloud los balanceadores de cargas y Cloud Service Mesh se comportan de la siguiente manera:

    • No se envían conexiones nuevas a la instancia o al extremo que se quitó.

    • Balanceadores de cargas de aplicaciones: Durante la duración especificada del tiempo de espera, las solicitudes existentes de la VM o el extremo marcados para quitarse tienen tiempo para completarse. El balanceador de cargas no envía conexiones nuevas a esta VM o extremo. Una vez que transcurre el tiempo de espera, el balanceador de cargas deja de enviar todo el tráfico a la VM o al extremo que se quitó.

    • Balanceadores de cargas de red del proxy: Durante la duración especificada del tiempo de espera, las conexiones TCP existentes a la VM o al extremo marcados para quitarse siguen funcionando durante el período de vaciado de conexiones configurado. El balanceador de cargas no envía conexiones nuevas a esta VM o extremo. Una vez que transcurre el tiempo de espera, las conexiones TCP existentes a la VM o al extremo que se quitó permanecen activas y el proxy cierra todas las conexiones TCP existentes en un plazo de 10 minutos, que es el tiempo de espera de inactividad predeterminado.

    • Balanceadores de cargas de red de transferencia: Durante la duración especificada del tiempo de espera de vaciado de conexiones, los paquetes que pertenecen a las conexiones existentes se enrutan a la VM o al extremo marcados para quitarse. Una vez que vence el tiempo de espera, el balanceador de cargas quita la entrada de seguimiento de conexiones. Después de que se quita la entrada de la tabla de seguimiento de conexiones, los paquetes posteriores para la conexión se enrutan a una VM o un extremo de backend diferente siguiendo el proceso de selección de backend y seguimiento de conexiones. Para las conexiones TCP, el backend diferente no tiene ningún registro de una conexión existente, por lo que puede enviar un paquete de restablecimiento de TCP (RST) para cerrar la conexión y permitir que el cliente abra una conexión nueva al balanceador de cargas. Ten en cuenta que los balanceadores de cargas de red de transferencia por sí mismos no pueden enviar paquetes RST o FIN para cerrar una conexión.

  • Si habilitas el vaciado de conexiones en varios servicios de backend que comparten los mismos grupos de instancias o NEG, se usará el valor mayor de tiempo de espera. Por ejemplo, supongamos que el mismo grupo de instancias o NEG zonal es un backend para dos servicios de backend, donde un servicio de backend tiene un tiempo de espera de vaciado de conexiones de 100 segundos, y el otro servicio de backend tiene un tiempo de espera de vaciado de conexiones de 200 segundos. Google Cloud usa 200 segundos como el tiempo de espera de vaciado de conexiones efectivo antes de finalizarlos. Si el backend es un grupo de instancias administrado, las operaciones que borran la instancia se retrasan al menos 200 segundos.

  • Si no estableces un tiempo de espera para el vaciado de conexiones o si el tiempo de espera para el vaciado de conexiones se establece en cero (0), Google Cloud finaliza las conexiones existentes en la instancia o el extremo que se quitó lo antes posible.

  • Si usas la agrupación de conexiones, es posible que veas que las solicitudes nuevas, que usan una conexión ya establecida, aún se reciben en las VMs que se están desviando, lo que causa errores de conexión cuando esas VMs se borran a la larga.

Habilita el vaciado de conexiones

Para habilitar el vaciado de conexiones, completa los siguientes pasos.

Console

Actualizar un balanceador de cargas

  1. Ve a la página Balanceo de cargas en la Google Cloud console.
    Ir a Balanceo de cargas
  2. En la pestaña Balanceadores de cargas, para el balanceador de cargas que deseas actualizar, haz clic en more_vert, y, luego, en Editar .
  3. Haz clic en Configuración de backend.
  4. En el panel Configuración de backend, haz clic en .
  5. En la parte inferior del panel Editar servicio de backend, haz clic en Configuración avanzada.
  6. En el campo Tiempo de espera para el vaciado de conexiones, ingresa un valor entre 0 y 3600. Si ingresas 0, se inhabilita el vaciado de conexiones.

Actualiza Cloud Service Mesh

  1. Ve a la página Cloud Service Mesh en la Google Cloud console.
    Ir a Cloud Service Mesh
  2. Haz clic en el Nombre del servicio.
  3. En la página Detalles del servicio, haz clic en Editar .
  4. En la parte inferior de tu servicio, haz clic en Configuración avanzada.
  5. En el campo Tiempo de espera para el vaciado de conexiones, ingresa un valor entre 0 y 3600. Si ingresas 0, se inhabilita el vaciado de conexiones.
  6. Haz clic en Guardar.

gcloud

Habilita el vaciado de conexiones en un servicio de backend nuevo o existente mediante la marca --connection-draining-timeout. En los siguientes ejemplos, se muestra cómo cambiar el tiempo de espera de vaciado de conexiones:

  • Para un balanceador de cargas global o entre regiones existente:

    gcloud compute backend-services update BACKEND_SERVICE \
        --global \
        --connection-draining-timeout=CONNECTION_TIMEOUT_SECS
    
  • Para un balanceador de cargas regional existente:

    gcloud compute backend-services update BACKEND_SERVICE \
        --region=REGION \
        --connection-draining-timeout=CONNECTION_TIMEOUT_SECS
    

Reemplaza los marcadores de posición por valores válidos:

  • BACKEND_SERVICE: El servicio de backend que estás actualizando.
  • REGION: Si corresponde, es la región del servicio de backend que estás actualizando.
  • CONNECTION_TIMEOUT_SECS: La cantidad de segundos que se espera antes de que finalicen las conexiones a las instancias o a los extremos existentes, entre 0 y 3600 segundos. Si ingresas 0, se inhabilita el vaciado de conexiones. El tiempo de espera de vaciado de conexiones se aplica a todos los backends del servicio de backend.

    También puedes usar el comando gcloud compute backend-services edit para actualizar un servicio de backend existente.

API

Para habilitar el vaciado de conexiones en la API cuando creas o actualizas una instancia o un extremo, realiza una solicitud al URI de la API correspondiente y, luego, incluye el campo connectionDraining en el cuerpo de tu solicitud. En los siguientes ejemplos, se muestra cómo configurar ese atributo mediante la edición de un servicio de backend existente. Para obtener información sobre otros atributos obligatorios, consulta la documentación de cada balanceador de cargas.

  • Para un balanceador de cargas global o entre regiones existente:

    PATCH https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices
    
  • Para un balanceador de cargas regional existente:

    PATCH https://www.googleapis.com/compute/v1/projects/PROJECT_ID/region/REGION/backendServices
    
    {
       "name": "BACKEND_SERVICE",
       "connectionDraining": {
         "drainingTimeoutSec": CONNECTION_TIMEOUT_SECS
       }
    }
    

    Reemplaza lo siguiente:

    • PROJECT_ID: El ID del proyecto que contiene tu balanceador de cargas o una implementación de Cloud Service Mesh.
    • BACKEND_SERVICE: El servicio de backend que usa tu balanceador de cargas o la implementación de Cloud Service Mesh.
    • CONNECTION_TIMEOUT_SECS: La cantidad de segundos que debes esperar antes de que las instancias o los extremos se quiten del grupo de instancias o NEG, entre 0 y 3, 600 segundos. Esta duración de tiempo de espera se aplica a todos los grupos de instancias o NEG a los que hace referencia el servicio de backend.

¿Qué sigue?