Наше приложение требует фиксированных сеансов на основе файлов cookie, поэтому мы хотим использовать HAproxy для балансировки входящего трафика на ферму серверов IIS.
Мы используем следующую конфигурацию, которая, кажется, работает в лаборатории (циклический перебор работает нормально и сеанс сохраняется), но терпит неудачу при применении в производстве с более чем 3 тыс. одновременных пользователей:
интерфейс Front_http
bind :80
mode http
default_backend backend_http
stats enable
capture cookie ASP.NET_SessionId len 32
maxconn 10000
интерфейс Front_https
mode http
default_backend backend_https
bind *:443 ssl crt /etc/haproxy/cert.pem
capture cookie ASP.NET_SessionId len 32
maxconn 10000
серверная часть backend_http
balance roundrobin
option forwardfor
stick-table type ip size 20k expire 5m
appsession ASP.NET_SessionId len 64 timeout 5m request-learn prefix
server Server_1 192.168.10.81:80 cookie Server_1
server Server_2 192.168.10.81:80 cookie Server_2
server Server_3 192.168.10.81:80 cookie Server_3
серверная часть backend_https
balance roundrobin
option forwardfor
stick-table type ip size 20k expire 5m
appsession ASP.NET_SessionId len 64 timeout 5m request-learn prefix
server Server_1 192.168.10.81:80 cookie Server_1 ssl verify none
server Server_2 192.168.10.81:80 cookie Server_2 ssl verify none
server Server_3 192.168.10.81:80 cookie Server_3 ssl verify none
http-request set-header X-Forwarded-Port %[dst_port]
http-request add-header X-Forwarded-Proto https if { ssl_fc }
Из документации HAProxy 1.5.8 я понимаю, что прилипание на основе файлов cookie достигается с помощью команды «appsession», но я не понимаю, какую роль играют другие команды, такие как «захват файла cookie» или «придерживаться таблица», нужны ли они вообще, когда с помощью приложения? Может ли кто-нибудь помочь мне понять, как они работают, и посоветовать, если вы обнаружите что-то не так с нашей конфигурацией.