虚拟化容器,大数据,DBA,中间件,监控。

利用JK连接Apache与Tomcat,实现负载均衡

17 03月
作者:admin|分类:系统运维
利用JK连接Apache与Tomcat,实现负载均衡

整合 Apache Http Server 和 Tomcat 可以提升对静态文件的处理性能、利用 Web 服务器来做负载均衡以及容错、无缝的升级应用程序。

首先我们先介绍一下为什么要让 Apache 与 Tomcat 之间进行连接。事实上 Tomcat 本身已经提供了 HTTP 服务,该服务默认的端口是 8080,装好 tomcat 后通过 8080 端口可以直接使用 Tomcat 所运行的应用程序,你也可以将该端口改为 80。

既然 Tomcat 本身已经可以提供这样的服务,我们为什么还要引入 Apache 或者其他的一些专门的 HTTP 服务器呢?原因有下面几个:

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

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

3. 无缝的升级应用程序

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

JK是最常用的Apache与Tomcat的连接方式,最新版本是JK-1.2.37 released,JK 是通过 AJP 协议与 Tomcat 服务器进行通讯的,Tomcat 默认的 AJP Connector 的端口是 8009。JK 本身提供了一个监控以及管理的页面 jkstatus,通过 jkstatus 可以监控 JK 目前的工作状态以及对到 tomcat 的连接进行设置,访问方式可以是http://IP/jkstatus。

1、JK的安装:

下载 tomcat-connectors-1.2.37-src.tar.gz

解压后进入 tomcat-connectors-1.2.37下的native目录,开始编译安装:

[root@centos6  tomcat-connectors-1.2.37]# ./configure  --prefix=/usr/local/tomcat-connector  --with-apxs=/usr/local/apache2/bin/apxs
[root@centos6  tomcat-connectors-1.2.37]# make
[root@centos6  tomcat-connectors-1.2.37]# make install

2、JK的配置

JK 的配置最关键的有三个文件,分别是

workers.properties

到 Tomcat 服务器的连接定义文件

httpd.conf

Apache 服务器的配置文件,用来加载 JK 模块以及指定 JK 配置文件信息

uriworkermap.properties

URI 映射文件,用来指定哪些 URL 由 Tomcat 处理,你也可以直接在 httpd.conf 中配置这些 URI,但是独立这些配置的好处是 JK 模块会定期更新该文件的内容,使得我们修改配置的时候无需重新启动 Apache 服务器。

其中第二、三个配置文件名都可以自定义。下面是一个典型的 httpd.conf 对 JK 的配置:

  1. # (httpd.conf)   
  2. # 加载 mod_jk 模块   
  3. LoadModule jk_module modules/mod_jk.so   
  4.   
  5. #   
  6. # Configure mod_jk   
  7. #   
  8. <IfModule jk_module>   
  9. JkWorkersFile conf/workers.properties   
  10. JkMountFile conf/uriworkermap.properties   
  11. JkLogFile logs/mod_jk.log  
  12. JkLogLevel warn  
  13. </IfModule>  

tomcat配置的修改

tomcat默认使用的http协议,服务的配置文件为conf/server.xml,其中关于连接协议的配置为,

  1. <Connector port="8080" protocol="HTTP/1.1"  
  2.        connectionTimeout="20000"  
  3.          redirectPort="8443" />  

要使用JK连接器,需要修改该协议配置为ajp,下面是我的配置:

  1. <Connector port="8009"  maxThreads="200"    
  2. minSpareThreads="100" maxSpareThreads="150"    
  3. enableLookups="false" redirectPort="8443"     
  4. acceptCount="100" debug="0"  isableUploadTimeout="true"     
  5. URIEncoding="GBK"  protocol="AJP/1.3" />  

接下来我们在 Apache 的 conf 目录下新建两个文件分别是 workers.properties、uriworkermap.properties。这两个文件的内容大概如下:

  1. #   
  2. # workers.properties   
  3. #   
  4. # list the workers by name   
  5.   
  6. worker.list=DLOG4J, status   
  7.   
  8. # localhost server 1   
  9. # ------------------------   
  10. worker.s1.port=8009   
  11. worker.s1.host=localhost   
  12. worker.s1.type=ajp13   
  13.   
  14. # localhost server 2   
  15. # ------------------------   
  16. worker.s2.port=8010   
  17. worker.s2.host=localhost   
  18. worker.s2.type=ajp13   
  19. worker.s2.stopped=1   
  20.   
  21. worker.DLOG4J.type=lb   
  22. worker.retries=3   
  23. worker.DLOG4J.balanced_workers=s1, s2   
  24. worker.DLOG4J.sticky_session=1   
  25. worker.status.type=status  

说明:

首先我们配置了两个类型为 ajp13 的 worker 分别是 s1 和 s2,它们指向同一台服务器上运行在两个不同端口 8109 和 8209 的 Tomcat 上。接下来我们配置了一个类型为 lb(也就是负载均衡的意思)的 worker,它的名字是 DLOG4J,这是一个逻辑的 worker,它用来管理前面配置的两个物理连接 s1 和 s2。最后还配置了一个类型为 status 的 worker,这是用来监控 JK 本身的模块。有了这三个 worker 还不够,我们还需要告诉 JK,哪些 worker 是可用的,所以就有 worker.list = DLOG4J, status这行配置。

接下来便是 URI 的映射配置了,我们需要指定哪些链接是由 Tomcat 处理的,哪些是由 Apache 直接处理的,看看下面这个文件你就能明白其中配置的意义

  1. /*=DLOG4J   
  2. /jkstatus=status   
  3.   
  4. !/*.gif=DLOG4J   
  5. !/*.jpg=DLOG4J   
  6. !/*.png=DLOG4J   
  7. !/*.css=DLOG4J   
  8. !/*.js=DLOG4J   
  9. !/*.htm=DLOG4J   
  10. !/*.html=DLOG4J  

说明:

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

通过对 workers.properties 和 uriworkermap.properties 的配置,可以有各种各样的组合来满足我们前面提出对一个 web 网站的要求。如果有需求不妨按照本文的方法一试。

浏览2011 评论0
返回
目录
返回
首页
配置squid 反向代理提高网站性能 Centos6.2安装和配置ISCSI服务和客户端