El drenaje de conexiones es un proceso que asegura que las solicitudes en curso tengan tiempo para completarse cuando se elimina una instancia de máquina virtual (VM) de un grupo de instancias o cuando se elimina un endpoint de grupos de endpoints de red (NEGs) que tienen un ámbito zonal.
La información de esta página solo se aplica a los grupos de instancias y a los siguientes tipos de NEGs de ámbito zonal:
La desviación de conexiones comienza cuando haces lo siguiente:
- Eliminas manualmente una VM de un grupo de instancias.
- Para quitar una instancia de un grupo de instancias gestionado, debes hacer una llamada
resize()
,deleteInstances()
,recreateInstances()
oabandonInstances()
. - Eliminas una NIC dinámica de una VM que forma parte de un backend de grupo de instancias.
- Eliminar un grupo de instancias o un NEG de un servicio de backend. Esta opción no se admite en los balanceadores de carga de red de paso a través internos ni en los externos.
- Google Cloud elimina una instancia como parte del autoescalado.
- Actualizas el grupo de instancias gestionadas con Managed Instance Group Updater.
- Quitas manualmente un endpoint de un NEG zonal.
El drenaje de conexiones no se aplica cuando desconectas un backend (un grupo de instancias o un NEG zonal) del servicio de backend de un balanceador de carga.
Cómo funciona el drenaje de conexiones
Para habilitar la purga de conexión, debes definir un tiempo de espera de purga de conexión en el servicio de backend. La duración del tiempo de espera debe ser de entre 0 y 3600 segundos, ambos incluidos.
La instancia puede tardar hasta 60 segundos en finalizarse después de que haya transcurrido el tiempo de espera especificado.
A continuación, se incluye una lista de especificaciones sobre el drenaje de conexiones:
El drenaje de conexiones está disponible para los servicios de backend que forman parte de los siguientes balanceadores de carga:
- Balanceador de carga de aplicación externo
- Balanceador de carga de aplicación interno
- Balanceador de carga de red de proxy externo
- Balanceador de carga de red de proxy interno
- Balanceador de carga de red de paso a través interno
- Balanceador de carga de red de paso a través externo basado en el servicio de backend
Tanto los balanceadores de carga de red de paso a través internos como los externos admiten el drenaje de conexiones para TCP, UDP y otros protocolos que no son TCP.
El drenaje de conexiones también está disponible para los servicios de backend que forman parte de las implementaciones de Cloud Service Mesh.
Cuando se establece un tiempo de espera de drenaje de conexiones y se elimina una instancia del grupo de instancias o un punto final de un NEG zonal, los balanceadores de carga y Cloud Service Mesh se comportan de la siguiente manera:Google Cloud
No se envían nuevas conexiones a la instancia ni al endpoint eliminados.
Balanceadores de carga de aplicaciones: durante el tiempo de espera especificado, se da tiempo a las solicitudes existentes a la VM o al endpoint marcados para su eliminación para que se completen. El balanceador de carga no envía nuevas conexiones a esta VM ni a este endpoint. Cuando se alcanza el tiempo de espera, el balanceador de carga deja de enviar todo el tráfico a la máquina virtual o al endpoint eliminados.
Balanceadores de carga de red proxy: durante el tiempo de espera especificado, las conexiones TCP a la VM o al endpoint marcados para su eliminación seguirán funcionando durante el periodo de purga de conexiones configurado. El balanceador de carga no envía nuevas conexiones a esta VM ni a este endpoint. Una vez que se alcanza el tiempo de espera, las conexiones TCP a la VM o al endpoint eliminados siguen activas y el proxy cierra todas las conexiones TCP en un plazo de 10 minutos, que es el tiempo de espera predeterminado.
Balanceadores de carga de red de tipo Passthrough: durante el tiempo de espera de la desviación de conexiones especificado, los paquetes pertenecientes a las conexiones se enrutan a la VM o al endpoint marcados para su eliminación. Una vez que se alcanza el tiempo de espera, se elimina la entrada de conntrack de la máquina virtual o el endpoint eliminados. Cualquier paquete que no sea SYN de una conexión existente lleva a la creación de una nueva entrada conntrack para el backend correcto. Cuando el paquete va a un backend nuevo y correcto, el backend envía un RST al cliente, ya que no tiene ningún registro del paquete que acaba de recibir. Los balanceadores de carga de red de paso a través internos y externos no envían un TCP-RST ni un TCP-FIN para finalizar las conexiones existentes una vez que ha transcurrido el tiempo de espera de purga de conexiones.
Si habilitas el drenaje de conexiones en varios servicios de backend que comparten los mismos grupos de instancias o NEGs, se usará el valor de tiempo de espera más alto. Por ejemplo, supongamos que el mismo grupo de instancias o NEG zonal es un backend de 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 utiliza 200 segundos como tiempo de espera de vaciado de conexiones efectivo antes de terminarlas. Si el backend es un grupo de instancias gestionado, las operaciones que eliminan la instancia se retrasan al menos 200 segundos.
Si no defines un tiempo de espera de drenaje de conexiones o si lo defines en cero (0), Google Cloud finaliza las conexiones existentes en la instancia o el endpoint eliminados lo más rápido posible.
Si usas la agrupación de conexiones, es posible que veas que las nuevas solicitudes, que usan una conexión establecida anteriormente, se siguen recibiendo en las VMs que se están vaciando, lo que provoca errores de conexión cuando esas VMs se eliminan.
Habilitar la purga de conexión
Para habilitar el drenaje de conexiones, siga estos pasos.
Consola
Actualizar un balanceador de carga
- Ve a la página Balanceo de carga de la Google Cloud consola.
Ve a Balanceo de carga. - En la pestaña Balanceadores de carga, haz clic en more_vert junto al balanceador de carga que quieras actualizar y, a continuación, en Editar .
- Haz clic en Configuración de backend.
- En el panel Configuración de backend, haz clic en .
- En la parte inferior del panel Editar servicio de backend, haz clic en Configuraciones avanzadas.
- En el campo Tiempo de espera de desviación de conexiones, introduce un valor entre
0
y3600
. Si se define el valor0
, se inhabilita la purga de conexión.
Actualizar Cloud Service Mesh
- Ve a la página Cloud Service Mesh de la Google Cloud consola.
Ir a Cloud Service Mesh - Haz clic en el nombre del servicio.
- En la página Detalles del servicio, haz clic en Editar .
- En la parte inferior del servicio, haz clic en Configuraciones avanzadas.
- En el campo Tiempo de espera de desviación de conexiones, introduce un valor entre
0
y3600
. Si se define el valor0
, se inhabilita la purga de conexión. - Haz clic en Guardar.
gcloud
Habilita la desviación de conexiones en un servicio de backend nuevo o ya creado mediante la marca --connection-draining-timeout
. En los siguientes ejemplos se muestra cómo cambiar el tiempo de espera de drenaje de conexiones:
Si ya tienes un balanceador de carga global o multirregional, sigue estos pasos:
gcloud compute backend-services update BACKEND_SERVICE \ --global \ --connection-draining-timeout=CONNECTION_TIMEOUT_SECS
En un balanceador de carga regional ya creado, sigue estos pasos:
gcloud compute backend-services update BACKEND_SERVICE \ --region=REGION \ --connection-draining-timeout=CONNECTION_TIMEOUT_SECS
Sustituye los marcadores de posición por valores válidos:
BACKEND_SERVICE
: el servicio de backend que estás actualizandoREGION
: si procede, la región del servicio backend que estás actualizandoCONNECTION_TIMEOUT_SECS
: el número de segundos que se debe esperar antes de que se terminen las conexiones existentes a instancias o endpoints, entre0
y3600
segundos (ambos incluidos). Si se define el valor0
, se inhabilita la purga de conexión. El tiempo de espera de purga de conexión 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.
API
Para habilitar el vaciado de conexiones en la API al crear o actualizar una instancia o un endpoint, haz una solicitud al URI de la API correspondiente para incluir el campo connectionDraining
en el cuerpo de la solicitud. En los siguientes ejemplos se muestra cómo definir ese atributo editando un servicio backend. Para obtener información sobre otros atributos obligatorios, consulta la documentación de cada balanceador de carga.
Si ya tienes un balanceador de carga global o multirregional, sigue estos pasos:
PATCH https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices
En un balanceador de carga regional ya creado, sigue estos pasos:
PATCH https://www.googleapis.com/compute/v1/projects/PROJECT_ID/region/REGION/backendServices { "name": "BACKEND_SERVICE", "connectionDraining": { "drainingTimeoutSec": CONNECTION_TIMEOUT_SECS } }
Haz los cambios siguientes:
PROJECT_ID
: el ID del proyecto que contiene tu balanceador de carga o tu implementación de Cloud Service MeshBACKEND_SERVICE
: el servicio de backend que usa tu balanceador de carga o tu implementación de Cloud Service MeshCONNECTION_TIMEOUT_SECS
: número de segundos que se debe esperar antes de que las instancias o los endpoints se eliminen del grupo de instancias o del NEG. El valor debe estar entre 0 y 3600 segundos (ambos incluidos). Esta duración del tiempo de espera se aplica a todos los grupos de instancias o NEGs a los que hace referencia el servicio de backend.
Siguientes pasos
Para obtener información general sobre los servicios de backend, consulta el resumen de los servicios de backend.