3

我们使用带有 mod_proxy、mod_proxy_balancer 和 mod_status 的 apache2-worker 包。Apache 被配置为 WFS 服务器的负载平衡器/调度器。

操作系统:SuSE SLES 11 SP2
Apache httpd:版本 2.2.12

我们所有的工作人员(WFS 服务器)一次只能处理一个请求。所以在/etc/apache2/server-tuning.conf第 部分中<IfModule worker.c>,我们将参数ServerLimit设置为1。在 BalancerMember 的配置中,我们使用了参数max=1。即/etc/apache2/conf.d/proxy.conf看起来像这样:

<Proxy balancer://wfscluster>
    BalancerMember http://wfsserver01:9090 max=1 timeout=3600 acquire=30000
    BalancerMember http://wfsserver01:9091 max=1 timeout=3600 acquire=30000
    BalancerMember http://wfsserver02:9090 max=1 timeout=3600 acquire=30000
</Proxy> 
ProxyPass /wfs balancer://wfscluster/ nofailover=On

参数acquire

文档说:

如果设置,这将是在连接池中等待空闲连接的最长时间,以毫秒为单位。如果池中没有空闲连接,Apache 将返回 SERVER_BUSY 状态给客户端。

我对参数acquire的理解如下,也是我想要的行为:

负载均衡器从客户端获取一些请求。在某个时间点,所有工人都很忙。负载均衡器将保持下一个请求保持暂停状态,直到工作人员空闲为止。如果工作人员空闲,则将挂起的请求分配给空闲工作人员,然后该工作人员接受连接。如果在参数指定的时间内没有空闲的工作人员,acquire客户端会收到错误响应。

但是该参数acquire没有按预期工作。负载均衡器将下一个请求分配给忙碌的工作人员。即使在此期间另一个工作人员空闲,该请求仍会分配给忙碌的工作人员,客户端必须等到忙碌的工作人员完成当前请求并接受新的请求。

如果你这样做,/etc/init.d/apache2 reload你会在 apaches error_log 中收到一条错误消息:

BalancerMember 获取超时格式错误

在那条消息之后,httpd 死了。如果您只启动或重新启动 httpd,您不会收到该消息并且 httpd 是活动的。

我还尝试指定一个单位,如 in acquire=30000ms。但错误仍然存​​在。唯一有帮助的是删除acquire参数,但所描述的行为是相同的。

所以问题是:

  • 我必须如何使用参数acquire?有人有工作的例子吗?
  • 我是否必须使用其他参数才能获得所需的行为?
4

0 回答 0