您的位置:首页 > 运维架构 > Tomcat

Apache + MOD_JK + TOMCAT实现集群和负载均衡配置指南

2011-03-07 15:37 736 查看


Apache + MOD_JK + TOMCAT实现集群和负载均衡配置指南

对于Web应用的集群学习我是从Tomcat5.5开始的,下面是我的实际操作过程和一些体会。

第一部分 环境介绍

负载均衡

×××××××××××××××××

操作系统:windows xp

IP地址 :192.168.1.200

Apache:apache_2.2.13-win32-x86-openssl-0.9.8k.msi

 mod_jk:mod_jk-1.2.28-httpd-2.2.3.so(for windows)

集群环境Tomcat1

×××××××××××××××××

操作系统:SUSE Linuxe server 10

IP地址 :192.168.1.114

Tomcat :apache-tomcat-5.5.28

集群环境Tomcat2

×××××××××××××××××

操作系统:SUSE Linuxe server 10

IP地址 :192.168.1.113

Tomcat :apache-tomcat-5.5.28

第二部分 负载均衡配置

第一步:安装apache,安装目录为C:/Apache2.2。

第二步:将mod_jk-1.2.28-httpd-2.2.3.so文件复制到目录%apache_home%/modules目录下

第三步:修改配置文件%apache_home%/conf/httpd.conf

在文件%apache_home%/conf/httpd.conf的最末尾增加如下行:include conf/mod_jk.conf

view plain
copy to clipboard
print
?

#zhangzk

include conf/mod_jk.conf

#zhangzk
include conf/mod_jk.conf

第四步:在目录%apache_home%/conf下面创建文件mod_jk.conf

view plain
copy to clipboard
print
?

#加载mod_jk Module

LoadModule jk_module modules/mod_jk-1.2.28-httpd-2.2.3.so

#

#指定 workers.properties文件路径

JkWorkersFile conf/workers.properties

#

#指定哪些请求交给tomcat处理

#"controller"为在workers.propertise里指定的负载分配控制器名

JkMount /*.jsp controller

#加载mod_jk Module
LoadModule jk_module modules/mod_jk-1.2.28-httpd-2.2.3.so
#
#指定 workers.properties文件路径
JkWorkersFile conf/workers.properties
#
#指定哪些请求交给tomcat处理
#"controller"为在workers.propertise里指定的负载分配控制器名
JkMount /*.jsp controller

第五步:在目录%apache_home%/conf下创建文件workers.properties

view plain
copy to clipboard
print
?

#server

worker.list = controller

#========tomcat1========

worker.tomcat1.port=8009

worker.tomcat1.host=192.168.1.114

worker.tomcat1.type=ajp13

worker.tomcat1.lbfactor = 1

#========tomcat2========

worker.tomcat2.port=8009

worker.tomcat2.host=192.168.1.113

worker.tomcat2.type=ajp13

worker.tomcat2.lbfactor = 1

#========controller,负载均衡控制器========

worker.controller.type=lb

worker.controller.balanced_workers=tomcat1,tomcat2

worker.controller.sticky_session=1

#server
worker.list = controller
#========tomcat1========
worker.tomcat1.port=8009
worker.tomcat1.host=192.168.1.114
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor = 1
#========tomcat2========
worker.tomcat2.port=8009
worker.tomcat2.host=192.168.1.113
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor = 1

#========controller,负载均衡控制器========
worker.controller.type=lb
worker.controller.balanced_workers=tomcat1,tomcat2
worker.controller.sticky_session=1

至此负载均衡服务器已经配置完毕啦。

分别启动tomcat1和tomcat2已经apache就可以实现对于*.jsp的请求进行1:1分发到tomcat1和tomcat2上。

第三部分 tomcat集群配置

第一步:将%tomcat_home%/conf/server.xml文件中的集群配置节点的注释去掉

即将该文件中如下部分

view plain
copy to clipboard
print
?

<!--

<Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"

managerClassName="org.apache.catalina.cluster.session.DeltaManager"

expireSessionsOnShutdown="false"

useDirtyFlag="true"

notifyListenersOnReplication="true"
>

......

</Cluster>

-->

<!--
<Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"
managerClassName="org.apache.catalina.cluster.session.DeltaManager"
expireSessionsOnShutdown="false"
useDirtyFlag="true"
notifyListenersOnReplication="true">
......
</Cluster>
-->

修改为如下形式(......表示中间有代码段没有展示出来)

view plain
copy to clipboard
print
?

<Cluster className=
"org.apache.catalina.cluster.tcp.SimpleTcpCluster"

managerClassName="org.apache.catalina.cluster.session.DeltaManager"

expireSessionsOnShutdown="false"

useDirtyFlag="true"

notifyListenersOnReplication="true"
>

......

</Cluster>

<Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"
managerClassName="org.apache.catalina.cluster.session.DeltaManager"
expireSessionsOnShutdown="false"
useDirtyFlag="true"
notifyListenersOnReplication="true">
......
</Cluster>

上述变更在集群环境tomcat1和tomcat2上都需要同样的处理。

第二步:将%tomcat_home%/conf/server.xml文件中的如下代码作出变更

>>>集群环境Tomcat1

view plain
copy to clipboard
print
?

<Engine name=
"Catalina"
defaultHost=
"localhost"
>

<Engine name="Catalina" defaultHost="localhost">

修改为

view plain
copy to clipboard
print
?

<Engine name=
"Standalone"
defaultHost=
"localhost"
jvmRoute=
"tomcat1"
>

<Engine name="Standalone" defaultHost="localhost" jvmRoute="tomcat1">

>>> 集群环境Tomcat2

view plain
copy to clipboard
print
?

<Engine name=
"Catalina"
defaultHost=
"localhost"
>

<Engine name="Catalina" defaultHost="localhost">

修改为

view plain
copy to clipboard
print
?

<Engine name=
"Standalone"
defaultHost=
"localhost"
jvmRoute=
"tomcat2"
>

<Engine name="Standalone" defaultHost="localhost" jvmRoute="tomcat2">

第三步:

在需要部署到Tomcat中的web应用程序的WEB-INFO/web.xml中增加如下代码

view plain
copy to clipboard
print
?

<distributable/>

<distributable/>

经过上述3大步骤Tomcat的集群配置就完成啦。

在WEB应用程序中当对session.setAttribute(arg1,arg2)方法进行操作的时候,就可以完成Session的复制了。

第4部分 注意事项

在普通的Web应用程序中如下代码片段即可完成Session中属性的变更

view plain
copy to clipboard
print
?

Object o = request.getSession(
true
).getAttribute(LOGIN_USER_INFO_KEY);

UserInfo ui = (UserInfo) o;

ui.setAccessPageCount(ui.getAccessPageCount() + 1);

Object o = request.getSession(true).getAttribute(LOGIN_USER_INFO_KEY);
UserInfo ui = (UserInfo) o;
ui.setAccessPageCount(ui.getAccessPageCount() + 1);

但是在集群部署环境下该处理是不能完成Session复制的,必须用如下代码片段才可以

view plain
copy to clipboard
print
?

Object o = request.getSession(
true
).getAttribute(LOGIN_USER_INFO_KEY);

UserInfo ui = (UserInfo) o;

ui.setAccessPageCount(ui.getAccessPageCount() + 1);

request.getSession().setAttribute(LOGIN_USER_INFO_KEY, ui);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐