tomcat集群与负载均衡

Tomcat的集群

单机多tomcat集群

1、在本机运行多个tomcat,在E:\appserver\tomcat7.0_cluster部署两个tomcat

Tomcat7.028_as1,Tomcat7.028_as2

2、修改tomcat配置

2.1端口

As1:http->9180,ajp->9109,shutdown->9105

As2:http->9280,ajp->9209,shutdown->9205

2.2服务器别名

As1:jvmRoute="jvm1“

As2:jvmRoute="jvm2"

2.3打开默认集群模式(tomcat5.5与tomcat6、7不同)

<Clusterclassname="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>

2.4修改tomcat启动窗口名称,便于区分

As1:setTITLE=Tomcat_as1

As2:setTITLE=Tomcat_as2

1、部署测试应用

1.1将test文件夹放到Tomcat7.028_as1和Tomcat7.028_as2并行目录,即是E:\appserver\tomcat7.0_cluster

1.2在tomcat的conf\Catalina\localhost建立test.xml,内容如下:

<?xmlversion='1.0'encoding='utf-8'?>

<ContextcrossContext="true"docBase="E:\appserver\tomcat7.0_cluster\test"path="/test"reloadable="false">

</Context>

2、访问测试应用

http://127.0.0.1:9180/test/

http://127.0.0.1:9280/test/

3、会话复制

在应用中web.xm加入<distributable/>

Apache与tomcat实现负载均衡

#让Apache监听80端口

Listen80

#加载相关模块

LoadModuleproxy_modulemodules/mod_proxy.so

LoadModuleproxy_ajp_modulemodules/mod_proxy_ajp.so

LoadModuleproxy_balancer_modulemodules/mod_proxy_balancer.so

LoadModuleproxy_connect_modulemodules/mod_proxy_connect.so

LoadModuleproxy_http_modulemodules/mod_proxy_http.so

#Proxy模块基本配置,禁止正向代理

#在</IfModule>标签后面加入如下配置

ProxyRequestsOff

#ProxyViaOn

<Proxy*>

Orderdeny,allow

Allowfromall

</Proxy>

#配置集群,实现轮询方式

SetEnvproxy-nokeepalive1

ProxyPass/test/balancer://TomcatCluster/lbmethod=byrequestsstickysession=JSESSIONIDnofailover=Offtimeout=5maxattempts=3

ProxyPassReverse/test/balancer://TomcatCluster/

#加入集群的Tomcat应用主机

#9109及9209详见TomcatServer.xml中相应配置

#route详见TomcatServer.xml中相应配置

<Proxybalancer://TomcatCluster>

BalancerMemberajp://127.0.0.1:9109/test/loadfactor=1route=jvm1

BalancerMemberajp://127.0.0.1:9209/test/loadfactor=1route=jvm2

</Proxy>

轮询均衡策略的配置

ProxyPass/testbalancer://proxy

<Proxybalancer://proxy>

BalancerMemberhttp://192.168.6.37:6888/

BalancerMemberhttp://192.168.6.38:6888/

</Proxy>

我们来观察上述的参数“ProxyPass/testbalancer://proxy”,其中,“ProxyPass”是配置虚拟服务器的命令,“/test”代表发送Web请求的URL前缀,如:http://myserver/test或者http://myserver/test/aaa,这些URL都将符合上述过滤条件;“balancer://proxy”表示要配置负载均衡,proxy代表负载均衡名;BalancerMember及其后面的URL表示要配置的后台服务器,其中URL为后台服务器请求时的URL。以上面的配置为例,实现负载均衡的原理如下:

假设Apache接收到http://localhost/test/aaa请求,由于该请求满足ProxyPass条件(其URL前缀为“/test”),该请求会被分发到后台某一个BalancerMember,譬如,该请求可能会转发到http://192.168.6.37:6888/aaa进行处理。当第二个满足条件的URL请求过来时,该请求可能会被分发到另外一台BalancerMember,譬如,可能会转发到http://192.168.6.38:6888/。如此循环反复,便实现了负载均衡的机制。

按权重分配均衡策略的配置

ProxyPass/testbalancer://proxylbmethod=byrequests

<Proxybalancer://proxy>

BalancerMemberhttp://192.168.6.37:6888/loadfactor=3

BalancerMemberhttp://192.168.6.38:6888/loadfactor=1

</Proxy>

参数”loadfactor”表示后台服务器负载到由Apache发送请求的权值,该值默认为1,可以将该值设置为1到100之间的任何值。以上面的配置为例,介绍如何实现按权重分配的负载均衡,现假设Apache收到http://myserver/test/aaa4次这样的请求,该请求分别被负载到后台服务器,则有3次连续的这样请求被负载到BalancerMember为http://192.168.6.37:6888的服务器,有1次这样的请求被负载BalancerMember为http://192.168.6.38:6888后台服务器。实现了按照权重连续分配的均衡策略。

按权重分配均衡策略的配置

ProxyPass/testbalancer://proxylbmethod=byrequests

<Proxybalancer://proxy>

BalancerMemberhttp://192.168.6.37:6888/loadfactor=3

BalancerMemberhttp://192.168.6.38:6888/loadfactor=1

</Proxy>

参数”loadfactor”表示后台服务器负载到由Apache发送请求的权值,该值默认为1,可以将该值设置为1到100之间的任何值。以上面的配置为例,介绍如何实现按权重分配的负载均衡,现假设Apache收到http://myserver/test/aaa4次这样的请求,该请求分别被负载到后台服务器,则有3次连续的这样请求被负载到BalancerMember为http://192.168.6.37:6888的服务器,有1次这样的请求被负载BalancerMember为http://192.168.6.38:6888后台服务器。实现了按照权重连续分配的均衡策略。

权重请求响应负载均衡策略的配置

ProxyPass/testbalancer://proxylbmethod=bytraffic

<Proxybalancer://proxy>

BalancerMemberhttp://192.168.6.37:6888/loadfactor=3

BalancerMemberhttp://192.168.6.38:6888/loadfactor=1

</Proxy>

参数“lbmethod=bytraffic”表示后台服务器负载请求和响应的字节数,处理字节数的多少是以权值的方式来表示的。“loadfactor”表示后台服务器处理负载请求和响应字节数的权值,该值默认为1,可以将该值设置在1到100的任何值。根据以上配置是这么进行均衡负载的,假设Apache接收到http://myserver/test/aaa请求,将请求转发给后台服务器,如果BalancerMember为http://192.168.6.37:6888后台服务器负载到这个请求,那么它处理请求和响应的字节数是BalancerMember为http://192.168.6.38:6888服务器的3倍(回想(2)均衡配置,(2)是以请求数作为权重负载均衡的,(3)是以流量为权重负载均衡的,这是最大的区别)。

粘性会话

ProxyPass/test/balancer://TomcatCluster/lbmethod=byrequestsstickysession=JSESSIONIDnofailover=Offtimeout=5maxattempts=3

ProxyPassReverse/test/balancer://TomcatCluster/

stickysession均衡器粘连会话名称。该值常常会被设置为类似JSESSIONID或者PHPSESSIONID之类的值,他依赖于支持会话的后端应用服务器。如果后端服务器使用不同的cookie名称或者URL编码的ID(像servlet容器),使用|来分开他们。第一个部分针对cookie,第二个针对路径。

stickysession=JSESSIONID,启用粘性会话

空,不启用粘性会话,默认为空

失效转移

ProxyPass/test/balancer://TomcatCluster/lbmethod=byrequestsstickysession=JSESSIONIDnofailover=Offtimeout=5maxattempts=3

ProxyPassReverse/test/balancer://TomcatCluster/

Nofailover,默认为Off。如果设为‘On’,当工作单元被禁用或者出错时,会话则立即中断。可以将该值设为On如果后端服务器不支持会话复制(Sessionreplication)。

nofailover=Off开启失效转移

nofailover=On关闭失效转移

相关推荐