使用Apache Web服务器对应用服务器进行负载均衡

时间:2014-11-09 19:41:09

标签: apache load-balancing ajp mod-proxy-ajp

我们当前的设置有2个负载均衡的Web服务器,可将其应用程序请求指向2个Web服务器的负载均衡器

   LB1
   /  \
Web1   Web2
  \   /
   LB2
  /   \
App1  App2

我们现在使用的第三方应用程序建议我们从应用程序部分的硬件LB切换到软件。

(注意:来自Apache的任何信息都会被删除,以删除IP,目录等。它只是偏执狂)

我添加了一个负载平衡配置,非常简洁,看起来像这样

<Proxy balancer://mycluster>
BalancerMember ajp://FIRSTIP:8009 route=node1
BalancerMember ajp://SECONDIP:8009 route=node2

ProxySet stickysession=JSESSIONID
</Proxy>

正如您所看到的,我们正在平衡ajp请求。在此之后,网站的各个部分都有大量的ProxyPass规则。

我已经通过主httpd.conf

加载了它

在httpd.conf中我按以下顺序加载了以下模块

mod_headers.so
mod_proxy.so
mod_proxy_http.so
mod_proxy_balancer.so
mod_proxy_connect.so
mod_proxy_scgi.so
mod_deflate.so
mod_proxy._ajp.so

问题在于,当我把它全部放到位并尝试重新启动httpd时,它会抛出这个:

httpd: Syntax error on line 62 of httpd.conf:  Cannot load modules/mod_proxy_ajp.so into server: modules/mod_proxy_ajp.so:  undefined symbol: ajp_send_header

当然,现在所有服务器请求都会抛出500并在error.log中出现错误消息:

No protocol handler was valid for the URL /.  If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule.

我不明白为什么会这样。根据研究,如果mod_proxy_ajp被调用BEFORE mod_proxy,则只应该抛出错误。因为它是事先应该加载的最后一件事。

1 个答案:

答案 0 :(得分:0)

我刚刚通过运行以下

修复了它
'OverflowError: range() result has too many items'.

希望这对其他人有用。