Articles of haproxy

HAProxy统计套接字 – 不正确的值

我的一个HAProxy监控脚本不适用于新安装的HAProxy盒子。 我已经追踪到问题的统计套接字的输出,而不是脚本本身。 我得到的值是通过套接字报告“0”,但从web界面正确的值。 任何人都可以解释输出的差异吗? 从echo 'show stat' | nc -U /var/run/haproxy.socket的输出 echo 'show stat' | nc -U /var/run/haproxy.socket : 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,check_status,check_code,check_duration,hrsp_1xx,hrsp_2xx,hrsp_3xx,hrsp_4xx,hrsp_5xx,hrsp_other,hanafail,req_rate,req_rate_max,req_tot,cli_abrt,srv_abrt, haproxystats,FRONTEND,,,0,0,4096,0,0,0,0,0,0,,,,,OPEN,,,,,,,,,1,1,0,,,,0,0,0,0,,,,0,0,0,0,0,0,,0,0,0,,, haproxystats,BACKEND,0,0,0,0,4096,0,0,0,0,0,,0,0,0,0,UP,0,0,0,,0,155,0,,1,1,0,,0,,1,0,,0,,,,0,0,0,0,0,0,,,,,0,0, vip1,FRONTEND,,,0,0,4096,0,0,0,0,0,0,,,,,OPEN,,,,,,,,,1,2,0,,,,0,0,0,0,,,,0,0,0,0,0,0,,0,0,0,,, webservers,web1,0,0,0,0,,0,0,0,,0,,0,0,0,0,UP,1,1,0,0,0,155,0,,1,3,1,,0,,2,0,,0,L7OK,200,0,0,0,0,0,0,0,0,,,,0,0, webservers,web2,0,0,0,0,,0,0,0,,0,,0,0,0,0,UP,1,1,0,0,0,155,0,,1,3,2,,0,,2,0,,0,L7OK,200,0,0,0,0,0,0,0,0,,,,0,0, webservers,web3,0,0,0,0,,0,0,0,,0,,0,0,0,0,UP,1,1,0,0,0,155,0,,1,3,3,,0,,2,0,,0,L7OK,200,0,0,0,0,0,0,0,0,,,,0,0, webservers,web4,0,0,0,0,,0,0,0,,0,,0,0,0,0,UP,1,1,0,0,0,155,0,,1,3,4,,0,,2,0,,0,L7OK,200,1,0,0,0,0,0,0,0,,,,0,0, webservers,web5,0,0,0,0,,0,0,0,,0,,0,0,0,0,UP,1,1,0,0,0,155,0,,1,3,5,,0,,2,0,,0,L7OK,200,0,0,0,0,0,0,0,0,,,,0,0, webservers,web6,0,0,0,0,,0,0,0,,0,,0,0,0,0,UP,1,1,0,0,0,155,0,,1,3,6,,0,,2,0,,0,L7OK,200,0,0,0,0,0,0,0,0,,,,0,0, webservers,BACKEND,0,0,0,0,0,0,0,0,0,0,,0,0,0,0,UP,6,6,0,,0,155,0,,1,3,0,,0,,1,0,,0,,,,0,0,0,0,0,0,,,,,0,0, 来自同一服务器的web界面的CSV输出: 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,check_status,check_code,check_duration,hrsp_1xx,hrsp_2xx,hrsp_3xx,hrsp_4xx,hrsp_5xx,hrsp_other,hanafail,req_rate,req_rate_max,req_tot,cli_abrt,srv_abrt, haproxystats,FRONTEND,,,1,2,4096,309,186616,3323540,0,0,0,,,,,OPEN,,,,,,,,,1,1,0,,,,0,1,0,4,,,,0,225,0,0,83,0,,1,4,309,,, haproxystats,BACKEND,0,0,0,1,4096,83,186616,3323540,0,0,,83,0,0,0,UP,0,0,0,,0,231,0,,1,1,0,,0,,1,1,,2,,,,0,0,0,0,83,0,,,,,0,0, vip1,FRONTEND,,,6,11,4096,20,45181,1069426,0,0,0,,,,,OPEN,,,,,,,,,1,2,0,,,,0,0,0,7,,,,0,69,3,4,0,0,,0,30,76,,, webservers,web1,0,0,0,2,,13,7445,243262,,0,,0,0,0,0,UP,1,1,0,0,0,231,0,,1,3,1,,13,,2,0,,5,L7OK,200,1,0,12,1,0,0,0,0,,,,0,0, webservers,web2,0,0,0,1,,13,7445,127627,,0,,0,0,0,0,UP,1,1,0,0,0,231,0,,1,3,2,,13,,2,0,,5,L7OK,200,0,0,12,0,1,0,0,0,,,,0,0, webservers,web3,0,0,0,1,,13,7570,81039,,0,,0,0,0,0,UP,1,1,0,0,0,231,0,,1,3,3,,13,,2,0,,5,L7OK,200,0,0,13,0,0,0,0,0,,,,0,0, webservers,web4,0,0,0,1,,13,8053,182209,,0,,0,0,0,0,UP,1,1,0,0,0,231,0,,1,3,4,,13,,2,0,,5,L7OK,200,1,0,11,1,1,0,0,0,,,,0,0, webservers,web5,0,0,0,2,,12,7288,230933,,0,,0,0,0,0,UP,1,1,0,0,0,231,0,,1,3,5,,12,,2,0,,5,L7OK,200,1,0,11,0,1,0,0,0,,,,0,0, webservers,web6,0,0,0,1,,12,7380,204356,,0,,0,0,0,0,UP,1,1,0,0,0,231,0,,1,3,6,,12,,2,0,,5,L7OK,200,1,0,10,1,1,0,0,0,,,,0,0, webservers,BACKEND,0,0,0,6,0,76,45181,1069426,0,0,,0,0,0,0,UP,6,6,0,,0,231,0,,1,3,0,,76,,1,0,,30,,,,0,69,3,4,0,0,,,,,0,0, 版本信息: [root@haproxy ~]# haproxy -v HA-Proxy version 1.4.19 2012/01/07 相关configuration施加: global log 127.0.0.1 […]

haproxy maxconn和cookie会话

我有haproxy负载均衡下的任何实例。 我正在使用haproxy cookies来使每个客户端连接到同一台服务器,整个会话。 现在的事情是,我想将haproxy中的maxconnvariables设置为我的服务器可以处理的极限,即1000。 但是,我想确保,如果达到这个限制,它只适用于新的连接,而不适用于已经login系统的人。 这是它的工作方式? 如果没有,我怎么能做到这一点?

看起来是在acl匹配的后端和默认的后端之间“随机”切换

我有HAProxy作为代理前面的: 一个NGinx实例 在由socket.io(websockets)公开的多个dynamic服务之前的内部负载平衡器 我的问题是,我的连接不时被正确地代理到我的socket.io集群,然后随机地回退到NGinx,这显然是令人讨厌和毫无意义的,因为NGinx并不是要处理这个请求。 在请求格式的URL时会发生这种情况: http://mydomain.com/backends/* 在HAProxyconfiguration中有一个ACL来匹配'/ backends / *'path。 这里是我的HAProxyconfiguration的简化版本(删除额外无关的条目和更改的名称): global daemon maxconn 4096 user haproxy group haproxy nbproc 4 defaults mode http timeout server 86400000 timeout connect 5000 log global #this frontend interface receives the incoming http requests frontend http-in mode http #process all requests made on port 80 bind *:80 #set a […]

针对混合tcp,udp和http服务的反向代理

我正在构build一个架构,将托pipe各种服务,可以单独监听不同数量的可能是混合协议的端口。 我想将这些服务映射到唯一的子域,并将外部端口的代理入站请求反向到相应的内部端口。 目前我正在使用安装了TCP模块的Nginx。 这给了我http和tcp的支持。 不过我刚刚发现Nginx不支持UDP。 这似乎也许与我可以支持UDP的自定义模块,但这是一个单独的问题。 我也有使用Nginx模块将多个TCP服务映射到子域的问题。 我希望有另一个代理解决scheme,可能更适合这个。 或者是工具的组合。 编辑:我发现唯一可能适合这个angular色是: http : //freecode.com/projects/proxymini http://aluigi.altervista.org/mytoolz.htm#proxymini 但我不能告诉它的unix友好或仅窗口,可能不是一个反向代理

haproxy转发到另一台服务器的根

我使用HAPROXY容器作为虚拟HPC群集的入口点。 根据前缀,请求被转发到不同的容器。 :80 / foswiki / – >:80 / foswiki / :80 / kibana / – >:80 / kibana / :80 / graphite-api / – >:80 / graphite-api / … 我使用的configuration非常简单: 前端http-in 绑定*:80 acl uri_foswiki path_beg / foswiki use_backend srv_foswiki if uri_foswiki #gitlab default_backend srv_gitlab 后端srv_foswiki 平衡roundrobin cookie SERVERID插入 选项httpclose 选项forwardfor 服务器foswiki 172.17.0.3:80 cookie 问题是有没有前缀直接作为根服务的网站服务器。 […]

haproxy:显式设置前端或后端部分中的gpc0值

我在我的haproxyconfiguration中有这样的东西 backend myservice option httplog stick-table type string size 10 expire 10m store gpc0 stick store-request req.hdr(MYHDR) server server1 127.0.0.1:9494 check inter 1s rise 1 fall 1 我只是用上面的例子。 由于粘贴表由一个键索引, 在这种情况下,它是请求标题MYHDR。 gpc0计数器能够保持一些值。 我可以通过使用UDS套接字和socat从外部设置值。 set table name-of-the-table key <MYHDR> data.gpc0 <someval> 但是,我不知道如何设置haproxyconfiguration内的gpc0的值。 我想到的是这样的: 对于一个请求,使用stick-table作为通用散列表,存储key = req.hdr(MYHDR),value = src(或者其他一些东西) 稍后我将使用密钥的值为无关的请求做出路由决策。 我找不到用这种方式使用粘贴表的方法。 有什么我错过了吗? 在任何情况下,在haproxyconfiguration中提供set-gpc0方法是否有意义? 有办法增加和清除,但没有设置一个具体的价值。 我意识到gpc中的c代表计数器,我并没有将它完全用作计数器,而是将其视为初始化计数器到特定值,而不是从0开始。

高stream量服务器上的间歇性连接问题

一些简要的背景:我们已经从我们的用户那里得到非常间歇性的连接问题的报告。 由于连接失败或SSL握手问题(我认为这是由于连接问题),用户每天会多次重新加载他们所在的页面。 发生得如此之快,以至于我无法在这些事件中收集任何数据。 它往往会自行消失,只能在晚些时候再回来,通常是在高峰时段。 关于我们的设置一点点:我们有三个虚拟IP在循环DNS中,由Keepalivedpipe理我们的应用服务器池。 nginx正在接受SSL连接,这些连接会上传到haproxy以分发到其他应用程序服务器。 由于这些问题已经出现,我已经更新了服务器上的所有软件(包括从CentOS5到CentOS6),这并没有帮助。 我已经在这里发布了关于我们的nginxconfiguration,这似乎是好的。 它主要基于Mozilla的nginxconfiguration生成器来实现SSL最佳实践。 我被build议注意TCP统计数据。 但是,我不太清楚如何解释这些。 这是我从昨天重新启动的应用程序服务器上的netstat -s的输出(大概是昨天的计数器为0): Ip: 1021579809 total packets received 4875 forwarded 0 incoming packets discarded 1021562810 incoming packets delivered 1033056732 requests sent out 1 outgoing packets dropped 76648 dropped because of missing route 2 fragments dropped after timeout 7072 reassemblies required 2020 packets reassembled ok 2 […]

HAProxy返回错误的请求(无效的主机)看似没有理由

我一直在试图testing一个看起来像这样的设置: 网站:Http GET请求 – > Nginx – > HAProxy – > .Net应用程序 我把Nginx和HAProxy放在同一个Debian机器上。 但是,HAProxy经常返回“错误请求(无效主机)”。 我已经确定HAProxy是错误的,首先直接从网站发送请求到.Net应用程序,它的工作。 让Nginx链接到.Net应用程序也可以。 但是,当我尝试使用HAProxy来testing时,我开始出现错误。 .Net应用程序是否实际上在HAProxy后面运行并不重要,我总是得到错误。 我试图发送的消息的一个例子是http://192.168.7.119:81/a:diff1 。 预期的答复是一个JPG图像。 当发送给除HAProxy(Apache,Nginx,应用程序)以外的其他任何东西时,这似乎工作正常,但HAProxy只是说“错误的请求”。 奇怪的是,我没有看到我的日志文件中的任何错误。 以下是日志文件的一个例子: Feb 2 15:10:08 companyDebian haproxy[5566]: 192.168.7.114:51105 [02/Feb/2015:15:10:08.415] renderfarm renderfarm/renderA 0/0/0/1/1 400 212 – – —- 1/1/0/1/0 0/0 "GET /a:diff1 HTTP/1.1" Feb 2 15:10:08 companyDebian haproxy[5566]: 192.168.7.114:51105 [02/Feb/2015:15:10:08.417] renderfarm renderfarm/renderA 73/0/0/4/77 400 […]

haproxy处理客户端证书身份validation的程度如何?

由于这是一个关于安全问题的基于性能的问题,信息安全部门的一些人build议我在这里发帖: 我的物联网公司希望使用客户端证书身份validation来保护每个“事物”和中央服务器之间的通信。 我们每年部署大约3万个事物,而且他们有大约5年的生命周期,所以我们的服务器端解决scheme保守地需要能够一次支持150到200K个证书。 从阅读和提出其他问题来看,似乎最好的解决scheme是EJBCA ,这看起来很好,但我也看到haproxy(理论上)也有能力做到这一点。 我的问题是 :haproxy如何扩展以处理大量的客户端证书和连接?

haproxy做多个检查并使用不同的端口

目前我正在使用HAproxy来检查一个SMTP服务器与以下内容: option tcp-check tcp-check expect rstring ^220 tcp-check send QUIT\r\n tcp-check expect rstring ^221 但是,是否也可以添加另一个检查相同的服务? 这其他检查将在端口80上,并且是一个简单的检查,看看IPHERE:80 / mhtest是否会返回string“GOOD” 如果任何一个检查返回一个错误,我希望我的服务改变到我有的备份 server node1 192.168.0.1:25 check-send-proxy check inter 15s send-proxy server node2 192.168.0.2:25 check-send-proxy check inter 15s send-proxy backup