分类
笔记

使用proxy_balancer模块做负载均衡

使用apache+tomcat集群多个方案,以前我是用的mod_jk。这种集群虽然性能好,但是较复杂。apache自带的负载均衡模块proxy_balancer简单又正好满足需求。所以选用这种方案。
我查资料有个习惯,就是首先从官网获取信息。因为官网的文档不仅是最新,相信也是最准确的。可是这一次我错了,如果按官网的文档操作没有问题就不会写这篇日志了。

首先打开需要的功能模块,在这里,我打开了和proxy相关的所有模块:

LoadModule proxy_module modules/mod_proxy.so
LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so
LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so
LoadModule lbmethod_heartbeat_module modules/mod_lbmethod_heartbeat.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_express_module modules/mod_proxy_express.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
LoadModule proxy_fdpass_module modules/mod_proxy_fdpass.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_scgi_module modules/mod_proxy_scgi.so
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so


按照以下官网的配置方法:

于是就报500,打开error_log发现:
No protocol handler was valid for the URL /auth/real. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule.
以下是我的配置:

<Proxy "balancer://auth">
        BalancerMember http://127.0.0.1:30007 route=1
        ProxySet stickysession=ROUTEID
</Proxy>
<VirtualHost *:80>
        ServerName auth2.prping.com
        ProxyPass / balancer://auth stickysession=JSESSIONID|jsessionid scolonpathdelim=On
        ProxyPassReverse / balancer://auth
</VirtualHost>

stickysession是为解决cookies的问题,同一会话的用主呢始终分配在一台机器上。具体balancer的其他参数可以参考官网。
http://httpd.apache.org/docs/2.4/mod/mod_proxy_balancer.html
按错误提示,好像是协议不支持。可是http和ajp都试过了,还是不行。如果不集群,单独使用代理又是正常的:

ProxyPass / http://127.0.0.1:30007/
ProxyPassReverse / http://127.0.0.1:30007/

所以排除了模块没加载或者协议不支持的原因。
突然,我看到了映射地址最后一个 “/” 符号。
以前配置http代理时,最后不加上 “/” ,访问时就会把代理的url直接拼在后面。我把之前的配置加上 “/” ,重启后没问题了,访问正常。
以下是正确的配置文件,考虑到获得更好的性能,使用了ajp协议。

<Proxy "balancer://auth">
        BalancerMember ajp://127.0.0.1:20007 route=1
        ProxySet stickysession=ROUTEID
</Proxy>
<VirtualHost *:80>
        ServerName auth2.prping.com
        ProxyPass / balancer://auth/ stickysession=JSESSIONID|jsessionid scolonpathdelim=On
        ProxyPassReverse / balancer://auth/
</VirtualHost>

所以,如果有些事没有真正做过得出结论,还是保持中立的好。

发表评论

电子邮件地址不会被公开。