Apache Tomcat 负载均衡集成

来源:互联网 发布:淘客云购cms 编辑:程序博客网 时间:2024/05/17 07:34

第一次集成Apache、Tomcat,在网络上差了很多资料,然后按着资料配置

环境说明:

  两台window2003服务器

  httpd-2.2.15-win32-x86

  jakarta-tomcat-5.0.28

  mod_jk-1.2.27-httpd-2.2.10.so

 

在Apache的httpd.conf文件最后面加上include conf/mod_jk.conf

在httpd.conf同目录下新建mod_jk.conf文件,内容如下:

 

[xhtml] view plaincopy
  1. ### 加载 mod_jk 模块  
  2. LoadModule jk_module modules/mod_jk-1.2.27-httpd-2.2.10.so  
  3. ### 配置 mod_jk  
  4. JkWorkersFile conf/workers.properties  
  5. #加载workers的请求处理分配文件  
  6. #JkMountFile conf/uriworkermap.properties  
  7. #指定jk的日志输出文件  
  8. JkLogFile logs/mod_jk.log  
  9. #指定日志级别  
  10. JkLogLevel info  
  11. #日志记录的格式  
  12. JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "  
  13. # 请求分发配置,可以配置多项  
  14. #JkMount /*.jsp controller  
  15. #JkMount /*.shtml controller  
  16. JkMount /* controller  
  17. # 关掉主机Lookup,如果为on,很影响性能,可以有10多秒钟的延迟。  
  18. HostnameLookups Off  

 

在httpd.conf同目录下新建workers.properties文件,内容如下:

 

[xhtml] view plaincopy
  1. # worker列表  
  2. worker.list=controller,s1,s2  
  3. #第一个server的配置,server名为s1  
  4. #ajp13 端口号,在tomcat下server.xml配置,默认8009  
  5. worker.s1.port=8009  
  6. #tomcat的主机地址,如不为本机,请填写ip地址  
  7. worker.s1.host=192.168.0.109  
  8. worker.s1.type=ajp13  
  9. #server的加权比重,值越高,分得的请求越多  
  10. worker.s1.lbfactor=1  
  11. #第二个server的配置,server名为s2  
  12. worker.s2.port=8009  
  13. worker.s2.host=192.168.50.129  
  14. worker.s2.type=ajp13  
  15. worker.s2.lbfactor=1  
  16. #重试次数  
  17. worker.retries=3   
  18. #========controller,负载均衡控制器========  
  19. worker.controller.type=lb  
  20. #指定分担请求的tomcat  
  21. worker.controller.balanced_workers=s1,s2  
  22. #设置用于负载均衡的server的session可否共享 网上大部分文章都是说设置为1  
  23. #也有网友说自己设置为1死活就是不能自动分配服务,设置为0 可以  
  24. #worker.controller.sticky_session=0  
  25. worker.controller.sticky_session=1  
  26. #我配置为1时,同一个session只会访问一个tomcat关掉浏览器,重新打开,才会访问另外一个tomcat  
  27. #worker.controller.sticky_session=false控制的是session是否粘性,  
  28. #如果设置为true,session为 粘性,同一个请求将在同一台tomcat上处理,一般设置为 false;  
  29. #worker.controller.sticky_session=false  

 

接下来是修改Tomcat

 

修改server.xml

在一个tomcat上的<Engine name="Catalina" defaultHost="localhost">中加上 jvmRoute="s1"

成为<Engine name="Catalina" defaultHost="localhost" jvmRoute="s1">

另外一个tomcat为<Engine name="Catalina" defaultHost="localhost" jvmRoute="s2">

 

然后去掉 <Cluster 注释,实现资源共享

仅此还不够,要在项目的web.xml中加上<distributable/>

[xhtml] view plaincopy
  1. <web-app xmlns="http://java.sun.com/xml/ns/j2ee"  
  2.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  3.     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"  
  4.     version="2.4">  
  5.   <display-name>Welcome to Tomcat</display-name>  
  6.   <description>Welcome to Tomcat</description>  
  7.     
  8.   <distributable/>  

 

这样Apache Tomcat就实现了负载均衡集成。

 

以上是按照网络上的资料部署,经测试发现apache唯一做的事就是接收所有请求,再转给tomcat处理,这样就摒弃了apache处理静态页面的能力。

经过研究后将上面的配置按以下修改

修改mod_jk.conf文件,

将JkMount /* controller注释掉,改为

 

#按照自己的项目情况

JkMount /*.jsp controller
JkMount /*.shtml controller

 

然后再重启运行项目,发现jsp页面的图片都没有显示,说明静态页面元素apache自己处理了,之所以图片不显示,是因为我们没有给apache指定项目目录

修改httpd.conf文件

将DocumentRoot "D:/Apache2.2/htdocs"改为项目的路径DocumentRoot "D:/cms"

还有<Directory "D:/Apache2.2/htdocs">也同样需要修改

如果不想apache列出文件列表

将Options Indexes FollowSymLinks的Indexes去掉,为Options FollowSymLinks

完毕,再测试,发布页面出现乱码,tomcat的server.xml与apache连接器上加上编码

[xhtml] view plaincopy
  1. <Connector port="8009" enableLookups="false" edirectPort="8443" debug="0" protocol="AJP/1.3" URIEncoding="utf-8"/>  

再测,暂无再出现问题。


原创粉丝点击