У нас есть HAProxy перед парой серверов API. В настоящее время используется appsession
потому что многие клиенты API не будут поддерживать куки - это бремя, которое мы не хотим перекладывать на наших пользователей.
Проблема, с которой мы сталкиваемся, заключается в том, что как только клиент входит в систему, он должен оставаться на этом конкретном сервере API из-за соединений, которые серверы API устанавливают с другими службами от имени клиента. К сожалению, идентификатор сеанса не существует до тех пор, пока не будет сделан первый запрос на вход, поэтому следующий запрос, сделанный с идентификатором сеанса, обычно отправляется на противоположный сервер и остается там.
Вот наша конфигурация бэкенда:
backend api
mode http
option httplog
option httpclose
option httpchk HEAD /index.html
cookie apibalance insert indirect nocache
appsession sessionId len 36 timeout 360s request-learn mode query-string
server api01 api01.hostname:8080 cookie api1 check weight 30 inter 10000 downinter 20000
server api02 api01.hostname:8080 cookie api2 check weight 30 inter 10000 downinter 20000
В cookie apibalance
осталось от того, как мы что-то делали, но я полагаю, что мы, вероятно, можем удалить его сейчас.
Есть ли способ сообщить HAProxy, возможно, через ответ, что будущие запросы, сделанные с sessionId
внутри строки запроса должен придерживаться текущего сервера? Идентификатор сеанса создается на стороне сервера (сервер API) и возвращается в ответе JSON. Последовательные запросы будут отправляться с идентификатором сеанса в строке запроса.
Ответ, по крайней мере для меня, заключался в том, чтобы сделать привязку на основе IP.
balance source
И удалите конфигурацию на основе файлов cookie и приложений.