Configurar sessões persistentes para seu Classic Load Balancer - Elastic Load Balancing

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Configurar sessões persistentes para seu Classic Load Balancer

Por padrão, um Classic Load Balancer roteia cada solicitação de forma independente para a instância registrada com a menor carga. No entanto, você pode usar o recurso sticky session (também conhecida como afinidade de sessão), que permite que o load balancer vincule a sessão de um usuário a uma instância específica. Isso garante que todas as solicitações do usuário durante a sessão sejam enviadas para a mesma instância.

O segredo para o gerenciamento de sticky sessions é determinar por quanto tempo o load balancer deve rotear consistentemente a solicitação do usuário para a mesma instância. Se sua aplicação tiver seu próprio cookie de sessão, você pode configurar o Elastic Load Balancing de forma que o cookie da sessão acompanhe a duração especificada pelo cookie de sessão da aplicação. Se sua aplicação não tiver seu próprio cookie de sessão, você pode configurar o Elastic Load Balancing para criar um cookie de sessão ao especificar sua própria duração de persistência.

O Elastic Load Balancing cria um cookie, chamado AWSELB, que é usado para mapear a sessão para a instância.

Requisitos
  • Um HTTPS balanceador de cargaHTTP//.

  • Pelo menos uma instância íntegra em cada Zona de disponibilidade.

Compatibilidade
  • A propriedade RFC for the path de um cookie permite sublinhados. No entanto, o Elastic Load Balancing URI codifica caracteres de sublinhado %5F porque alguns navegadores, como o Internet Explorer 7, esperam que os sublinhados sejam codificados como. URI %5F Devido ao potencial de impactar os navegadores que estão funcionando atualmente, o Elastic Load Balancing continua URI codificando caracteres sublinhados. Por exemplo, se o cookie tiver a propriedade path=/my_path, o Elastic Load Balancing mudará essa propriedade na solicitação encaminhada para path=/my%5Fpath.

  • Você não pode definir o sinalizador secure ou o sinalizador HttpOnly nos cookies de perdurabilidade da sessão baseado na duração. No entanto, esses cookies não contêm dados confidenciais. Observe que, se você definir o secure sinalizador ou HttpOnly sinalizador em um cookie de aderência de sessão controlado pelo aplicativo, ele também será definido no cookie. AWSELB

  • Se você tiver um ponto-e-vírgula no final no campo Set-Cookie de um cookie do aplicativo, o load balancer ignorará o cookie.

Persistência da sessão com base na duração

O balanceador de carga usa um cookie especial, AWSELB, para rastrear a instância de cada solicitação para cada ouvinte. Quando o load balancer receber uma solicitação, ele primeiro verificará se esse cookie está presente na solicitação. Se estiver, a solicitação será enviada para a instância especificada no cookie. Se não houver um cookie, o load balancer selecionará uma instância com base no algoritmo de balanceamento de carga existente. Um cookie é inserido na resposta para vincular solicitações subsequentes do mesmo usuário para essa instância. A configuração da política de perdurabilidade define a expiração de um cookie, que estabelece a validade de cada cookie. O load balancer não atualiza o tempo de expiração do cookie e não verifica se o cookie expirou antes de usá-lo. Após um cookie expirar, a sessão não será mais sticky. O cliente deve remover o cookie do armazenamento de cookies após a expiração.

Com solicitações CORS (compartilhamento de recursos entre origens), alguns navegadores precisam ativar SameSite=None; Secure a aderência. Nesse caso, o Elastic Load Balancing cria um segundo cookie de aderência AWSELBCORS, que inclui as mesmas informações do cookie de aderência original mais esse atributo. SameSite Os clientes recebem ambos os cookies.

Se uma instância falhar ou ficar não deixar de ser íntegra, o load balancer interromperá as solicitações de roteamento para essa instância e escolherá uma nova instância íntegra com base no algoritmo de balanceamento de carga existente. A solicitação é roteada para a nova instância como se não houvesse cookie e a sessão não for mais perdurável.

Se um cliente mudar para um listener com uma porta de back-end diferente, a perdurabilidade será perdida.

Para habilitar sticky sessions com base na duração para um load balancer usando o console
  1. Abra o EC2 console da Amazon em https://console.aws.amazon.com/ec2/.

  2. No painel de navegação, em Load Balancing (Balanceamento de carga), escolha Load balancers (Balanceadores de carga).

  3. Escolha o nome do balanceador de carga para abrir sua página de detalhes.

  4. Na guia Receptores, escolha Gerenciar receptores.

  5. Na página Gerenciar receptores, localize o receptor a ser atualizado e escolha Editar em Durabilidade do cookie.

  6. No pop-up Editar configuração de aderência do cookie, selecione Gerado pelo balanceador de carga.

  7. (Opcional) Em Período de expiração, digite o período de expiração do cookie, em segundos. Se você não especificar um período de expiração, a sticky session durará por toda a sessão do navegador.

  8. Escolha Salvar alterações para fechar a janela pop-up.

  9. Escolha Salvar alterações para retornar à página de detalhes do balanceador de carga.

Para habilitar sticky sessions com base na duração para um load balancer usando a AWS CLI
  1. Use o comando create-lb-cookie-stickiness-policy a seguir para criar uma política de aderência de cookies gerada pelo balanceador de carga com um período de expiração de cookies de 60 segundos:

    aws elb create-lb-cookie-stickiness-policy --load-balancer-name my-loadbalancer --policy-name my-duration-cookie-policy --cookie-expiration-period 60
  2. Use o seguinte comando set-load-balancer-policies-of-listener para ativar a aderência da sessão para o balanceador de carga especificado:

    aws elb set-load-balancer-policies-of-listener --load-balancer-name my-loadbalancer --load-balancer-port 443 --policy-names my-duration-cookie-policy
    nota

    O comando set-load-balancer-policies-of-listener substitui o conjunto atual de políticas associado à porta especificada do load balancer. Sempre que você usar esse comando, especifique a opção --policy-names para listar todas as políticas a serem habilitadas.

  3. (Opcional) Use o describe-load-balancerscomando a seguir para verificar se a política está habilitada:

    aws elb describe-load-balancers --load-balancer-name my-loadbalancer

    A resposta inclui as informações a seguir, que mostram que a política está ativada para o listener na porta especificada:

    { "LoadBalancerDescriptions": [ { ... "ListenerDescriptions": [ { "Listener": { "InstancePort": 443, "SSLCertificateId": "arn:aws:iam::123456789012:server-certificate/my-server-certificate", "LoadBalancerPort": 443, "Protocol": "HTTPS", "InstanceProtocol": "HTTPS" }, "PolicyNames": [ "my-duration-cookie-policy", "ELBSecurityPolicy-TLS-1-2-2017-01" ] }, ... ], ... "Policies": { "LBCookieStickinessPolicies": [ { "PolicyName": "my-duration-cookie-policy", "CookieExpirationPeriod": 60 } ], "AppCookieStickinessPolicies": [], "OtherPolicies": [ "ELBSecurityPolicy-TLS-1-2-2017-01" ] }, ... } ] }

Persistência da sessão controlada pela aplicação

O load balancer usa um cookie especial para associar a sessão com a instância que lidou com a solicitação inicial, mas segue a vida do cookie do aplicativo especificado na configuração da política. O load balancer só inserirá um novo cookie de perdurabilidade se a resposta do aplicativo incluir um novo cookie do aplicativo. O cookie de perdurabilidade do load balancer não será atualizado com cada solicitação. Se o cookie for explicitamente removido ou expirar, a sessão deixará de ser perdurável até ser emitido um novo cookie do aplicativo.

Os seguintes atributos definidos por instâncias back-end são enviados para clientes no cookie: path, port, domain, secure, httponly, discard, max-age, expires, version, comment, commenturl e samesite.

Se uma instância falhar ou ficar não deixar de ser íntegra, o load balancer interromperá as solicitações de roteamento para essa instância e escolherá uma nova instância íntegra com base no algoritmo de balanceamento de carga existente. O load balancer trata a sessão agora como "grudada" à nova instância íntegra e continua a rotear solicitações para essa instância, mesmo se a instância falha retornar.

Para habilitar a perdurabilidade da sessão controlada por aplicativo usando o console
  1. Abra o EC2 console da Amazon em https://console.aws.amazon.com/ec2/.

  2. No painel de navegação, em Load Balancing (Balanceamento de carga), escolha Load balancers (Balanceadores de carga).

  3. Escolha o nome do balanceador de carga para abrir sua página de detalhes.

  4. Na guia Receptores, escolha Gerenciar receptores.

  5. Na página Gerenciar receptores, localize o receptor a ser atualizado e escolha Editar em Durabilidade do cookie.

  6. Selecione Gerado pela aplicação.

  7. Em Nome de cookie, digite o nome do cookie do aplicativo.

  8. Escolha Salvar alterações.

Para ativar a aderência da sessão controlada pelo aplicativo usando o AWS CLI
  1. Use o seguinte comando create-app-cookie-stickiness-policy para criar uma política de aderência de cookies gerada pelo aplicativo:

    aws elb create-app-cookie-stickiness-policy --load-balancer-name my-loadbalancer --policy-name my-app-cookie-policy --cookie-name my-app-cookie
  2. Use o seguinte comando set-load-balancer-policies-of-listener para ativar a aderência da sessão para um balanceador de carga:

    aws elb set-load-balancer-policies-of-listener --load-balancer-name my-loadbalancer --load-balancer-port 443 --policy-names my-app-cookie-policy
    nota

    O comando set-load-balancer-policies-of-listener substitui o conjunto atual de políticas associado à porta especificada do load balancer. Sempre que você usar esse comando, especifique a opção --policy-names para listar todas as políticas a serem habilitadas.

  3. (Opcional) Use o describe-load-balancerscomando a seguir para verificar se a política fixa está habilitada:

    aws elb describe-load-balancers --load-balancer-name my-loadbalancer
  4. A resposta inclui as informações a seguir, que mostram que a política está ativada para o listener na porta especificada:

    { "LoadBalancerDescriptions": [ { ... "ListenerDescriptions": [ { "Listener": { "InstancePort": 443, "SSLCertificateId": "arn:aws:iam::123456789012:server-certificate/my-server-certificate", "LoadBalancerPort": 443, "Protocol": "HTTPS", "InstanceProtocol": "HTTPS" }, "PolicyNames": [ "my-app-cookie-policy", "ELBSecurityPolicy-TLS-1-2-2017-01" ] }, { "Listener": { "InstancePort": 80, "LoadBalancerPort": 80, "Protocol": "TCP", "InstanceProtocol": "TCP" }, "PolicyNames": [] } ], ... "Policies": { "LBCookieStickinessPolicies": [], "AppCookieStickinessPolicies": [ { "PolicyName": "my-app-cookie-policy", "CookieName": "my-app-cookie" } ], "OtherPolicies": [ "ELBSecurityPolicy-TLS-1-2-2017-01" ] }, ... } ] }