由于 Perlbal 的内存使用问题,我们最近从 Perlbal 迁移到了 HAProxy。虽然最近我们遇到了一个我似乎无法解决的问题(这无济于事,因为我不熟悉 HAproxy 的无数配置选项)。
我们是一个媒体网站,流量很大 - 我们使用 HAProxy 将负载分散到我们的媒体服务器。启动 HAProxy 后,一切都很顺畅,工作正常 - 但大约 10-20 分钟后,速度开始变慢,媒体服务非常缓慢。我相当肯定这是 HAProxy 的问题,因为只需重新启动服务即可解决问题。
我使用的是相当普通的 HAProxy 配置,没有任何花哨的功能:
默认值 记录全局 模式 http 选项 httplog 选项 dontlognull 重试 3 选项重新分派 最大頻接2000 超时 5000 气候超时 50000 srvtimeout 50000 监听媒体 0.0.0.0:80 平衡循环赛 服务器 media_1 xxxx:8080 权重 1 maxconn 1024 检查 服务器 media_2 xxxx:8080 权重 1 maxconn 1024 检查
有人能解释一下这个问题是什么吗?
答案1
您的配置确实非常简单。我发现您没有“option httpclose”,而且“maxconn”非常低,也许您只是在高负载下耗尽了连接?您绝对应该启用此选项。您还应该通过在“listen”部分添加“stats uri /haproxy-stats”来启用统计页面。然后,您将浏览器连接到您网站上的该 URL,您将看到所有统计数据,包括并发连接数、每秒连接数、错误数等。这将对您大有帮助。
哦,这是哪个版本?1.3.16 有一个严重的错误,导致它在某些流量模式下消耗大量 CPU。您应该使用 1.3.18 或 1.3.15.X。
威利
答案2
由于它是随着时间的推移而发生的,因此它可能是某种资源枯竭。
您是否监控各种可用内存统计数据和处理器使用情况?
答案3
我想说,首先要做的是启用 HAProxy 统计页面,也许还要启用日志记录。
答案4
您的后端 Web 服务器也可能拒绝来自单个 IP 的过多连接。使用 HAProxy(不带 tproxy)时,请求会显示来自负载平衡节点。这可能会造成此类问题。