haproxy : 앱 세션을 시작하지 않고 서버 유지 관리를 준비하는 방법? 파일을 사용하고 서버간에 동기화되지 않으므로

문제

웹 서버의로드 밸런싱을 위해 haproxy를 사용하고 있습니다. 일부 응용 프로그램은 세션 파일을 사용하고 서버간에 동기화되지 않으므로 추가 쿠키와 함께 세션 지속성을 사용합니다.

유지 관리를 위해 서버를 비활성화하고 싶지만 세션을 중단하지 않습니다. 따라서 기존 클라이언트가 응용 프로그램 세션을 계속하도록 허용하고 싶지만 새 클라이언트는 허용하지 않습니다.

haproxy 행동

  • 서버를 “유지 보수”로 설정했습니다
  • 클라이언트에 쿠키가 설정되어 있으면 “유지 보수”로 표시되어 있어도 서버를 사용하십시오
  • 쿠키가없는 새 클라이언트가 오면 다른 서버로 연결됩니다
  • 모든 클라이언트가 응용 프로그램 세션을 종료하면 더 이상 클라이언트가이 특정 서버에 쿠키를 설정하지 않게되므로 사용자 중단없이 쿠키를 종료하는 것이 좋습니다.

일부 haproxy 구성으로 이것이 가능하다고 생각하십니까? 아니면 그것을 할 수있는 영리한 방법이 있습니까?

다른 방법들

이 요구를 달성하기위한 다른 방법의 전체 목록 :

  • 서버 간 세션 파일 동기화 (여러 서버 또는 공통 단일 마운트 지점간에 파일을 동기화하는 방법 필요)
  • 데이터베이스를 사용하여 세션 정보 저장 (응용 프로그램 동작 변경 필요)

자세한 내용은

이런 종류의 구성을 사용합니다.

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 “세션”이 끝난 후 중단 될 것으로 생각합니다. 맞습니까?



답변

웹 관리 인터페이스를 사용하여 서버를 드레인 모드로 설정하십시오. 그것은 당신이 찾고있는 정확한 기능을 제공합니다.


답변

socat 을 사용 하여 haproxy 구성과 통신하는 경우 서버를 다음과 같은 드레인 상태로 만들 수 있습니다.

echo "set server backend/serv state drain" | sudo socat stdio /etc/haproxy/haproxysock

더 많은 명령이 있습니다 ! 우분투에서 socat을 설치하려면이 답변으로 이동하십시오

haproxy 1.6.3 버전으로 테스트했습니다. 🙂


답변

다른 방법들

서버 간 세션 파일 동기화 (여러 서버 또는 공통 단일 마운트 지점간에 파일을 동기화하는 방법 필요)

백엔드 서버가 애플리케이션에 PHP를 사용하는 경우 Memcache를 사용하여 세션을 동기화 할 수 있습니다.

또한 Couchbase-Server즉시 memcache 복제를 수행 할 수 있습니다.
물론 세션 복제를 위해 couchbase-server를 사용하는 것은 과도합니다. 🙂


답변