Tomcat集群——使用apache负载

使用Apache做Tomcat负载的好处:

1.提升对静态文件的处理性能

2.利用Web服务器来做负载均衡以及容错

3.无缝的升级应用程序

这三点对一个web网站来说是非常之重要的,我们希望我们的网站不仅是速度快,而且要稳定,不能因为某个Tomcat宕机或者是升级程序导致用户访问不了,而能完成这几个功能的、最好的HTTP服务器也就只有apache的httpserver了,它跟tomcat的结合是最紧密和可靠的。

ApacheHTTPServer与Tomcat的三种连接方式JK,http_proxy,ajp_proxy。下面逐个介绍一下(本篇介绍的示例都是基于前面介绍的已经搭建好的Tomcat集群,都是本机,端口分别为18080和28080):

JK:

JK是最常见的方式,JK本身有两个版本分别是1和2,目前1最新的版本是1.2.37,而版本2早已经废弃了,以后不再有新版本的推出了,所以建议你采用版本1。

JK是通过AJP协议与Tomcat服务器进行通讯的,Tomcat默认的AJPConnector的端口是8009(本机修改配置为18009和28009)。JK本身提供了一个监控以及管理的页面jkstatus,通过jkstatus可以监控JK目前的工作状态以及对到tomcat的连接进行设置。

配置JK

1.下载mod_jk,Tomcat官网下载即可

http://tomcat.apache.org/download-connectors.cgi,下载对应版本

2.修改httpd.conf

# (httpd.conf)
# 加载 mod_jk 模块
LoadModule jk_module modules/mod_jk.so

#
# Configure mod_jk
#
JkWorkersFile conf/workers.properties
JkMountFile conf/uriworkermap.properties
JkLogFile logs/mod_jk.log
JkLogLevel warn

3.在conf目录下添加配置文件workers.properties,与上面JkWorkersFile的配置保持一致

#
# workers.properties
#

# list the workers by name
# DLOG4J的名字是随便起的

worker.list=DLOG4J, status

# localhost server 1
# ------------------------
worker.s1.port=18009
worker.s1.host=localhost
worker.s1.type=ajp13

# localhost server 2
# ------------------------
worker.s2.port=28009
worker.s2.host=localhost
worker.s2.type=ajp13

worker.DLOG4J.type=lb
worker.retries=3
worker.DLOG4J.balance_workers=s1, s2
worker.DLOG4J.sticky_session=1

worker.status.type=status

3.在conf目录下添加配置文件uriworkermap.properties,与上面JkMountFile的配置保持一致

/*=DLOG4J
/jkstatus=status

!/*.gif=DLOG4J
!/*.jpg=DLOG4J
!/*.png=DLOG4J
!/*.css=DLOG4J
!/*.js=DLOG4J
!/*.htm=DLOG4J
!/*.html=DLOG4J

上面映射的意思是,所有的请求都由DLOG4J这个worker进行处理,但是有几个例外,/jkstatus请求由status这个worker处理。另外配置中每一行数据前面的感叹号表示接下来的URI不要由JK进行处理,也就是Apache直接处理所有的图片、css文件、js文件以及静态html文本文件。

4.启动apache,两个tomcat

5.测试

先访问http://192.168.1.101:8080/jkstatus,可以看看jkstatus的状态

再访问http://192.168.1.101:8080/ClusterValidate/index.jsp

tip1:

我参考网上其它的配置,但是不成功,查看日志,是jk的一些选项在新版本改掉了,查了下官网,修改后成功了

tip2:

我第一次把18009端口配置成18080了,然后mod_jk的日志显示信息格式错误

http_proxy

这是利用Apache自带的mod_proxy模块使用代理技术来连接Tomcat。在配置之前请确保是否使用的是2.2.x版本的Apache服务器。因为2.2.x版本对这个模块进行了重写,大大的增强了其功能和稳定性。

http_proxy模式是基于HTTP协议的代理,因此它要求Tomcat必须提供HTTP服务,也就是说必须启用Tomcat的HTTPConnector。

配置http_proxy

1.恢复加载http_proxy相关模块

在httpd.conf文件中,去掉如下几行的注释

LoadModuleproxy_modulemodules/mod_proxy.so

LoadModuleproxy_modulemodules/mod_proxy_ajp.so

LoadModuleproxy_balancer_modulemodules/mod_proxy_balancer.so

LoadModuleproxy_http_modulemodules/mod_proxy_http.so

LoadModuleproxy_http_modulemodules/mod_status.so

2.在httpd.conf中加上proxy代理的ProxyPass

添加如下配置:

ProxyPass /images !
ProxyPass /css ! 
ProxyPass /js !
ProxyPass /balancer-manager  !

ProxyPass / balancer://mycluster/
<Proxy balancer://mycluster/>
BalancerMember http://localhost:18080/
BalancerMember http://localhost:28080/
</Proxy>

<Location /balancer-manager> 
SetHandler balancer-manager   
        Order Deny,Allow   
        #Deny from all   
        Allow from localhost ip6-localhost
</Location>

3.启动apache,tomcat

4.测试

http://192.168.1.101:8080/balancer-manager查看均衡状态

http://192.168.1.101:8080/ClusterValidate/index.jsp测试负载均衡

ajp_proxy

与http_proxy基本一致,只是在ProxyPass的地址中,把http的地址转化为ajp的地址,及Tomcat坚挺的ajp端口号。如下:

ProxyPass /images !
ProxyPass /css ! 
ProxyPass /js !
ProxyPass /balancer-manager  !

ProxyPass / balancer://mycluster/
<Proxy balancer://mycluster/>
BalancerMember ajp://localhost:18009/
BalancerMember ajp://localhost:28009/
</Proxy>

<Location /balancer-manager> 
SetHandler balancer-manager   
        Order Deny,Allow   
        #Deny from all   
        Allow from localhost ip6-localhost
</Location>

以上三种负载方案都行,但是官方建议还是jk模式好,效率高,稳定。因为本人项目中没有采用apache+tomcat的负载,只对此做了简单的了解。详细可以去官网查看~

相关推荐