쿠키를 통해로드 밸런싱하는 시스템이 있지만 대안으로 URL 매개 변수를 사용하고 싶습니다. (특히 쿠키를 지원하지 않는 프런트 엔드 앱이 있습니다). 설정이 약간 복잡합니다. 멀티 플레이어 시스템이 있고이 쿠키와 함께 스틱 테이블을 사용하여 같은 게임을하는 다른 사람들이 같은 서버로 이동하도록합니다. URL 매개 변수가 아무것도하지 않는 것 외에는 훌륭합니다. 이것은 haproxy 1.5dev17입니다.
내 관련 백엔드는 다음과 같습니다.
defaults
log global
mode http
option httplog
option dontlognull
retries 3
option redispatch
option http-server-close
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000
backend simulate
option httpchk OPTIONS /simulate/api/status
stick-table type string len 40 size 5M expire 30m
stick store-response set-cookie(SIMULATE_STICKY_SESSION) table simulate
stick on cookie(SIMULATE_STICKY_SESSION) table simulate
stick on url_param(SIMULATE_STICKY_SESSION) table simulate
server app1 10.0.2.11:8080 cookie app1 check inter 10000
server app2 10.0.3.11:8080 cookie app2 check inter 10000
SIMULATE_STICKY_SESSION은 내 앱 (플레이어 팀 기반)에 의해 생성됩니다.
URL을 호출 할 때 jsessionid를 전달해야합니다 (Tomcat이 올바른 세션을 찾을 수 있도록). 그래서 나는하고있다
이것은 잘못된 세션 매개 변수를 잘못된 서버로 이동하는 시간의 50 %로 선택하지 않는 것 같습니다. 매개 변수를 쿼리 문자열로 사용하려고 시도했지만 (? 표시 뒤) 작동하지 않습니다. 내가 무엇을 잘못하고 있지?
답변
여기에 haproxy 메일 링리스트에 응답이 있습니다.
발췌
구성에서 아래 행을 간단히 업데이트하십시오.
stick on url_param(SIMULATE_STICKY_SESSION,;) table simulate
기본적으로 url_param은 물음표 (?) 다음에있는 매개 변수를 검색합니다. 위의 구성은 세미콜론 (;)에서 쿠키를 찾아서 덮어 씁니다.
참고 : 최근 1.5dev haproxy, 바람직하게는 dev 18을 실행해야합니다.