apache+tomcat+modjk做负载均衡文档格式.docx
- 文档编号:20462907
- 上传时间:2023-01-23
- 格式:DOCX
- 页数:8
- 大小:40KB
apache+tomcat+modjk做负载均衡文档格式.docx
《apache+tomcat+modjk做负载均衡文档格式.docx》由会员分享,可在线阅读,更多相关《apache+tomcat+modjk做负载均衡文档格式.docx(8页珍藏版)》请在冰豆网上搜索。
ii.
对于已有会话(http中包含session信息)的请求会发送给创建该会话的tomcat
iii.
当创建会话的tomcat无法响应时,发送给该tomcat指定的备份tomcat。
如果没有指定,则视为新会话处理。
Tomcat要做的:
处理mod_jk发送过来的请求并返回结果。
之前提到如果某一tomcat无法响应转由其他tomcat处理时,原有的session信息将会丢失。
为解决此问题,于是就有了session同步的概念,即多个服务器之间共享session,当某一服务器不同提供服务时不会导致用户session丢失。
Tomcat的session共享是基于ip组播协议实现的。
()这里只需要知道session同步是可以通过配置实现的,并且是由Tomcat实现的而非mod_jk。
至于具体细节请参考另一篇文章()
了解了原理之后,配置起来就水到渠成了。
3
约束
代码必须符合以下几点要求:
1.session
中的
attribute必须继承java.io.Serializable
2.程序中如果存在全局变量,需要考虑多个Tomcat间变量同步的问题。
4
部署
a)
安装tomcat、apache2.2略。
网上资料大把,不再重复。
注意事项:
apache需要设置最大并行连接数,不同的操作系统配置的方式不同,因为不同的系统使用的是不同的多路处理模块。
配置视情况而定。
安装并配置mod_jk
i.安装mod_jk:
把下载的mod_jk-1.2.28-httpd-2.2.3.so改名为mod_jk2.so放到apache的modules目录下。
修改apache的conf目录下的httpd.conf,在文件最后加入一行includeconf/mod_jk2.conf,在conf目录下创建mod_jk2.conf文件,内容如下:
#加载mod_jkModule
LoadModulejk_modulemodules/mod_jk-1.2.30-httpd-2.2.3.so
#指定
workers.properties文件路径
JkWorkersFileconf/workers.properties
#指定log目录
JkLogFilelogs/mod_jk2.log
#指定那些请求交给tomcat处理,"
controller"
为在workers.propertise里指定的负载分配控制器
JkMount/*controller
ii.配置mod_jk:
worker.list=controller,tomcat4,tomcat3,tomcat2,tomcat1
#server列表tomcat1-tomcat4命名必须与tomcat配置文件server.xml中的jvmRoute相对应
#========tomcat1========
worker.tomcat1.port=8009
#ajp13端口号,在tomcat下server.xml配置,默认8009
worker.tomcat1.host=localhost
#tomcat的主机地址,如不为本机,请填写ip地址
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor=1
#server的加权比重,值越高,分得的请求越多
worker.tomcat1.redirect=tomcat2
#指定tomcat1无法提供服务后由tomcat2继续提供服务
#========tomcat2========
worker.tomcat2.port=8010
worker.tomcat2.host=localhost
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor=1
worker.tomcat2.redirect=tomcat1
#指定tomcat2无法提供服务后由tomcat1继续提供服务
worker.tomcat2.activation=d
#指定tomcat2只接收属于它的session的请求,隐含意思是新的请求不会发给tomcat2。
#如果tomcat1于tomcat2实现session共享且tomcat1挂掉时,tomcat2可以且只能为session属于tomcat1的请求提供服务。
(可能比较绕,需要费几个脑细胞)
#========tomcat3========
worker.tomcat3.port=8011
worker.tomcat3.host=localhost
worker.tomcat3.type=ajp13
worker.tomcat3.lbfactor=1
worker.tomcat3.redirect=tomcat4
#========tomcat4========
worker.tomcat4.port=8012
worker.tomcat4.host=localhost
worker.tomcat4.type=ajp13
worker.tomcat4.lbfactor=1
worker.tomcat4.redirect=tomcat3
worker.tomcat4.activation=d
#========controller,负载均衡控制器========
worker.controller.type=lb
worker.controller.balanced_workers=tomcat4,tomcat3,tomcat2,tomcat1
#指定分担请求的tomcat
worker.controller.sticky_session=1
c)
配置tomcat
<
Serverport="
8005"
shutdown="
SHUTDOWN"
>
如果是同一台电脑,port不能重复
ii.
Enginename="
Catalina"
defaultHost="
localhost"
改为<
defaultHost="
jvmRoute="
tomcat1-4"
iii.设置session共享,Engine节点下插入以下配置:
<
ClusterclassName="
org.apache.catalina.ha.tcp.SimpleTcpCluster"
channelSendOptions="
8"
ManagerclassName="
org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="
false"
notifyListenersOnReplication="
true"
/>
ChannelclassName="
org.apache.catalina.tribes.group.GroupChannel"
MembershipclassName="
org.apache.catalina.tribes.membership.McastService"
address="
228.0.0.4"
port="
45564"
frequency="
500"
dropTime="
3000"
ReceiverclassName="
org.apache.catalina.tribes.transport.nio.NioReceiver"
auto"
port="
4000"
selectorTimeout="
5000"
maxThreads="
6"
SenderclassName="
org.apache.catalina.tribes.transport.ReplicationTransmitter"
TransportclassName="
org.apache.catalina.tribes.transport.nio.PooledParallelSender"
/Sender>
InterceptorclassName="
org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"
org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"
/Channel>
ValveclassName="
org.apache.catalina.ha.tcp.ReplicationValve"
filter="
"
org.apache.catalina.ha.session.JvmRouteBinderValve"
DeployerclassName="
org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="
/tmp/war-temp/"
deployDir="
/tmp/war-deploy/"
watchDir="
/tmp/war-listen/"
watchEnabled="
ClusterListenerclassName="
org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"
org.apache.catalina.ha.session.ClusterSessionListener"
/Cluster>
Port需要特殊说明:
address和port都相同的tomcat视为一个集群,session共享是发生在集群内部的,因此这里我们将tomcat1,2为一组及port=45564,tomcat3,4为一组port=45565。
iv.
在tomcat中添加应用testGroup,在其根目录下增加index.jsp文件,index.jsp内容如下
%
session.setAttribute("
session1"
"
);
//tomcat2的则改为
session2"
以此类推
System.out.println("
==========================="
System.out.println(session.getAttribute("
));
System.out.println(session.getAttribute("
session3"
session4"
sessionId=
"
+session.getId());
%>
html>
body>
center>
h1>
Tomcat1<
/h1>
!
--tomcat2的则改为
Tomcat2以此类推-->
/body>
/html>
v.在web.xml加入<
distributable/>
即可
web-appxmlns="
xmlns:
xsi="
http:
//www.w3.org/2001/XMLSchema-instance"
xsi:
schemaLocation="
version="
2.5"
display-name>
testGroup<
/display-name>
/web-app>
5
测试
启动tomcat1-4
再启动apache
a)反复重启浏览器访问http:
//127.0.0.1/testGroup
你会发现只有tomcat1和tomcat3
接收到的请求。
(注意tomcat控制台打印信息)
访问http:
//127.0.0.1/testGroup,比如当前页面显示是tomcat1,此时关闭tomcat1,刷新页面,页面应该显示为tomcat2.并且tomcat2后台打印信息应为
==========
session1
session2
null
你会发现tomcat1,2之间实现了session共享
c)之后反复重启浏览器访问,你会发现页面显示的都是tomcat3,因为tomcat1挂了,tomcat2,4不接受新请求
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- apache tomcat modjk 负载 均衡