cen*_*tic 11 apache proxy load-balancing
我在多个Java Tomcat实例前面使用Apache Httpd实例作为代理.Apache充当Tomcat实例的负载平衡器.
apache配置基本上如下所示
<Proxy balancer://mycluster>
BalancerMember ajp://host1:8280 route=jvmRoute-8280
BalancerMember ajp://host2:8280 route=jvmRoute-8280
BalancerMember ajp://host3:8280 route=jvmRoute-8280
</Proxy>
<VirtualHost *:80>
ProxyPass / balancer://mycluster/
ProxyPassReverse / balancer://mycluster/
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
当在Tomcat实例中配置AJP端口时,这基本上有效.请求将发送到其中一个主机,负载将分布在Tomcat实例中.
然而,我发现只要其中一个主机不可用,Httpd内部就会出现非常长的延迟,即似乎Apache不记得其中一个主机不可用并且反复尝试将请求发送到丢失的主机而不是将其发送到其中一个可用主机并在稍后的某个时间尝试发生故障的主机.
有没有办法配置mod_proxy et.al. 从Apache Httpd支持这样的故障转移场景,即拥有多个主机,并且当一个主机出现故障时不会造成巨大延迟?Apache应该定期检查后台哪些主机已经消失,而不是任何请求.
我确实发现HAProxy似乎更适合这种事情,但我更愿意坚持使用Apache,原因有很多.
与此同时,我发现我的问题的一部分是由客户端引起的,这些客户端使连接保持无限开放,因此没有更多的连接/线程可用.
因此,我将问题更改为:您将使用哪些配置选项来最小化此类效果?即在这种情况下允许许多打开的连接或快速关闭它们?否则这听起来像我当前配置的一个非常容易的DOS攻击?
小智 6
客户不会无休止地保持连接.检查Apache server-tuning.conf并查找KeepAliveTimeout设置.把它降低到合理的程度.
您对connectiontimeout和重试的更改确实是您必须要做的.我会降低连接时间.10秒仍然是年龄.如果后端位于同一位置,为什么不在几毫秒内设置它?connectiontimeout = 200ms应该留出足够的时间来建立连接.
| 归档时间: |
|
| 查看次数: |
29563 次 |
| 最近记录: |