Я исследовал несколько документов для сервисов AWS и обнаружил, что нам нужно поддерживать пользовательское соединение с конкретным экземпляром EC2.
Классический балансировщик нагрузки направляет каждый запрос независимо к зарегистрированному экземпляру с наименьшей нагрузкой. Однако вы можете использовать функцию закрепления сеанса (также называемую привязкой сеанса), которая позволяет балансировщику нагрузки привязывать сеанс пользователя к конкретному экземпляру. Это гарантирует, что все запросы от пользователя во время сеанса отправляются одному и тому же экземпляру.
Управление сеансами между запросом пользователя и экземпляром EC2, нам нужно настроить Sticky Sessions.
Ключом к управлению липкими сеансами является определение того, как долго ваш балансировщик нагрузки должен последовательно направлять запрос пользователя в один и тот же экземпляр. Если ваше приложение имеет собственный cookie-файл сеанса, вы можете настроить Elastic Load Balancing так, чтобы cookie-файл сеанса соответствовал продолжительности, указанной в cookie-файле сеанса приложения. Если в вашем приложении нет собственного cookie-файла сеанса, вы можете настроить Elastic Load Balancing для создания cookie-файла сеанса, указав собственную продолжительность привязки.
Elastic Load Balancing создает файл cookie с именем AWSELB, который используется для сопоставления сеанса с экземпляром.
Use the following create-lb-cookie-stickiness-policy command to create a load balancer-generated cookie stickiness policy with a cookie expiration period of 60 seconds:
aws elb create-lb-cookie-stickiness-policy --load-balancer-name my-loadbalancer --policy-name my-duration-cookie-policy --cookie-expiration-period 60
Use the following set-load-balancer-policies-of-listener command to enable session stickiness for the specified load balancer:
aws elb set-load-balancer-policies-of-listener --load-balancer-name my-loadbalancer --load-balancer-port 443 --policy-names my-duration-cookie-policy
Note
The set-load-balancer-policies-of-listener command replaces the current set of policies associated with the specified load balancer port. Every time you use this command, specify the --policy-names option to list all policies to enable.
(Optional) Use the following describe-load-balancers command to verify that the policy is enabled:
aws elb describe-load-balancers --load-balancer-name my-loadbalancer
The response includes the following information, which shows that the policy is enabled for the listener on the specified port:
{
"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-2016-08"
]
},
...
],
...
"Policies": {
"LBCookieStickinessPolicies": [
{
"PolicyName": "my-duration-cookie-policy",
"CookieExpirationPeriod": 60
}
],
"AppCookieStickinessPolicies": [],
"OtherPolicies": [
"ELBSecurityPolicy-2016-08"
]
},
...
}
]
}