我的HAProxy 1.5负载均衡器偶尔会从后端节点中的任何一个获取504错误。 504错误只针对Woocommerce / checkout。 / checkout端点调用服务器端的支付网关,Woocommerce捕获付款状态并将用户redirect到感谢页面。 在Woocommercepipe理中,来自同一客户的重复订单。 我怀疑它可能是一个节点超时并将请求传递到下一个节点,而事务仍然在第一个节点挂起。 这是一个504错误的例子。 似乎有8分钟的等待期(16:51 – 16:43)。 Apr 1 16:43:47 LB1 haproxy[31955]: 115.66.152.19:28289 [01/Apr/2017:16:43:00.738] www-http m-backend/node2 46183/0/0/191/46374 200 1538 – – —- 2/2/0/0/0 0/0 {http://<clientDomain>/checkout/} "POST /checkout/?wc-ajax=checkout HTTP/1.1" Apr 1 16:52:05 LB1 haproxy[31955]: 115.66.152.19:11502 [01/Apr/2017:16:52:05.984] www-http m-backend/node2 0/0/0/5/5 200 202 – – —- 3/3/1/1/0 0/0 {http://<clientDomain>/checkout/} "GET /favicon.ico HTTP/1.1" […]
我们在HAProxy服务器后面有两个Redis服务器。 一台服务器是主设备,这是服务器,另一台服务器是从服务器。 如果主人失败,哨兵选举另一个服务器成为主人。 那部分工作正常。 棘手的是确保HAProxy从不允许stream量同时进入两台服务器。 我最初通过添加服务器的rise和fall参数来解决这个问题,如下所示: backend Backend:Redis bind-process 1 timeout server 3h timeout tunnel 3h option tcp-check tcp-check connect tcp-check send PING\r\n tcp-check expect string +PONG tcp-check send info\ replication\r\n tcp-check expect string role:master tcp-check send QUIT\r\n tcp-check expect string +OK server redis-01.vbox 10.10.0.10:6279 check inter 5s rise 5 fall 2 maxconn 600 weight […]
有人知道使用HAProxy的方法,一旦达到一定的最大数量的请求,将传入的请求添加到延迟,而不只是拒绝或发送状态码,实际上排队一个特定的IP地址的请求,如果不是太多,请允许数量已经减less了。 使用文档所有上述部分似乎可以独立,虽然组合似乎是一个问题。 我在前端有以下内容: #Add counter to ip in ratelimiting table tcp-request content track-sc0 src table ratelimiting # if alot of requests (more than 1000) – reject acl mark_alot_of_requests sc0_conn_rate(ratelimiting) gt 1000 tcp-request content reject if mark_alot_of_requests TRUE #If concurrent requests >= 100 from a single IP return 429 acl mark_too_many_requests sc0_conn_cur(ratelimiting) ge 100 use_backend 429_slow_down […]
我们的haproxy负载均衡器打开了数千个连接到其后端,即使其设置说每个服务器实例打开不超过10个连接(见下文)。 当我取消注释“选项HTTP服务器closures”的后端连接数量下降,但我想有保持活着的后端连接。 为什么maxconn不遵守http-keep-alive ? 我用ssvalidation打开的后端连接处于ESTABLISHED状态。 defaults log global mode http option http-keep-alive timeout http-keep-alive 60000 timeout connect 6000 timeout client 60000 timeout server 20000 frontend http_proxy bind *:80 default_backend backends backend backends option prefer-last-server # option http-server-close timeout http-keep-alive 1000 server s1 10.0.0.21:8080 maxconn 10 server s2 10.0.0.7:8080 maxconn 10 server s3 10.0.0.22:8080 maxconn 10 […]
我运行的是haproxy负载均衡器之后的第三方商业Web应用程序。 前一段时间,我开始看到http请求被重复,就像一个口吃 – 同样的请求会快速重复许多次,直到应用程序崩溃(因为会话机制无法应付)或拒绝服务攻击检测踢入和阻止IP。 networking服务器和负载均衡器都在虚拟机上; 负载均衡器运行在故障转移群集的一对redhat 6机器上,而后端是两台redhat 6机器。 重复似乎总是用于function而不是文件,通常不是来自会话中IP地址的第一个请求。 我看了很多可能性,几乎排除了这些可能性: 它似乎并不是恶意的,因为我们已经收到来自内部networking和外部IP(但不是来自本地子网)的这些重复请求。 从同一个IP地址开始,会话中的行为通常与普通stream量类似 – 而我们通过拒绝服务攻击检测来阻止合法stream量的可能性就是为什么我认为将其排除是非常重要的。 它似乎并不是错误版本的浏览器。 虽然我通过谷歌search发现,这可能会发生在旧版本的Safari,这些是主要的罪魁祸首,其他浏览器也出现在重复请求的日志文件。 这可能不是负载平衡器,因为重复的请求出现在haproxy日志中。 (我不完全确定这一点,因为我不知道何时在负载平衡过程中生成一个日志行)。 这不是虚拟基础架构,因为我们最近将服务从一个虚拟基础架构迁移到另一个虚拟基础架构,问题也一样。 第三方应用程序基本上是一个search工具,每天处理数千次search。 许多重复的请求是search请求,但是它们是非常小的百分比(大约每天一个),基本上相同的请求没有错误。 这也不是我们所在的客户邮件列表提出的问题,我们已经向卖方提及了这个问题,但是您不认为这是他们应用程序的错误。 如果有人想看,我可以提供日志logging,但是我不认为涉及的请求有什么特别之处,所以我认为这不太可能有帮助。 任何build议的原因或方式来诊断发生了什么非常感谢! 谢谢,西蒙
我有一个关于在haproxy后端使用主机名的问题。 我们有一些运行它自己的networking服务器的软件。 内部url是:192.168.x.xxx:82/Production/我希望它可以从互联网上访问。 通常不是问题。 我已经用其他系统完成了。 我已经configuration了一切,就像我与其他内部网站一样。 唯一的问题是configuration后端,因为端口号后有一个/生产进入该网站。 我已经在haproxy中这样configuration它,但它不工作,有人知道如何使这项工作? 后端系统模式http选项httpchk服务器系统-01 192.168.x.xxx:82/生产/检查
我没有设法获得每haproxy实例每秒11K的请求。 我在亚马逊EC2上有两个haproxy实例。 在c4.xlarge实例下。 我试图configurationmaxconn参数,CPU映射和linux限制没有任何运气。 我使用Jmeter进行testing,如果我运行两个并行Jmeterconfiguration攻击haproxy每个我mannage得到约22K,但如果我执行相同的configuration,但都只攻击1 haproxy实例最大吞吐量是11K 。 我的haproxyconfiguration是: global nbproc 4 cpu-map 1 0 cpu-map 2 1 cpu-map 3 2 cpu-map 4 3 maxconn 150000 log /dev/log local0 log /dev/log local1 notice chroot /var/lib/haproxy stats socket /run/haproxy/admin.sock mode 660 level admin stats timeout 30s user haproxy group haproxy daemon # Default SSL material locations ca-base […]
我在云平台上托pipe一个Web应用程序。 我希望能使用这种工作stream程。 在活动站点正在运行的同时,准备一个与生产环境相同的新环境,只需运行新的代码即可。 testing一段时间,如果发现是好的,将生产切换到新的服务器,但保持旧的。 如果客户遇到问题,这个想法是快速切换回原来的服务器。 如果新服务器是好的,最终删除旧服务器,并在下次部署时启动该服务。 涉及多个服务器实例,以复杂的方式进行configuration,但它们都是由应用程序/networking服务器提供的。 所以切换只会涉及到一个新的前端服务器。 什么是实现这个目标的最好方法? 我正在考虑使用HAProxy,但所有的例子都是关于故障转移或负载平衡的,我只是想把它作为一个手动的“开关”来快速切换服务器。 我也想代理做SSL终止,它必须处理websockets。
我正在主动/被动模式下设置HA代理。 haproxy-a : 172.29.240.172 haproxy-b : 172.29.240.173 Floating IP (VIP) : 172.29.240.188 在任何configuration之前: [root@haproxy-a/b ~]# cat /etc/redhat-release Red Hat Enterprise Linux Server release 7.3 (Maipo) [root@haproxy-a ~]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 2: ens160: […]
我一直在阅读各种大型网站的架构栈,并遇到imgur的。 他们似乎拥有所有的子域名(api.imgur.com,cdn.imgur.com,imgur.com …)都指向一个HAProxy实例,然后将stream量划分为合适的ELB和相关实例。 这是他们的系统图: 更多信息在这里。 为什么不直接让DNS将每个子域直接parsing到相应的ELB IP? HAProxy有什么好处? 还是只是遗留系统的遗留物?