Питання
Я використовую haproxy для завантаження балансових веб-серверів. Я використовую стійкість сеансу з додатковими файлами cookie, оскільки деякі програми використовують файли сеансу, і вони не синхронізуються між серверами.
Я хочу відключити сервер для обслуговування, але не порушуючи сеанси. Тому я хотів би дозволити існуючим клієнтам продовжувати свою сесію заявок, але не приймати нових клієнтів.
поведінка хапрокси
- Я встановив сервер на "перехід до обслуговування"
- якщо клієнт має набір файлів cookie, використовуйте сервер, навіть якщо він позначений як "йде в технічне обслуговування"
- якщо приходить новий клієнт (без cookie), він спрямовується на інший сервер
- після того, як всі клієнти закінчать свої сеанси застосування, більше жоден клієнт не встановить файли cookie на цей конкретний сервер, і я б радив закрити його без зривів користувача.
Як ви вважаєте, це досяжно за допомогою певної конфігурації гапрокси? Або є розумний спосіб це зробити?
Інші способи
Невичерпний перелік інших способів досягнення цієї потреби:
- синхронізувати файли сеансу між серверами (потрібен спосіб синхронізації файлів між декількома серверами або спільна одна точка монтування)
- використовувати базу даних для зберігання інформації про сеанси (потрібно змінити поведінку програми)
Детальніше
Я використовую такий тип конфігурації:
frontend https-in
bind xxx.xxx.xxx.xxx:443 ssl crt /etc/haproxy/ssl/_default.pem crt /etc/haproxy/ssl
reqadd X-Forwarded-Proto:\ https
acl APP1 hdr(host) -i APP1.atac.local
use_backend APP1 if APP1
default_backend _default
backend APP1
redirect scheme https if !{ ssl_fc }
mode http
balance roundrobin
cookie HAPROXY_SESSION insert indirect
option httpchk HEAD /haproxy_test_page.php HTTP/1.0\nUser-Agent:\ HAProxy
server SRV1 SRV1_IP:PORT cookie SRV1 check
server SRV2 SRV2_IP:PORT cookie SRV2 check
Якщо я просто відключу SRV1 (з командою haproxy cli), я думаю, що всі сесії програми, відкриті на SRV1, розірвуться після закінчення поточного HTTP-сеансу. Це так?