2011-01-28 2 views
5

TCP로드 균형 조정을 위해 HAProxy를 시도하고 있습니다. 연결은 단일 IP에서 포트 X로 들어가고 HAProxy는 연결 수를 일정하게 유지하기 위해 "leastconn"균형 조정 방법을 사용하여 이러한 연결을 백엔드와 균형을 맞 춥니 다. 이것은 우분투 10.04 x64에 있습니다.HAProxy TCP 세션 수가 400에서 중지됩니다.

커널 설정에서 file-max를 700,000으로 나타 냈습니다. 나는 프로세스 당 ulimit을 약 400,000으로 올려 놓았다. 나는 200,000에 haproxy 윤곽에있는 maxconn를 돌았 다. 이 maxconn은 잘 보입니다.

show info 
Name: HAProxy 
Version: 1.3.22 
Release_date: 2009/10/14 
Nbproc: 1 
Process_num: 1 
Pid: 1355 
Uptime: 0d 4h38m46s 
Uptime_sec: 16726 
Memmax_MB: 0 
Ulimit-n: 400013 
Maxsock: 400013 
Maxconn: 200000 
Maxpipes: 0 
CurrConns: 1113 
PipesUsed: 0 
PipesFree: 0 
Tasks: 1113 
Run_queue: 1 
node: XXXXX 

이 프런트 엔드는 5 개의 백엔드 시스템에서로드 균형을 조정합니다. 그러나 백엔드 당 400 세션이되면 균형이 잡히지 않고 추가 연결이 지연됩니다. 나는 이것을 "smax"상태로 볼 수 있습니다. 각 세션의 최대 세션 수는 400이며 총 최대 세션 수는 2000입니다.

show stat 
# 
pxname,svname,qcur,qmax,scur,smax,slim,stot,bin,bout,dreq,dresp,ereq,econ,eresp,wretr,wredis,status,weight,act,bck,chkfail,chkdown,lastchg,downtime,qlimit,pid,iid,sid,throttle,lbtot,tracked,type,rate,rate_lim,rate_max, 
protoa,FRONTEND,,,958,2000,2000,12624,6230219,6445523,0,0,0,,,,,OPEN,,,,,,,,,1,1,0,,,,0,0,0,406, 
protoa,XXX1672,0,0,191,400,,3222,1249403,1286659,,0,,221,0,664,0,no check,1,1,0,,,,,,1,1,1,,2559,,2,0,,198, 
protoa,XXX1674,0,0,192,400,,3106,1242103,1289247,,0,,178,0,535,0,no check,1,1,0,,,,,,1,1,2,,2572,,2,0,,171, 
protoa,XXX1707,0,0,193,400,,3043,1266305,1305311,,0,,164,0,492,0,no check,1,1,0,,,,,,1,1,3,,2551,,2,0,,161, 
protoa,XXX1782,0,0,189,400,,3046,1236790,1282690,,0,,204,0,619,0,no check,1,1,0,,,,,,1,1,4,,2429,,2,0,,190, 
protoa,XXX1851,0,0,193,400,,3060,1235618,1281616,,0,,189,0,570,0,no check,1,1,0,,,,,,1,1,5,,2490,,2,0,,180, 
protoa,BACKEND,0,0,958,2000,2000,12624,6230219,6445523,0,0,,956,0,2880,0,UP,5,5,0,,0,17645,0,,1,1,0,,12601,,1,0,,406, 
protob,FRONTEND,,,4,6,2000,28,15204,15726,0,0,0,,,,,OPEN,,,,,,,,,1,2,0,,,,0,0,0,2, 
protob,XXX1672,0,0,2,2,,5,2313,2322,,0,,0,0,0,0,no check,1,1,0,,,,,,1,2,1,,5,,2,0,,1, 
protob,XXX1674,0,0,0,2,,5,3520,3803,,0,,0,0,0,0,no check,1,1,0,,,,,,1,2,2,,5,,2,0,,1, 
protob,XXX1707,0,0,0,2,,8,3303,3214,,0,,0,0,0,0,no check,1,1,0,,,,,,1,2,3,,8,,2,0,,1, 
protob,XXX1782,0,0,1,2,,5,3529,3745,,0,,0,0,0,0,no check,1,1,0,,,,,,1,2,4,,5,,2,0,,1, 
protob,XXX1851,0,0,1,1,,5,2539,2642,,0,,0,0,0,0,no check,1,1,0,,,,,,1,2,5,,5,,2,0,,1, 
protob,BACKEND,0,0,4,6,2000,28,15204,15726,0,0,,0,0,0,0,UP,5,5,0,,0,17645,0,,1,2,0,,28,,1,0,,2, 

이 제한은 어디에서 발생합니까? 나는이 haproxy 인스턴스에 수십만 건의 연결을 비좁게하고 싶습니다. (컴퓨터가 계속 네트워크, CPU 및 RAM을 가지고 있음)

답변

10

따라서 버전 1.3.x의 소스를 보면 알 수있는 것은 다음과 같습니다. 두 개의 맥시마가 있습니다. 하나는 글로벌 max # connections이며, 명령 행에서 -n을, 글로벌 구성에서 maxconn으로 설정합니다. 다른 하나는 프록시 별 최대 # 연결이며, 명령 줄에서 -N으로 설정하거나 구성에서 프록시별로 구성합니다. 특히, 명령 줄이 아닌 프록시 당 기본 최대 # 연결을 구성 할 수 없습니다! 기본값은 ... 기다려 ... 2000! 내 /etc/haproxy/haproxy.cfg 파일의 "수신 대기"섹션 각각에 "maxconn 200000"을 추가하면이 문제가 해결됩니다.

문서가 꽤 좋음에도 불구하고, 설명을 잘 해내 지 못했습니다. 특히, 설명서를 읽는 것으로부터, 나는 글로벌 maxconn이 각 프록시에도 적용될 것이라고 생각했지만 그렇게하지는 않을 것이라고 생각했다. 전체 maxconn은 이고 총 연결 수는이지만 지정된 프록시 프런트 엔드에 대한 로컬 최대 연결 수는 명시 적으로 지정되어야합니다.

+1

나는 당신의 대답이 약간 혼란 스럽다고 생각합니다. "명령 줄 이외의 다른 프록시마다 기본 최대 연결 수를 구성 할 수 없습니다."또한 .cfg의 '수신 대기'섹션 각각에 'maxconn 200000'을 추가하면 문제가 해결된다는 것을 모순되는 것처럼 보입니다. . –

+0

"프록시"와 "수신 대기"가 다릅니다. 최대 두 가지가 있습니다. 그것이 혼란의 원인이었습니다. –

관련 문제