【问题标题】:HAProxy TCP session count stops at 400HAProxy TCP 会话计数停止在 400
【发布时间】:2011-06-16 23:37:51
【问题描述】:

我正在尝试使用 HAProxy 进行 TCP 负载平衡。连接进入单个 IP 上的端口 X,然后 HAProxy 使用“leastconn”平衡方法将这些连接平衡到后端,以保持连接数量均匀。这是在 Ubuntu 10.04 x64 上。

我已将内核配置中的 file-max 设置为 700,000。我已将每个进程的 ulimit 提高到大约 400,000。我已经将 haproxy 配置中的 maxconn 设置为 200,000。它报告看到这个 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要跟上)

【问题讨论】:

    标签: linux proxy tcp scalability haproxy


    【解决方案1】:

    所以,阅读 1.3.x 版本的源代码,我发现: 有两个最大值。 一种是全局最大连接数,在命令行中使用 -n 设置,在全局配置中使用 maxconn 设置。 另一个是每个代理的最大连接数,在命令行中使用 -N 设置,或者在配置中为每个代理配置。 具体来说,除了命令行之外,您无法配置每个代理的默认最大连接数! 默认是……等等……2000! 因此,在我的 /etc/haproxy/haproxy.cfg 文件中的每个“侦听”部分添加“maxconn 200000”即可解决此问题。

    请注意,尽管文档非常好,但它并没有很好地解释这一点。具体来说,通过阅读文档,我认为全局 maxconn 也将应用于每个代理,但并非如此。对于总连接数强制全局 maxconn,但必须明确指定给定代理前端的本地最大连接数。

    【讨论】:

    • 我认为您的回答有点令人困惑。您是说“除了从命令行之外,您无法配置每个代理的默认最大连接数”,并且“在 .cfg 中的每个 'listen' 部分添加 'maxconn 200000' 可以解决问题”,这似乎是矛盾的.
    • “代理”和“监听”是不同的。有两个不同的最大值。这就是混乱的全部根源。
    猜你喜欢
    • 2019-11-24
    • 2016-12-07
    • 2012-04-26
    • 2015-05-19
    • 2012-04-17
    • 2015-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多