2011-01-28 5 views
5

Estoy intentando HAProxy para el equilibrio de carga TCP. Las conexiones entran en el puerto X en una sola IP, y HAProxy luego equilibra estas conexiones con un back-end usando el método de equilibrio "mínimo" para mantener el número de conexiones parejo. Esto está en Ubuntu 10.04 x64.El recuento de sesiones de HAProxy TCP se detiene en 400

He encontrado File-Max en la configuración del núcleo a 700,000. Elegí el ulimit por proceso a alrededor de 400,000. He convertido maxconn en la configuración de haproxy en 200,000. Informa haber visto esta multa de 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 

Este front-end carga-equilibra en 5 sistemas back-end. Sin embargo, cuando llega a 400 sesiones por back-end, simplemente deja de equilibrar, y simplemente pospone las conexiones adicionales. Puedo ver esto con la estadística "smax". Usted notará que el número máximo de sesiones de cada uno es de 400, y el número máximo total de sesiones es de 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, 

Dónde está esta limitación viene? Realmente quiero obstaculizar cientos de miles de conexiones en esta instancia de haproxy. (La máquina tiene red, CPU y RAM para mantenerse al día)

Respuesta

10

Por lo tanto, leyendo la fuente de la versión 1.3.x, descubro que: Hay dos máximos. Una es la conexión global max #, configurada con -n en la línea de comando y maxconn en la configuración global. La otra son las conexiones max por número de proxy, establecidas con -N en la línea de comando o configuradas por proxy en la configuración. Específicamente, no puede configurar las conexiones máximas # predeterminadas por proxy que no sean desde la línea de comandos. El valor predeterminado es ... espere ... ¡2000! Así que agregar un "maxconn 200000" a cada una de las secciones de "escucha" en mi archivo /etc/haproxy/haproxy.cfg resuelve este problema.

Tenga en cuenta que, a pesar de que la documentación es bastante buena, no hizo un buen trabajo explicando esto. Específicamente, al leer la documentación, pensé que el maxconn global también se aplicaría a cada proxy, pero no es así. El maxconn global es forzado para el número total de conexiones, pero el número máximo local de conexiones para un servidor proxy dado debe especificarse explícitamente.

+1

Creo que tu respuesta es un poco confusa. Usted está diciendo "no puede configurar las conexiones máximas # predeterminadas por proxy que no sea desde la línea de comandos" y también que "agregar un 'maxconn 200000' a cada una de las secciones 'escuchar' en .cfg resuelve el problema", lo que parece contradictorio . –

+0

"Proxy" y "escuchar" son diferentes. Hay dos máximos diferentes. Esa fue toda la fuente de la confusión. –

Cuestiones relacionadas