6,Tomcat 的负载均衡---Tomcat + httpd(mod_proxy)

时间:2020-09-17 21:23:24   收藏:0   阅读:37

技术图片

当httpd端采用mod_proxy和tomcat连接时,可以采用ajp或http协议进行连接。

要使用mod_proxy与Tomcat连接,需要apache已经装载mod_proxy、mod_proxy_http、mod_proxy_ajp和proxy_balancer_module(实现Tomcat负载均衡时用到)等模块。使用rpm包安装的httpd一般默认已经启用它们,如果是编译httpd,则在编译选项中加上以下对应几项:

--enable-proxy --enable-proxy-http --enable-proxy-ajp --enable-proxy-balancer

如果是已经编译好的Httpd,则可以使用apxs工具,向httpd中添加这几个新模块。添加方法见:httpd添加新模块

确保proxy相关的模块已经加载了。

[root@xuexi ~]# httpd -M | grep proxy

Syntax OK

 proxy_module (shared)

 proxy_balancer_module (shared)

 proxy_ftp_module (shared)

 proxy_http_module (shared)

 proxy_ajp_module (shared)

 proxy_connect_module (shared)

5.1 配置httpd代理到tomcat

基于ajp连接协议和tomcat连接时,向httpd添加以下配置文件。如果要基于http协议连接tomcat,将上面配置文件的ajp协议改为http协议,并修改端口即可。

[root@xuexi ~]# cat /etc/httpd/conf.d/ajp.conf

<Location /status>

  SetHandler balancer-manager

  Proxypass !              表示此LocationURL不进行反向代理

  Require ip 192.168.100

</Location>

 

ProxyVia Off

ProxyRequests Off

ProxyPreserveHost Off

  ProxyPassMatch    "^/(.*\.jsp)$"  ajp://192.168.100.22:8009/$1

  ProxyPassReverse  "^/(.*\.jsp)$"  ajp://192.168.100.22:8009/$1

 

<Proxy *>

  Require all granted

</Proxy>

重启httpd。注意,重启前将前面mod_jk实验的配置文件删除掉。

关于如上apache配置的几个指令,解释如下。httpd反向代理的详细内容,可参见:详细分析apache httpd反向代理的用法

5.2 通过mod_proxy负载均衡tomcat

关于httpd反向代理的负载均衡配置方式,参见详细分析apache httpd反向代理的用法

在httpd.conf中配置如下内容:

<proxy balancer://TomcatLB>

BalancerMember ajp://192.168.100.38:8009 loadfactor=5

BalancerMember ajp://192.168.100.36:8009 loadfactor=10

</proxy>

 

ProxyVia Off

ProxyRequests Off

ProxyPreserveHost Off

ProxyPassMatch   "^/(.*\.jsp)$" balancer://TomcatLB/$1

ProxyPassReverse "^/(.*\.jsp)$" balancer://TomcatLB/$1

 

<Proxy *>

  Require all granted

</Proxy>

 

<Location /status>

  SetHandler balancer-manager

  Proxypass !

  Require ip 192.168.100

</Location>

重启httpd并在浏览器中输入192.168.100.17/test/index.jsp测试,测试时会轮调两次tomcatB再轮调一次tomcatA。

技术图片

如果要实现session粘滞(绑定),则修改httpd配置文件如下:

<proxy balancer://TomcatLB>

BalancerMember ajp://192.168.100.22:8009 loadfactor=5  route=TomcatA

BalancerMember ajp://192.168.100.23:8009 loadfactor=10 route=TomcatB

ProxySet  lbmethod=byrequets

</proxy>

 

ProxyVia Off

ProxyRequests Off

ProxyPreserveHost Off

ProxyPassMatch   "^/(.*\.jsp)$" balancer://TomcatLB/$1 stickysession=JSESSIONID

ProxyPassReverse "^/(.*\.jsp)$" balancer://TomcatLB/$1 stickysession=JSESSIONID

 

<Proxy *>

  Require all granted

</Proxy>

 

<Location /status>

  SetHandler balancer-manager

  Proxypass !

  Require ip 192.168.100

</Location>

然后分别配置tomcatA和tomcatB的engine组件,分别加上jvmRoute="TomcatA"和jvmRoute="TomcatB"属性。

<Engine name="Catalina" defaultHost="localhost" jvmRoute="TomcatA">

<Engine name="Catalina" defaultHost="localhost" jvmRoute="TomcatB">

重启httpd和tomcatA、tomcatB,然后测试结果,再测试时同一客户端将总是得到同一个结果,不会出现负载均衡。

 

转载请注明出处:http://www.cnblogs.com/f-ck-need-u/p/8414043.html

 

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!