文章原地址:http://blog.csdn.net/u013485144/article/details/51026858
所需资料:Apache2.4+ tomcat6.x(7.x)
一:Apache相关配置
Apache安装自行百度,非常简单。
主要配置:Apache/conf/httpd.conf
A:放开相关模块
将这个配置文件中的我们需要使用的功能模块解开注释,启动时才能加载
LoadModule proxy_modulemodules/mod_proxy.so
LoadModule proxy_ajp_modulemodules/mod_proxy_ajp.so
LoadModule proxy_balancer_modulemodules/mod_proxy_balancer.so//这个模块的是起负载均衡的核心模块
LoadModule proxy_connect_modulemodules/mod_proxy_connect.so
//以上是代理相关及ajp协议相关的功能模块,主要是在请求分发的过程中起作用
#LoadModule lbmethod_bybusyness_modulemodules/mod_lbmethod_bybusyness.so(按照繁忙程度,总是给活跃请求数最少的服务器)
LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so(按照请求次数)
#LoadModule lbmethod_bytraffic_modulemodules/mod_lbmethod_bytraffic.so(按照流量均衡)
//以上是不同的balance策略对应的模块,具体实现的算法,请自行百度(不建议深究实现算法,意义不大,学好剑法不一定要知道怎么打铁的)
B:配置均衡策略和地址
在配置文件的最后加上以下内容:
ProxyPass /balancer://proxy/ stickysession=JSESSIONID lbmethod=byrequests
<Proxybalancer://proxy>
BalancerMember ajp://127.0.0.1:10001/ loadfactor=3 route=137a
BalancerMember ajp://10.88.8.137:10001/ loadfactor=1 route=61a
BalancerMember ajp://10.88.8.137:10002/ loadfactor=1 route=61b status=+H
</Proxy>
解释:
ProxyPass / balancer://proxy/
ProxyPass / 表示所有以 “/” 开头的请求都适配proxy这个balance策略,标黄的部分是参数,是可变的,也就是说可以给不同的请求url匹配不同的均衡策略。
stickysession=JSESSIONIDlbmethod=byrequests
stickysession是说请求是否是session黏贴性的,就是当第一次请求负载后,以后的请求会按照session走,既同一个session的请求都访问一个webserver(tomcat),如果是PHP实现的后台服务,JSESESIONID需要变成PHPSESSIONID,lbmethod后的参数还可以是bybusyness、bytraffic
BalancerMember ajp://10.88.8.137:10001/ loadfactor=1 route=61a
这个配置是匹配不同的tomca,我这里使用3个tomcat,需要注意的是使用ajp协议(Apache使用这个协议实现的代理),端口是tomcat中ajp配置的端口 ,loadfactor后面的值是权值,负载均衡的时候会根据这个权值去分配(1-100)。Route是一个命名,如果仔细查看sessionid的话,你能看的这个路由信息会跟在sessionid后面。
Status=+H 表示10.88.8.137:10002这台server是热备服务器,正常业务不会分给它,但是一旦另外两台服务器down了,这台服务器就会被使用到。
二、Tomcat配置
主要是修改tomcat/conf/server.xml,这个文件我估计大家都不陌生,不再赘述,主要强调一下,除了修改server、http端口防止冲突意外,还要注意修改ajp的端口,和命名
一下是几个主要的配片段:
<Server port="9005" shutdown="SHUTDOWN">
<Connector port="8080" protocol="HTTP/1.1"
<Connector port="10001" protocol="AJP/1.3"redirectPort="8443" />
<!-- You should set jvmRoute to support load-balancing viaAJP ie :
<Engine name="Catalina"defaultHost="localhost" jvmRoute="jvm1">
-->
<Enginename="Catalina" defaultHost="localhost" jvmRoute="137a">
这里注意一下,jvmRoute就是上面Apache配置的route,这个要对应上,还有10001这个端口,也是在上面Apache配置BalanceMember的时候需要用的。