Drupal 7 + AWS aws балансировщик нагрузки с несколькими экземплярами файлов временных папок EC2 + отсутствует - PullRequest
0 голосов
/ 05 мая 2018

Я использую сервисы AWS EC2 с балансировщиком нагрузки Elastic. Когда я пытаюсь загрузить несколько изображений с помощью plupload, возвращается ошибка:

Указанный файл временный: //p1ccn4f5o41dmh1qvmefo1ohv1dq15.tmp не может быть скопирован, поскольку файл с таким именем не существует. Пожалуйста, убедитесь, что вы указали правильное имя файла. Сайт обнаружил непредвиденную ошибку. Пожалуйста, попробуйте позже.

Я использую 2 сервера EC2 параллельно для своего сайта Drupal и при загрузке AWS создаю новый экземпляр 2 EC2. поэтому, когда сайт работает в полной нагрузке, на нем запущено 4 сервера EC2.

Эта проблема возникает, только когда запущено 2 или более экземпляра Ec2 и папка tmp работает нормально с одним сервером EC2.

Как настроить tmp для веб-сайта с несколькими экземплярами?

Информация из комментария OP:
Я использую ELB с strike $ _SESSION для поддержания пользовательского соединения с конкретным экземпляром EC2.

1 Ответ

0 голосов
/ 19 июня 2018

Я исследовал несколько документов для сервисов 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"
                ]
            },
            ...
        }
    ]
}
...