Sesiones persistentes para Equilibrador de carga de aplicación - Elastic Load Balancing

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Sesiones persistentes para Equilibrador de carga de aplicación

De forma predeterminada, un Equilibrador de carga de aplicación enruta cada solicitud de manera independiente a un destino registrado en función del algoritmo de equilibrio de carga elegido. Sin embargo, puede utilizar la característica de sesión persistente (también denominada afinidad de sesión) que permite que el equilibrador de carga vincule una sesión del usuario a una instancia concreta. Con ello se garantiza que todas las solicitudes de ese usuario durante la sesión se envían al mismo destino. Esta característica resulta útil para los servidores que mantienen información de estado, para ofrecer una experiencia de continuidad a los clientes. Para utilizar las sesiones persistentes, los clientes deben admitir las cookies.

Los equilibradores de carga de aplicaciones admiten cookies basadas en la duración y cookies basadas en aplicaciones. Las sesiones persistentes se habilitan para grupos de destino. Se puede usar una combinación de persistencia en función de la duración, persistencia en función de la aplicación y ausencia de persistencia en los grupos de destino.

La clave para administrar las sesiones persistentes consiste en determinar durante cuánto tiempo deberá direccionar el equilibrador de carga la solicitud del usuario a la misma instancia. Si la aplicación tiene su propia cookie de sesión, entonces puede usar la persistencia en función de la aplicación y la cookie de sesión del equilibrador de carga respeta la duración especificada por la cookie de sesión de la aplicación. Si la aplicación no tiene su propia cookie de sesión, entonces puede utilizar la persistencia en función de la duración para generar una cookie de sesión del equilibrador de carga con una duración especificada.

El contenido de estas cookies generadas por el equilibrador de carga se cifra mediante una clave rotativa. Las cookies generadas por el equilibrador de carga no se pueden descifrar ni modificar.

Para ambos tipos de persistencia, el Equilibrador de carga de aplicación restablece la caducidad de las cookies que genera después de cada solicitud. Si una cookie caduca, la sesión deja de ser persistente y el cliente debe eliminarla de su almacén de cookies.

Requisitos
  • Un equilibrador de carga HTTP/HTTPS.

  • Al menos una instancia en buen estado en cada zona de disponibilidad.

Consideraciones
  • Las sesiones persistentes no son compatibles si el equilibrio de carga entre zonas está deshabilitado. Si se intentan habilitar sesiones persistentes con el equilibrio de carga entre zonas deshabilitado, se producirá un error.

  • En el caso de las cookies basadas en aplicaciones, los nombres de las cookies deben especificarse individualmente para cada grupo de destino. Sin embargo, en el caso de las cookies basadas en la duración, AWSALB es el único nombre que se utiliza en todos los grupos de destino.

  • Si se utilizan varios niveles de equilibradores de carga de aplicaciones, puede habilitar sesiones persistentes en todas las capas con cookies basadas en aplicaciones. Sin embargo, con las cookies basadas en la duración, solo puede habilitar las sesiones persistentes en una capa, ya que AWSALB es el único nombre disponible.

  • La persistencia en función de aplicaciones no funciona con grupos de destino ponderados.

  • Si tiene una acción de reenvío con varios grupos de destino y uno o más de ellos tienen habilitadas las sesiones persistentes, debe habilitar la persistencia en el nivel del grupo de destino.

  • WebSocket las conexiones son intrínsecamente rígidas. Si el cliente solicita una actualización de la conexión WebSockets, el destino que devuelve un código de estado HTTP 101 para aceptar la actualización de la conexión es el destino utilizado en la WebSockets conexión. Una vez completada la WebSockets actualización, no se utiliza la adherencia basada en cookies.

  • Los equilibradores de carga de aplicaciones utilizan el atributo Expires del encabezado de la cookie en lugar del atributo Max-Age.

  • Los equilibradores de carga de aplicaciones no admiten valores de cookies codificados como URL.

Persistencia en función de la duración

La rigidez en función de la duración dirige las solicitudes al mismo destino de un grupo de destino mediante una cookie generada por el equilibrador de carga (AWSALB). La cookie se utiliza para asignar la sesión al destino. Si la aplicación no tiene su propia cookie de sesión, puede especificar su propia duración de persistencia y administrar durante cuánto tiempo el equilibrador de carga debe dirigir de manera consistente la solicitud del usuario al mismo destino.

Cuando un equilibrador de carga recibe una solicitud de un cliente por primera vez, la direcciona a un destino (según el algoritmo seleccionado) y genera una cookie denominada AWSALB. Codifica la información sobre el destino seleccionado, cifra la cookie y la incluye en la respuesta al cliente. La cookie generada por el equilibrador de carga tiene su propia caducidad de 7 días, que no se puede configurar.

En las solicitudes posteriores, el cliente debe incluir la cookie AWSALB. Cuando el equilibrador de carga recibe una solicitud de un cliente que contiene la cookie, la detecta y dirige la solicitud al mismo destino. Si la cookie está presente pero no se puede decodificar, o si hace referencia a un destino que cuyo registro se ha anulado o no está en buen estado, el equilibrador de carga selecciona un nuevo destino y actualiza la cookie con información sobre el nuevo destino.

En el caso de las solicitudes de intercambio de recursos entre orígenes (CORS), algunos navegadores deben habilitar la persistencia. SameSite=None; Secure Para admitir estos navegadores, el balanceador de cargas siempre genera una segunda cookie de adherenciaAWSALBCORS, que incluye la misma información que la cookie de adherencia original, así como el atributo. SameSite Los clientes reciben ambas cookies, incluidas las solicitudes que no son de CORS.

Para habilitar la persistencia en función de la duración mediante la consola
  1. Abra la consola de Amazon EC2 en https://console.aws.amazon.com/ec2/.

  2. En el panel de navegación, en Load Balancing (Equilibración de carga), elija Target Groups (Grupos de destino).

  3. Elija el nombre del grupo de destino para mostrar sus detalles.

  4. En la pestaña Detalles del grupo, en la sección Atributos, seleccione Editar.

  5. En la página Edit attributes, lleve a cabo alguna de las siguientes operaciones:

    1. Seleccione Persistencia.

    2. Para Tipo de persistencia, seleccione Cookie generada por el equilibrador de carga.

    3. Para Duración de la persistencia, especifique un valor comprendido entre 1 segundo y 7 días.

    4. Elija Guardar cambios.

Para activar la persistencia en función de la duración, utilice la AWS CLI

Utilice el modify-target-group-attributescomando con los stickiness.lb_cookie.duration_seconds atributos stickiness.enabled y.

Use el siguiente comando para habilitar la persistencia en función de la duración.

aws elbv2 modify-target-group-attributes --target-group-arn ARN --attributes Key=stickiness.enabled,Value=true Key=stickiness.lb_cookie.duration_seconds,Value=time-in-seconds

El resultado debería ser similar al siguiente ejemplo.

{ "Attributes": [ ... { "Key": "stickiness.enabled", "Value": "true" }, { "Key": "stickiness.lb_cookie.duration_seconds", "Value": "86500" }, ... ] }

Persistencia en función de la aplicación

La persistencia en función de la aplicación le brinda la flexibilidad de establecer sus propios criterios para determinar la persistencia a los destinos del cliente. Cuando se habilita la persistencia en función de las aplicaciones, el equilibrador de carga dirige la primera solicitud a un destino del grupo de destino en función del algoritmo elegido. Se espera que el destino establezca una cookie de aplicación personalizada que coincida con la cookie configurada en el equilibrador de carga para permitir la persistencia. Esta cookie personalizada puede incluir cualquiera de los atributos de cookie requeridos por la aplicación.

Cuando el Equilibrador de carga de aplicación recibe la cookie de aplicación personalizada del destino, genera automáticamente una nueva cookie de aplicación cifrada para capturar la información de persistencia. Esta cookie de aplicación generada por el equilibrador de carga captura la información sobre la persistencia de cada grupo de destino que tiene habilitada la persistencia en función de aplicaciones.

La cookie de aplicación generada por el equilibrador de carga no copia los atributos de la cookie personalizada establecida por el destino. Tiene su propia caducidad de 7 días, que no se puede configurar. En la respuesta al cliente, el Equilibrador de carga de aplicación solo valida el nombre con el que se configuró la cookie personalizada a nivel del grupo de destino y no el valor ni el atributo de caducidad de la cookie personalizada. Siempre que el nombre coincida, el equilibrador de carga envía ambas cookies, la cookie personalizada establecida por el destino y la cookie de aplicación generada por el equilibrador de carga, en la respuesta al cliente.

En las solicitudes posteriores, los clientes tienen que devolver ambas cookies para mantener la persistencia. El equilibrador de carga descifra la cookie de la aplicación y comprueba si el tiempo de permanencia configurado sigue siendo válido. Luego, utiliza la información de la cookie para enviar la solicitud al mismo destino dentro del grupo de destino con el fin de mantener la persistencia. El equilibrador de carga también envía por proxy la cookie de la aplicación personalizada al destino sin inspeccionarla ni modificarla. En las respuestas posteriores, se restablecen la fecha de caducidad de la cookie de aplicación generada por el equilibrador de carga y el tiempo de permanencia configurado en el equilibrador de carga. Para mantener la persistencia entre el cliente y el destino, la caducidad de la cookie y el tiempo de persistencia no deben llegar a su fin.

Si se produce un error en una instancia o esta pasa a encontrarse en mal estado, el equilibrador de carga deja de enrutar las solicitudes a esa instancia y elige una nueva en buen estado en función del algoritmo de equilibrio de carga existente. El equilibrador de carga trata la sesión como si estuviera "adherida" a la nueva instancia en buen estado y continúa direccionando las solicitudes a esa instancia aunque la instancia que sufrió el error vuelva a estar en buen estado.

En el caso de las solicitudes de intercambio de recursos entre orígenes (CORS), el equilibrador de carga añade los atributos SameSite=None; Secure a la cookie de la aplicación generada por el equilibrador de carga solo si la versión del agente de usuario es Chromium80 o superior.

Debido a que la mayoría de los navegadores limitan una cookie a 4 KB de tamaño, el equilibrador de carga fragmenta las cookies de más de 4 KB en varias cookies. Los equilibradores de carga de aplicaciones admiten cookies de hasta 16 KB y, por lo tanto, pueden crear hasta 4 particiones para enviarlos al cliente. El nombre de la cookie de la aplicación que ve el cliente comienza por «AWSALBAPP-» e incluye un número de fragmento. Por ejemplo, si el tamaño de la cookie es de 0 a 4 K, el cliente ve AWSALBAPP -0. Si el tamaño de la cookie es de 4 a 8 k, el cliente ve AWSALBAPP -0 y -1, y AWSALBAPP así sucesivamente.

Para habilitar las sesiones persistentes controladas por la aplicación desde la consola
  1. Abra la consola de Amazon EC2 en https://console.aws.amazon.com/ec2/.

  2. En el panel de navegación, en Load Balancing (Equilibración de carga), elija Target Groups (Grupos de destino).

  3. Elija el nombre del grupo de destino para mostrar sus detalles.

  4. En la pestaña Detalles del grupo, en la sección Atributos, seleccione Editar.

  5. En la página Edit attributes, lleve a cabo alguna de las siguientes operaciones:

    1. Seleccione Persistencia.

    2. Para el tipo de persistencia, seleccione Cookie en función de aplicaciones.

    3. Para Duración de la persistencia, especifique un valor comprendido entre 1 segundo y 7 días.

    4. En Nombre de la cookie de la aplicación, ingrese un nombre para la cookie en función de la aplicación.

      No utilice AWSALB, AWSALBAPP o AWSALBTG para el nombre de la cookie; están reservados para el uso del equilibrador de carga.

    5. Elija Guardar cambios.

Para habilitar las sesiones persistentes controladas por la aplicación desde la AWS CLI

Utilice el modify-target-group-attributescomando con los siguientes atributos:

  • stickiness.enabled

  • stickiness.type

  • stickiness.app_cookie.cookie_name

  • stickiness.app_cookie.duration_seconds

Use el siguiente comando para habilitar la persistencia en función de aplicaciones.

aws elbv2 modify-target-group-attributes --target-group-arn ARN --attributes Key=stickiness.enabled,Value=true Key=stickiness.type,Value=app_cookie Key=stickiness.app_cookie.cookie_name,Value=my-cookie-name Key=stickiness.app_cookie.duration_seconds,Value=time-in-seconds

El resultado debería ser similar al siguiente ejemplo.

{ "Attributes": [ ... { "Key": "stickiness.enabled", "Value": "true" }, { "Key": "stickiness.app_cookie.cookie_name", "Value": "MyCookie" }, { "Key": "stickiness.type", "Value": "app_cookie" }, { "Key": "stickiness.app_cookie.duration_seconds", "Value": "86500" }, ... ] }
Reequilibrado manual

Al escalar verticalmente, si el número de destinos aumenta considerablemente, existe la posibilidad de que la carga se distribuya de forma desigual debido a la persistencia. En este escenario, puede reequilibrar la carga sobre los destinos mediante las dos opciones siguientes:

  • Establezca un vencimiento en la cookie generada por la aplicación que sea anterior a la fecha y la hora en curso. Esto evitará que los clientes envíen la cookie al Equilibrador de carga de aplicación, lo que reiniciará el proceso de establecimiento de la persistencia.

  • Establezca una duración muy corta en la configuración de persistencia en función de aplicaciones del equilibrador de carga, por ejemplo, 1 segundo. Esto obliga al Equilibrador de carga de aplicación a restablecer la persistencia incluso si la cookie establecida por el destino no ha caducado.