日期:2014-05-16  浏览次数:20784 次

Apache2.2+Tomcat5.5 集群配置
一、架构:
users --> apache web server + mod_jk -->tomcat instance
1、mode_jk介绍:
它是早期mod_jserv的替代品,是一个全新负责处理Apache和Tomcat通讯的Apache插件。
Apache加载jk模块,通过ajp13(Apache jServ Protocol version 1.3)协议与tomcat通讯;
2、apache + JK 负载均衡器作用?
1)它实现了负载均衡算法,通过将请求分发到不同的服务器来达到高可用性和高效的处理能力;
2)监控集群中每一个tomcat的健康状态,来防止将请求转发到一个失败的节点;
3)它会使用“会话粘滞”技术以确保来自同一个用户的请求会被转发到同一个服务器;

二、环境搭建:
1、Apache 2.2.14 下载地址:http://httpd.apache.org/,如可以通过访问 "http://localhost"来判断apache是否安装成功。如果提示80端口被占用,则关闭掉类似于迅雷或其他应用程序,可能是这些应用程序占用了80端口;

2、Tomcat 5.5 绿色版 下载地址:http://tomcat.apache.org/download-55.cgi
由于是集群,这里我们安装2个tomcat,并命名tomcat根目录分别为tomcata和tomcatb,如果使用默认配置,就不能同时启动两个tomcat了,我们必须修改其中一个tomcat的配置,例如修改tomcatb。找到tomcatb的conf目录的server.xml,将其中出现80位置全部修改为90(此时html端口变为9080,而ajp协议变为9009,应用程序主要是通过html端口访问,而apache是通过ajp协议与tomcat通讯的);

3、mod_jk-1.2.28-httpd-2.2.3.so   下载地址:http://download.csdn.net/source/1599820(有试过mod_jk的其他版本,实验不成功)

三、配置:
1、实现apache请求转发多个tomcat
1)在Apache的安装目录下的modules目录下,找到httpd.conf文件,打开此文件,搜索#LoadModule,在这些屏蔽信息#LoadModule后加上
LoadModule jk_module modules/mod_jk-1.2.28-httpd-2.2.3.so
让httpd加载jk_module模块。

再在该文件最后加上如下内容:
#告诉apache workers文件的位置
JkWorkersFile "%ApacheHomeDir%/conf/workers.properties"
#日志
JkLogFile "%ApacheHomeDir%/logs/mod_jk.log"
#日志级别
JkLogLevel warn
#路径满足/jsp-examples 或 /jsp-examples/* 给work1处理
JkMount /jsp-examples worker1
JkMount /jsp-examples/* worker1
#路径满足/servlets-examples 或 /servlets-examples/* 给work2处理
JkMount /servlets-examples worker2
JkMount /servlets-examples/* worker2

2)在 "%ApacheHomeDir%/conf 目录下创建workers.properties文件,内容如下:
worker.list = worker1,worker2

worker.worker1.port = 8009
worker.worker1.host = localhost
worker.worker1.type = ajp13

worker.worker2.port = 9009
worker.worker2.host = localhost
worker.worker2.type = ajp13

3)重启两个tomcat和apache,访问如下地址:
http://localhost/jsp-examples
http://localhost/servlets-examples
注意:由于apache使用的是80端口,通过80端口可以访问到两个tomcat中自带的示例应用程序,故apache完成了请求从apache到tomcat的转发;

2、实现负载均衡与会话粘滞:
1)修改 "%ApacheHomeDir%/conf/workers.properties" 文件,其内容为:
# balancer 为逻辑名
worker.list = balancer

# worker.balancer要与上面的balancer同名;lb=load balance
worker.balancer.type = lb
# 承担分发工作的tomcat
worker.balancer.balance_workers = worker1,worker2
# B策略=busy 根据繁忙系数来决定请求分配
worker.balancer.method = B
# 说明这个负载均衡器会实现会话粘滞功能(可参考官方说明,各版本tomcat配置会不一样)
worker.balancer.sticky_session = 1

worker.worker1.port = 8009
# 远程服务器则修改为服务器的ip
worker.worker1.host = localhost
worker.worker1.type = ajp13
# 负载均衡器根据这参数来决定该服务器使用的频率
worker.worker1.lbfactor = 1

worker.worker2.port = 9009
worker.worker2.host = localhost
worker.worker2.type = ajp13
worker.worker2.lbfactor = 1

2)为tomcat的Engine配置jvmRoute参数
打开tomcat 的 server.xml文件,找到Engine,在此标签内加上jvmRoute="worker1",另外一个tomcat加上jvmRoute="worker2"
此处的work1和work2要与apache 的 conf/workers.properties配置的work名称对应,这样apache才知道是哪个tomcat来处理请求;

3)修改apache的httpd.xml文件,其内容如下:
JkMount /jsp-examples balancer
JkMount /jsp-examples/* balancer

JkMount /servlets-examples balancer
JkMount /servlets-examples/* balancer
从而将之前交给work1和work2的请求,全部交给balancer来处理。

4)修改tomcat的server.xml文件,去掉Cluster注释:
分别修改两个tomcat的server.xml文件,分别去掉Cluster注释,并修改tcpListenPort配置,将其中一个改为4002即可。

5)配置集群应用:
找到你要集群的项目,web.xml文件