Tomcat 集群配置(Linux环境)
2017-08-01 02:21
281 查看
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,loadbalancer2
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=81099
worker.worker2.host=localhost10
worker.worker2.type=ajp1311
worker.worker2.lbfactor=10012
13
worker.loadbalancer.type=lb14
worker.loadbalancer.balanced_workers=worker1,worker215
worker.loadbalancer.sticky_session=false16
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" ..../>
相关文章推荐
- linux环境下Apache+Tomcat集群配置
- 4_Linux环境下面_tomcat安装_tomcat_httpd集群配置
- apache+tomcat的集群配置(window环境linux环境)
- NGINX的原理、安装、配置以及使用tomcat在linux上搭载集群环境
- linux下apache+tomcat集群详细配置
- Linux 环境配置之 安装 Tomcat
- Apache负载均衡与Tomcat集群配置学习(Windows环境)
- Linux环境下Eclipse + Tomcat + MySQL 配置J2EE开发环境的方法
- Linux环境下Spring Boot项目内置Tomcat参数配置
- 集群环境配置Tomcat的bindOnInit参数控制在完全启动后才接受Request请求
- Linux环境配置-Tomcat
- Mac端 用的zoc7 部署linux 端网站 配置jdk tomcat环境
- apache+tomcat 负载均衡+session绑定 配置集群环境
- Linux---VMware 虚拟机安装 CentOS 7.3、配置JDK环境、Tomcat服务器、MySQL数据库
- 在Linux环境中nginx和tomcat集群
- Tomcat配置https环境(Windows+Linux)
- Linux下jsp开发环境,apache,tomcat服务器配置过程
- 【tomacat集群】Linux或 window配置多个Tomcat同时运行-完美解决-未来星开发团队-费元星
- Linux安装JRE tomcat配置java环境
- Linux环境上给tomcat配置软连接