Apache+Tomcat+JK 实现集群、负载均衡
1. 软件说明
apache_2.2.10-win32-x86-no_ssl.msi
mod_jk-1.2.27-httpd-2.2.10.so
jakarta-tomcat-5.5.9
(注: windows xp 系统)
2. 配置
一、 负载均衡
1. 安装 apche,tomcat
http://httpd.apache.org/ 下载 Apache
http://tomcat.apache.org/ 下载 Tomcat
http://tomcat.apache.org/download-connectors.cgi 下载 JK
这里使用的都是 windows 下的版本。
安装 Apache 和 Tomcat,
将下载的 mod_jk-1.2.27-httpd-2.2.10.so 文件复制到 apache 安装目录 modules 目录 下
2. 修改 Apache 配置文件
在 apache 安装目录下 conf 目录中找到 http.conf ,在文件最后加上下面一句:
http.conf
# 指定 mod_jk 配置文件的位置 Include conf/mod_jk.conf |
在 conf 目录中新建 mod_jk.conf 文件,内容如下:
mod_jk.conf
# 加载 mod_jk Module LoadModule jk_module modules/mod_jk-1.2.27-httpd-2.2.10.so # 指定 workers.properties 文件路径 JkWorkersFile conf/workers.properties # url 请求的配置文件路径 JkMountFile conf/uriworkermap.properties |
接着在 conf 目录下新建 workers.properties 文件,内容如下:
workers.properties
worker.list=controller # server 列表,分发控制器 注意不要放 tomcat 实例 # Tomcat1 实例配置 这里要和 Tomcat 配置文件 service.xml 的 jvmRoute 保持一致 worker.tomcat1.port=8009 #ajp13 端口号,在 tomcat 下 server.xml 配置 , 默认 8009 worker.tomcat1.host=localhost # tomcat 的主机地址,如不为本机,请填写 ip 地址 worker.tomcat1.type=ajp13 worker.tomcat1.lbfactor = 1 # server 的加权比重,值越高,分得的请求越多 # Tomcat2 实例配置 worker.tomcat2.port=9009 worker.tomcat2.host=localhost worker.tomcat2.type=ajp13 worker.tomcat2.lbfactor = 1
# 负载均衡分发控制器 worker.controller.type=lb worker.controller.balanced_workers=tomcat1,tomcat2 # 指定分担请求的 tomcat worker.controller.sticky_session=false # 关闭 粘性 session( 默认是 true 打开的 ) |
接着在 conf 目录下新建 uriworkermap.properties 文件,内容如下:
uriworkermap.properties
# 指定那些请求交给 tomcat 处理 ,"controller" 为在 workers.propertise 里指定的负载分配控制器 /*.jsp=controller |
3. 修改 tomcat 配置文件
修改 tomcat 的 conf 目录下的 server.xml 文件。如果你在不同电脑上安装 tomcat,tomcat
的安装数量为一个,可以不必修改 tomcat 配置文件,我这里是在同一台电脑上安装两
个 tomcat ,所以需要更改其中一个的设置打开 tomcat2/conf/server.xml 文件:
4. 编写测试项目 test
test.jsp
<% |
把 test 放到 tomcat1,tomcat2 的 webapps 下的 test 应用中
5. 启动 apache tomcat 进行测试
通过 http://localhost/test/test.jsp 访问,查看 tomcat1 的窗口,可以看到打印了一行
"============" ,再刷新一次, tomcat2 也打印了一条,再刷新,可以看到请求会被 tomcat1,tomcat2 轮流处理 , 实现了负载均衡
二、 配置集群
只配置负载均衡还不行,还要 session 复制,也就是说其中任何一个 tomcat 的添加
的 session ,是要同步复制到其它 tomcat , 集群内的 tomcat 都有相同的 session 。
1. 修改 tomcat1, tomcat2 的 server.xml
将集群部分配置的在注释符删掉 , 并将 tomcat2 的 4001 端口改为 4002 ,以避免与
tomcat 冲突,当然,如果是两台电脑,是不用改端口的,去掉注释符即可
在 Engine 标签中添加 jvmRoute=’tomcat1’ 。 jvmRoute 名称必须和 worker.properties 中的 tomcat 实例名称一致,不然无法实现 session_stricky( 粘性 session) 。同时还要将 apache/conf/workers.properties 文件中 worker.controller.sticky_session=true
2. 修改测试项目 test
修改 test.jsp , 内容如下:
test.jsp
<%@ page contentType="text/html; charset=GBK" %> // 如果有新的 Session 属性设置 out.print("<b>Session 列表</b>"); Enumeration e = session.getAttributeNames(); |
然后在 test 新建 WEB-INF 目录, WEB-INF 下新建 web.xml, 内容如下:
web.xml
<web-app xmlns="http://java.sun.com/xml/ns/j2ee " xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance " xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd " version="2.4"> |
web.xml 配置文件加上 <distributable/> 节点,此配置说明当前 Web 工程处于分布式部署环境。如果不进行这个配置,每次访问页面 tomcat 都会产生一个新的 sessionid
3. 测试
讲 test 应用复制到 tomcat1,tomcat2 的 webapps 下,重启 apache,tomcat1,tomcat2 ,
输入网址 http://localhost/test/test.jsp ,表单输入 songsp , 值为 test 的 session, 提交查询, Tomcat1 处理请求。如下图:
将 Tomcat1 服务关闭。在输入 bbbb,aaaaa 提交,由于 Tomcat1 关闭, Tomcat2 来处理请求,并且 session 同步的。如下图: