Tomcat 集群配置(Linux环境)
来源:互联网 发布:office2016 for mac 编辑:程序博客网 时间:2024/05/16 13:53
Tomcat 集群配置
在生产环境中,加入网站的访问量很大,为了提高访问速度,可以将多个Tomcat服务器与Apache服务器进行集成,在这些Tomcat中各自运行同一个WebApp,由这些Tomcat共同分担 Servlet/JSP 组件任务,这些Tomcat构成一个Cluster集群系统,能够提供高可靠性,高性能计算,负载平衡的优点;
Tomcat 集群需要 JK 插件的支持,其中主要依赖的组件有以下2个:
- Loadbalanacer:JK插件上的负载平衡器,负责为集群分配负荷,实现负载平衡;
- SimpleTcpCluster:每个Tomcat上的集群管理器,集群上的每个Tomcat通过集群管理器的TCP与其他Tomcat通信,实现HTTP会话的复制;
在进行Tomcat集群与Apache集成之前,要先完成Apache,Tomcat,JK插件的下载安装工作,详见:06. Tomcat与Apache集成(Linux环境)
以下是一个 Apache 下 Tomcat 集群的示例操作,为了方便演示,这些Tomcat位于同一个服务器上,同时这两个Tomcat上各自运行一个 helloapp 的JavaWeb应用,系统环境为 Linux;
1、配置集群系统的负载平衡器
1)将JK插件中的 mod_jk_linux.so 复制到 <APACHE_HOME >/moudules 下;
2)在<APACHE_HOME>/conf 下创建文件 workers.properties 文件,添加以下内容:
1
worker.list=worker1,worker2,loadbalancer
2
3
worker.worker1.port=8009 #工作端口
4
worker.worker1.host=localhost #Tomcat服务器地址
5
worker.worker1.type=ajp13 #JK类型
6
worker.worker1.lbfactor=100 #负载平衡参数
7
8
worker.worker2.port=8109
9
worker.worker2.host=localhost
10
worker.worker2.type=ajp13
11
worker.worker2.lbfactor=100
12
13
worker.loadbalancer.type=lb
14
worker.loadbalancer.balanced_workers=worker1,worker2
15
worker.loadbalancer.sticky_session=false
16
worker.loadbalancer.sticky_session_force=false
以上文件创建了2个AJP监听器worker:worker1,worker2,分别代表2个Tomcat服务器;
其中 lbfactor 参数设置工作符合,在本例中都设置为100,即会分担同样的工作负荷;
由于本例中两个Tomcat位于同一个服务器上,所有 port 参数必须设置为不同端口,假如两个Tomcat位于不同服务器,可以使用同一个端口;
本例还配置一个loadbalancer 的 workder,是负载平衡器,具有sticky_session和sticky_session_force 2个主要属性,
- sticky_session=flase,集群系统会进行会话复制,即一个浏览器客户端可以同多个Tomcat开展同一个会话,此时sticky_session_force对集群系统没什么影响;
- sticky_session=true,集群系统不会进行会话复制,即一个浏览器客户端只会同时和一个Tomcat进行会话;
- 此时 sticky_session_force=true,那么集群不会进行会话转移,比如浏览器绑定的会话Tomcat异常终止,会直接返回500;
- 此时 sticky_session_force=false,那么集群会进行会话转义,比如浏览器绑定的会话Tomcat异常终止,集群会将会话转移到其他Tomcat上;
3)修改<APACHE_HOME>/conf/httpd.conf 文件,在文件末尾添加以下配置:
1
LoadModule jk_module modules/mod_jk_linux.so
2
JkWorkersFile conf/workers.properties
3
JkLogFile logs/mod_jk.log
4
JkLogLevel debug
5
JkMount /*.jsp loadbalancer #JK转发规则
6
JkMount /helloapp/* loadbalancer #JK转发范围
4)分别修改2个 Tomcat 中 conf/server.xml 文件中的 AJP 连接器端口,确保它们同<APACHE_HOME>/conf/workers.properties 中的配置对应,主要要修改的是 <Connector> 的 AJP port 和 <Engine>的 jvmRoute,如下:
1
#Tomcat1 server.xml 部分
2
<Connector port="8009" protocol="AJP/1.3" />
3
<Engine name="Catalina" defaultHost="localhost" jvmRoute="worker1">
4
5
#Tomcat2 server.xml 部分
6
<Connector port="8109" protocol="AJP/1.3" />
7
<Engine name="Catalina" defaultHost="localhost" jvmRoute="worker2">
同时由于已经有Apache负责HTTP解析、接收客户端请求、转发请求,可以关闭Tomcat1,Tomcat2中的HTTP连接器,以提高Tomcat运行性能,即在它们的 server.xml 中间以下部分注释掉:
1
<!-- <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> -->
以上为配置负载平衡器的过程;
2、配置集群管理器
以上的配置,无法保证一个客户端访问集群中的一个会话过程中,保持Session ID 不变,要解决这样的问题,还要进行集群管理器的配置
1)分别修改 Tomcat1,Tomcat2 中的 conf/server.xml 文件,在<Engine>中添加<Cluster>,以启动Tomcat的集群管理器,以Tomcat1示例如下:
1
<Engine name="Catalina" defaultHost="localhost" jvmRoute="worker1">
2
3
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
4
channelSendOptions="8">
5
6
<Manager className="org.apache.catalina.ha.session.DeltaManager"
7
expireSessionsOnShutdown="false"
8
notifyListenersOnReplication="true"/>
9
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
10
<Membership className="org.apache.catalina.tribes.membership.McastService"
11
bind="127.0.0.1"
12
address="228.0.0.4"
13
port="45564"
14
frequency="500"
15
dropTime="3000"/>
16
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
17
address="auto"
18
port="4000"
19
autoBind="100"
20
selectorTimeout="5000"
21
maxThreads="6"/>
22
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
23
<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
24
</Sender>
25
26
<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
27
<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
28
</Channel>
29
30
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=""/>
31
<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
32
33
<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
34
tempDir="/tmp/war-temp/"
35
deployDir="/tmp/war-deploy/"
36
watchDir="/tmp/war-listen/"
37
watchEnabled="false"/>
38
39
<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
40
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
41
42
</Cluster>
关于<Cluster>的详细用法可以参考:
<CATALINE_HOME>/webapps/docs/cluster-howto.html
<CATALINE_HOME>/webapps/docs/config/cluster.html
2)分别修改Tomcat1,Tomcat2中的 helloapp 应用的 web.xml 文件,向其添加一个<distributable>标签;
1
<web-app>
2
<distributable />
3
.
4
</web-app>
当添加了该标签时,每当 Tomcat 启动该应用时,会为它创建 server.xml 中<Cluster>的<Manager>指定的会话管理器;
以上为配置集群管理器的过程,本示例中使用的是 DeltaManager 会话管理器,该管理器能够将一个服务器节点中的会话信息复制到集群上的其他所有服务器节点中,使得Tomcat1,Tomcat2中关于 helloapp 的会话信息是同步的;
DeltaManager 会话管理器适用于规模较小的集群中,如果集群规模比较庞大,适用这个会话管理器会很大地增加网络通信负荷,此时可以更换为 BackupManager 会话管理器,它只会将一个服务器节点中的会话信息备份到集群中其他的服务节点中,在servler.xml中的配置如下:
1
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
2
channelSendOptions="8">
3
<Manager className="org.apache.catalina.ha.session.BackupManager"
4
expireSessionsOnShutdown="false"
5
notifyListenersOnReplication="true"
6
mapSendOptions="6" />
7
8
</Cluster>
注意 Tomcat 集群是通过组播的形式通信的,如果Tomcat服务器上有多个网卡,或者使用了虚拟网卡,可能会导致组播失败,此时可以在该Tomcat的 server.xml 中配置<Cluster>的<Membership>,设置该 bind 属性为组播绑定地址(假设组播地址为127.0.0.1),如下:
1
<Membership className="org.apache.catalina.tribes.membership.McastService"
2
bind="127.0.0.1" ./>
阅读全文
0 0
- Tomcat 集群配置(Linux环境)
- apache+tomcat的集群配置(window环境linux环境)
- linux环境下Apache+Tomcat集群配置
- linux tomcat集群配置笔记
- linux tomcat集群配置笔记
- window环境Nginx+Tomcat集群配置
- 集群配置(一):Tomcat集群配置
- Tomcat配置https环境(Windows+Linux)
- Tomcat配置https环境(Windows+Linux)
- linux上配置tomcat集群(Apache+mod_jk)
- NGINX的原理、安装、配置以及使用tomcat在linux上搭载集群环境
- Mysql+Tomcat Linux环境配置
- linux环境配置tomcat问题
- linux环境下配置tomcat
- linux下tomcat环境配置
- linux下tomcat集群配置(转帖)
- linux下apache和tomcat集群配置
- Apache + Tomcat集群配置详解(linux)
- 萌新的linux之旅14
- linux下的文件归档与解压
- Tomcat与Apache集成(Linux环境)
- 读书笔记:分布式系统系统与概念(图灵丛书)
- Linux系统软件的安装
- Tomcat 集群配置(Linux环境)
- [第五季]9.CSS样式分类及背景样式
- java 多线程 android线程池
- Linux系统虚拟机安装管理
- HDU-3127-WHUgirls(完全背包)
- 在ubuntu16.04下创建cuda加速的docker镜像
- Unity Post 请求 非 www
- 【HDU】Tunnel Warfare 树状数组+二分
- C#三大迷宫生成算法
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
我十凶真龙
真凶难逃全集
真凶难逃演员表
真凶难逃免费观看
真凶难逃全集免费观看
真凶难逃全集观看
谁是真凶
秦岭大山真有十绝凶坟吗
呼格案真凶死刑
刘忠林案真凶
真凶难逃全集大结局
白银案真凶不是高承勇
李春才是真凶吗
钱仁凤案真凶罗某抓住
谁是真凶第一季
真凶难逃在哪可以看
真凶难逃剧情介绍
真凶在逃
真凶难逃剧情
真凶
真凶难逃免费看全集
呼格案真凶被执行死刑
我,十凶真龙
美剧谁是真凶第二季
谁是真凶20集在线播放
聂树斌其实就是真凶
南大案2018锁定真凶
病娇男神超凶萌
我家男神超凶萌
凶神柳满坡
凶神
凶神by柳满坡
凶神恶煞是什么生肖
快穿男神太凶萌
快穿之男神太凶萌
凶神医生
快穿逆袭男神超凶的
我养的神都超凶 龙鳞道
我养的神都超凶
凶神 柳满坡
凶神恶煞是什么意思