2014-09-29 8 views
1

나는 그 기능에 대한 TCP keep-alive 동작에 의존하는 TCP 기반 응용 프로그램을 가지고 있습니다. haproxy를 사용하여이 애플리케이션의 프록시 및로드 밸런스를 수행하고 싶습니다.haproxy에서 TCP_KEEPCNT 기능을 지원합니까?

TCP keepalive 동작에 대한 응용 프로그램의 의존성을 제외하고는 모두 haproxy를 사용하여 문제가없는 것처럼 보입니다. 응용 프로그램은 TCP_KEEPCNT 소켓 옵션에 따라 특정 수의 연결 유지가 응답되지 않은 경우 연결을 닫습니다. 이 기능을 haproxy에서 사용할 수 없기 때문에 연결 상태에 대한 응용 프로그램의 기능이 잘못되었습니다.

haproxy를 사용하면 연결의 TCP_KEEPCNT 설정에 영향을 주거나 TCP_KEEPIDLE 및 TCP_KEEPINTVL과 같은 관련 옵션을 사용할 수 있습니까? 감사!

답변

1

당신은 다음과 같은 옵션을 사용하여 HAProxy에서 TCP의 킵 얼라이브 패키지의 송신을 활성화 할 수 있습니다

  • option clitcpka -하여 클라이언트와 HAProxy 사이의 킵 얼라이브 패키지 전송을 실행을, 프론트 엔드
  • option srvtcpka에 사용되는 - haproxy와 백엔드 서버간에 keepalive 패키지를 전송하여 백엔드에서 사용하도록합니다.

keepalive 패키지를 끝까지 보낼 수는 없습니다. fr 백엔드 서버를 클라이언트에 연결합니다. 이것은 HAProxy가 항상 두 개의 독립적 인 TCP 연결을 가지고 있기 때문입니다 : 하나는 클라이언트와 HAProxy 사이에, 다른 하나는 HAProxy와 서버 사이에 있습니다. keepalive 패키지는 응용 프로그램에 도달하지는 않지만 TCP 스택 (및 커널)에 의해 완전히 처리되므로 응용 프로그램에서 전달할 수 없습니다.

+0

그러나 나는 그것이 사용 가능 해지면 keepalives의 동작을 제어 할 수 있다는 것에 관심이 있습니다. – zdv

0

option clitcpka 또는 option srvtcpka 또는 option tcpka으로 비활성화 된 연결은 haproxy가 아닌 OS에서 감지하고 종료합니다. haproxy 1.5.x에서 튜닝 할 방법이 없습니다.

sysctl net.ipv4.tcp_keepalive_time=110 # if no data sent for 110 seconds, enable KA, then immediately send the first KA, don't kill connection yet 
sysctl net.ipv4.tcp_keepalive_intvl=30 # wait for 30 seconds after each KA, once they're enabled 
sysctl net.ipv4.tcp_keepalive_probes=3 # send 3 KAs unacknowledged, then kill the TCP connection 

패킷이 중단되면 OS 설정이 총 200 초 후에 연결을 종료합니다.

관련 문제