Tomcat负载均衡和集群环境的搭建

tomcat集群搭建详细步骤 教你如何一步一步搭建tomcat集群,步骤超详细,经过实际验证过,很好用 立即下载

原文:http://hechuanzhen.iteye.com/blog/1673425

实现此集群的方法参考了网上的很多文章,但由于很多文章都表明是原创的,故无法知道整个操作流程的真正作者是谁。下面就是我用我们真实的项目去实现这个过程。同时修复这过程中一些问题。以下的所有步骤均为亲自测试,并且是搭建成功的。 
而且下面有附件,是搭建符合均衡和集群所需材料,全部准备齐全。

而且下面有附件,是搭建符合均衡和集群所需材料,全部准备齐全。  
1.准备条件 
材料本次搭建所用具体版本
ApacheApache 2.2.15    (用于分发请求)
Tomcat  N个apache-tomcat-6.0.26.zip  2个  (根据需求准备N个免安装的tomcat)
Mod_jkmod_jk-1.2.30-httpd-2.2.3.so (注意,这个需要和apache的版本匹配。2.2.3的mod_jk用于匹配Apache 2.2.X版本)
用于部署的测试项目cms_gsics

材料下载地址
Apache2.2http://httpd.apache.org/download.cgi
Tomcat6.0.26http://tomcat.apache.org/download-60.cgi
Mod_jk-1.2.30http://tomcat.apache.org/download-connectors.cgi

2. 安装apache 和 tomcat 
将apache(一个.msi的安装包)安装到硬盘上, 然后将2个tomcat解压。(这里的安装和解压不限定具体目录,安装和解压到某个目录下即可)。 

这里我将apache2.2安装到D:\Apache Software Foundation\。2个tomcat也解压到同一个目录下。 

接着检查2个Tomcat,以及apache是否能正常启动。 
3.   对apache 配置负载均衡 
(1)取出下载的mod_jk-1.2.30-httpd-2.2.3.so。将其放置到Apache2.2\modules目录下。 

(2)打开Apache2.2\conf\ httpd.conf文件。在其末尾添加上一行: 

include "D:\Apache Software Foundation\Apache2.2\conf\mod_jk.conf" 
即调用conf目录下的mod_jk.conf这个配置文件。当然,apache conf目录下原来是没有这个文件的。我们需要自己新建这个文件。 
(3)在conf目录下新建Mod_jk.conf内容如下: 

#加载mod_jk Module 

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

#指定 workers.properties文件路径 

JkWorkersFile conf/workers.properties 

# 设置日志存放路径   
JkLogFile logs/mod_jk.log 
# 设置日志级别 [debug/error/info]   
JkLogLevel info   
# 设置日志格式   
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"  
# JkOptions indicate to send SSL KEY SIZE,   
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories   
# JkRequestLogFormat set the request format   
JkRequestLogFormat "%w %V %T" 

#指定那些请求交给tomcat处理,"controller"为在workers.propertise里指定的负载分配控制器 

#JkMount /*.jsp controller 
JkMount /*.* controller 
#JkMount /*.do controller 
第2行中的mod_jk-1.2.30-httpd-2.2.3.so,就是我们之前放到modules目录下的那个.so文件。这里的名字就根据放进去的实际名字来写。版本不同,名字也就不一样。当然,mod_jk-1.2.30-httpd-2.2.3.so这个文件允许自己重命名。重命名后,只要在这里相应的配置上重命名后的名字,不会影响这个插件的功能。 

第4行中conf/workers.properties文件也是不存在的,也需要我们自己建立。这个文件的作用是对用于均衡负载的 负载器进行具体的登记。(比如我们用的2个tomcat).换句话说,workers.properties就是对几个worker的登记表。我们的2个tomcat就作为2个worker被登记在这个文件中。而具体要如何进行登记,下面再具体说。 

第6行的作用就是配置apache对哪些请求进行转发。这里我按照网络上的教程,配置了对所有jsp页面的请求的转发。那么,当有jsp请求到达apache时,apache就会根据当时的负载情况,从worker中挑出负载低的那个worker,将这个jsp请求转发给他。(这里需要注意,当部署到tomcat上的项目有更多类型的请求的时候,需要在这里配置更多的请求规则)。而controller会在workers.peroperties中被配置。总的来说,转发规则的格式如下: 

JkMount + 过滤请求类型 + 处理器 
(4)接着,我们在conf目录下新建workers.properties内容如下: 

workers.tomcat1_home=D:\tomcat1 
workers.tomcat1_home=D:\tomcat2 
workers.java_home=C:\Program Files\Java\jdk1.6.0_10\jre 
#路径分隔符 
ps=\ 
#server 列表(tomcat1,tomcat2为别名) 
worker.list = controller #模块版本 

#worker.list = controller,Tomcat1,Tomcat2 #server 列表 

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

worker.tomcat1.port=10009 #ajp13 端口号,在tomcat下server.xml配置,默认8009 

worker.tomcat1.host=localhost  #tomcat的主机地址,如不为本机,请填写ip地址 

worker.tomcat1.type=ajp13 #定向包协议 

worker.tomcat1.lbfactor = 1  #server的加权比重,值越高,分得的请求越多 

#worker.tomcat1.redirect = Tomcat1 

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

worker.tomcat2.port=20009  #ajp13 端口号,在tomcat下server.xml配置,默认8009 

worker.tomcat2.host=localhost  #tomcat的主机地址,如不为本机,请填写ip地址 

worker.tomcat2.type=ajp13 #定向包协议 

worker.tomcat2.lbfactor = 1  #server的加权比重,值越高,分得的请求越多 

#worker.tomcat2.redirect = Tomcat2 

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

worker.controller.type=lb 

worker.controller.balanced_workers=tomcat1,tomcat2  #指定分担请求的tomcat 

worker.controller.sticky_session=False 

第一行,worker.list,列出了worker的列表。Tomcat1, tomcat2就是我们为2个tomcat的命名。而controller相当于包工头。他负责对2个(或者更多)的worker进行负载分配。在上面提到的Mod_jk.conf文件中配置的对jsp请求的处理器就是controller.在这里再由controller具体将任务分配给某一个tomcat. 

下面几行就是分别对worker的配置。Port, host等属性都需要根据tomcat的实际配置来填。 

实际上,这里对tomcat还有一个属性可以进行配置,即worker.tomcat2.activation = disabled 。就是对某一个tomcat的活动性进行禁用。这句配置的意思是,负载均衡启动的时候,其实负载都到tomcat1上面去。Tomcat2默认不参与负载。当tomcat1当掉的时候,通过worker.tomcat1.redirect = tomcat2 ,tomcat2就会自己启动起来,接替tomcat1继续工作。当然,这样就和负载均衡没有关系了。 
(5)到此,对apache的配置基本告一段落。如果集群中有更多的tomcat的话,请在worker.properties中进行配置。(注:当有6个tomcat进行集群的时候,为了提高性能, worker.properties中的 redirect和activation就可以起到作用。我们可以对tomcat两两配对,两两互相设置redirect,两个其中一个设置activation. 形成3对,这样,就可以处理意外宕机的情况,保证6台集群可以继续运行下去。) 
4.   Tomcat集群配置 

将2个tomcat分别解压后,用TC6_A,TC6_B 来区分下面的两个tomcat。  
(1)打开“ TC6_A ”文件夹下“ conf ”文件夹下的“ server.xml ”文件以及“ TC6_B ”文件夹下“ conf ”文件夹下的“ server.xml ”文件。 
提示:由于对各种网络端口及集群的配置内容都在 server.xml 文件中,因此想正确配置集群就需要修改各个 Tomcat 的 server.xml 配置文件。 
(2)找到 server.xml 配置文件中的“ Server ”配置项目,并进行修改。 

<Server port="8005" shutdown="SHUTDOWN"> 

<Server port="10005" shutdown="SHUTDOWN"> 

<Server port="20005" shutdown="SHUTDOWN"> 

说明:第一行为两个 Tomcat 修改前的情况,第二行为 TC6_A Tomcat 修改后的情况,第三行为 TC6_B Tomcat 修改后的情况。 
(3)找到 server.xml 配置文件中的相应“ Connector ”配置项目,并进行修改。 

修改前内容如下: 
<!-- Define an AJP 1.3 Connector on port 8009 --> 

<Connector port = "8009" protocol = "AJP/1.3" redirectPort = "8443" /> 

TC6_A 中修改后内容如下: 

<!-- Define an AJP 1.3 Connector on port 8009 --> 

<Connector port = " 10009 " protocol = "AJP/1.3" redirectPort = " 10043 " /> 

TC6_B 中修改后内容如下: 
<!-- Define an AJP 1.3 Connector on port 8009 --> 

<Connector port = " 20009 " protocol = "AJP/1.3" redirectPort = " 10043 " /> 

提示:此步骤目的是修改 AJP Connector 端口。 
(4) 
找到 server.xml 配置文件中的另一个相应“ Connector ”配置项目,并进行修改。 

修改前内容如下: 
<Connector port = "8080" protocol = "HTTP/1.1" 

connectionTimeout = "20000" 

redirectPort = "8443" /> 

TC6_A 中修改后内容如下: 
<Connector port = " 10001 " protocol = "HTTP/1.1" 

connectionTimeout = "20000" 

redirectPort = " 10043 " /> 

TC6_B 中修改后内容如下: 
<Connector port = " 20001 " protocol = "HTTP/1.1" 

connectionTimeout = "20000" 

redirectPort = " 20043 " /> 

提示:此步骤目的是修改 HTTP Connector 端口,其中的“ 10001 ”与“ 20001 ”是未来通过浏览器访问集群中各个 Tomcat 实例的 HTTP 端口。 
(5)通过修改 Engine 配置选项,配置集群中每个 Tomcat 实例的名称。 

修改前内容如下: 
<!-- You should set jvmRoute to support load-balancing via AJP ie : 

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

--> 

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

TC6_A 中修改后内容如下: 
<Engine name = "Standalone" defaultHost = "localhost" jvmRoute = " Tomcat1 "> 

<!-- You should set jvmRoute to support load-balancing via AJP ie : 

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

--> 

TC6_B 中修改后内容如下: 
<Engine name = "Standalone" defaultHost = "localhost" jvmRoute = " Tomcat2 "> 

<!-- You should set jvmRoute to support load-balancing via AJP ie : 

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

--> 

提示:请读者注意在修改过程中要注释掉原来 name 为 Catalina 的 Engine 配置项目,将 name 为 Standalone 的 Engine 配置项目的注释去掉并修改 jvmRoute 属性。 
(6)修改配置文件中的 Cluster 配置项目,对集群的各项参数进行设置。 

修改前内容如下: 
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" /> 

TC6_A 中修改后内容如下: 
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"> 

                     <Channel className="org.apache.catalina.tribes.group.GroupChannel"> 

            <Membership className="org.apache.catalina.tribes.membership.McastService" 

                        address="224.0.0.1" 

                        port="45564" 

                        frequency="500" 

                        dropTime="3000"/> 

            <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" 

                      address="auto" 

                      port="4001" 

                      autoBind="100" 

                      selectorTimeout="5000" 

                      maxThreads="6"/> 



            <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter"> 

              <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/> 

            </Sender> 

            <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/> 

            <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/> 

          </Channel> 

               

                <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" 

                 filter=""/> 

          <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/> 



          <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer" 

                    tempDir="/tmp/war-temp/" 

                    deployDir="/tmp/war-deploy/" 

                    watchDir="/tmp/war-listen/" 

                    watchEnabled="false"/> 



          <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/> 

          <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/> 

       </Cluster> 
TC6_B 中修改后内容如下: 
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"> 

                     <Channel className="org.apache.catalina.tribes.group.GroupChannel"> 

            <Membership className="org.apache.catalina.tribes.membership.McastService" 

                        address="224.0.0.1" 

                        port="45564" 

                        frequency="500" 

                        dropTime="3000"/> 

            <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" 

                      address="auto" 

                      port="4002" 

                      autoBind="100" 

                      selectorTimeout="5000" 

                      maxThreads="6"/> 



            <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter"> 

              <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/> 

            </Sender> 

            <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/> 

            <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/> 

          </Channel> 

               

                <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" 

                 filter=""/> 

          <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/> 



          <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer" 

                    tempDir="/tmp/war-temp/" 

                    deployDir="/tmp/war-deploy/" 

                    watchDir="/tmp/war-listen/" 

                    watchEnabled="false"/> 



          <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/> 

          <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/> 

       </Cluster> 
测试项目集群配置: 

(1)    修改cma_gsics项目WEB-INF下的web.xml,在<web-app></web-app>标签中添加  <distributable/> 这句话 

所有需要集群的web项目,其web.xml中都必须添加<distributable/>这个定义。 

到此我们的集群和负载均衡已经搭建完毕,把我们的cma_gsics项目部署到两个tomcat中,然后依次启动两个tomcat,启动成功之后,在开始--所有程序---Apche HTTP 2.2.4 Server启动Apache(start Apache in Console),然后查看Apache安装路径下的conf文件夹下httpd.conf文件,找到 #Listen 12.34.56.78:80  Listen 127.0.0.1:81 查看我们绑定的IP地址和Apache的端口号,然后通过在浏览器输入:http://127.0.0.1:81来访问Apache,如果Apache启动成功,则进一步测试两个tomcat的负载均衡,http://127.0.0.1:81/cma_gsics/index.jsp查看可否正常访问到cma_gsics项目。然后再在cma_gsics中用servlet 写一个简单的登陆方法,在dopost中加入 String sessionid = request.getSession().getId(); 
System.out.println(sessionid+"------------");
,在登陆完毕提交的success.jsp页面不断刷新,查看后台输出信息,如果搭建成功的话,可以看到后台输出信息是两个tomcat轮流替换的效果,如果不是,则再根据出现问题进行调整。
RK3588上从零部署Facenet人脸识别:PyTorch转ONNX再到RKNN的完整避坑指南 本文提供了在RK3588开发板上从零部署Facenet人脸识别模型的完整指南。详细介绍了从PyTorch模型导出、转换为ONNX格式,再通过RKNN-Toolkit2转换为RKNN格式的完整流程,并重点分享了环境配置、算子兼容性处理、量化调优及板端部署中的关键步骤与避坑经验。 阅读详情

相关推荐

使用libx265对YUV进行h265编码

使用libx265对YUV进行h265编码

Embedded engineer 3078

nginx集成tomcat8负载均衡

参考:https://www.jianshu.com/p/1059fdf786fe点击打开链接

youthshadows的博客 262

nature子刊:MCNN基于电池故障诊断的模型约束的深度学习方法

本研究提出了一种基于模型约束神经网络(MCNN)的锂离子电池在线故障诊断方法,整合物理模型与深度学习,有效解决了随机工况下传统方法诊断精度低、依赖故障样本等问题。通过统计修正电池包模型和双向LSTM网络,实现了电池状态的高精度预测(平均RMSE 3.9%),并设计模型耦合自动编码器提取可解释特征。在包含18.2百万条真实车辆数据的验证中,该方法故障检测TPR在FPR=0.1时达85%,较基准方法提升超46.5%,且能提前30分钟预警内部短路等故障。研究还展示了算法在跨电池包结构迁移中的优越性,为工业应用提供

hasakie的博客 1758

实践中整理出tomcat集群和负载均衡

实践中整理出tomcat集群和负载均衡 (一)环境说明 (1)服务器有4台,一台安装apache,三台安装tomcat (2)apache2.0.55、tomcat5.5.15、jk2.0.4、jdk1.5.6或jdk1.4.2 (3)ip配置,一台安装apache的ip为192.168.0.88,三台安装tomcat的服务器ip分别为192.168.0.1/2/4 (二)安装过程 (1)在三台要...

zhjh17426的专栏 446

高云FPGA开发实战:手把手教你用ModelSim做功能仿真与时序分析(附Testbench写法)

本文详细介绍了高云FPGA开发中如何使用ModelSim进行功能仿真与时序分析,包括环境搭建、Testbench编写、波形调试和时序优化等实战技巧。通过具体案例和代码示例,帮助开发者掌握FPGA仿真验证的核心方法,提升设计可靠性。特别针对高云GW5A系列器件提供了专业的仿真库配置指南和时序分析策略。

weixin_30412167的博客 466

Hermes+MemOS记忆系统:用SQLite构建可编辑AI个人认知资产

AI记忆不是简单延长上下文或叠加RAG,而是构建具备分层存储、混合检索与自然语言反馈能力的个人认知资产。其核心原理在于将用户交互痕迹(L1)、偏好策略(L2)、结构化世界模型(L3)和结晶化技能统一管理,实现记忆的可追溯、可修正、可进化。技术价值体现在降低token消耗、提升长程一致性、支持离线演进,并突破传统‘静态快照’式知识库局限。典型应用场景包括个人知识助手、客服工单分析Agent、研发文档理解系统等。本文聚焦Hermes Agent与MemOS深度集成方案,详解SQLite作为ACID底座支撑L1/

weixin_33623304的博客 434

零基础搭建Tomcat集群(超详细)

零基础搭建Tomcat集群,配图超30+张,做到完完全全一步一步零基础带你搭建Tomcat集群!

緑水長流*z 1万+

基于Qt实现的轻量级CAD画图软件

基于Qt开发的轻量级CAD应用程序

weixin_44954230的博客 5658

Tomcat集群搭建超详细

Tomcat集群搭建超详细

weixin_50556778的博客 6347

Isaac Sim 车辆动力学:从参数调优到户外仿真的挑战与实战

本文深入探讨了Isaac Sim在车辆动力学仿真中的应用,从参数调优到户外场景模拟的实战经验。详细解析了悬架系统、轮胎物理模型等核心参数的设置技巧,并分享了应对户外仿真挑战的实用方案。通过Vehicle Wizard高级使用和传感器配置,帮助开发者高效完成车辆仿真与算法开发。

weixin_29192211的博客 404

国科大学习资料--计算机网络--历年考题1

国科大学习资料–计算机网络–历年考题1 1、假定有一个通信协议,每个分组都引入100字节的开销用于头和成帧,现在使用这个协议发送1M字节的数据(为方便计算,1M=10^6),然而在传递的过程中有一个字节被破坏了,因而包含该字节的那个分组被丢弃并重传。(1)当数据的分组大小为1000、5000、20000和40000字节时,计算相应(包括开销)的传递字节总数目。(2)计算分组大小的最优值是多少,即分组的大小为何值时总的传输字节数最少。(提示:最优值不是1000、5000、20000和40000字节中的一个)

无名何许人的博客 1181

Nginx+Tomcat7负载均衡和集群环境搭建

Nginx+Tomcat7负载均衡和集群环境搭建     2015-07-23 by tongyh 1.Nginx 1.1简介 Nginx(发音同 engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,最初供俄国大型的入口网站及搜寻引擎Rambler

forder的专栏 813

8.DJI-PSDK:一站式项目功能开发总结(空中气象站项目/激光甲烷检测项目)

本文将以一篇文章的幅度快速完成: 项目一:空中气象站项目; 项目二:激光甲烷项目; 项目所使用的PSDK来源于第0章节末尾的百度网盘;解压:Payload-SDK-3.8.zip代码所在目录:双击打开: 修改打印串口和相关波特率,我们修改如下: 进行相关编译选项配置如下: :

哒宰的博客 294

Windows+Nginx+Tomcat搭建负载均衡和集群环境同时实现Session共享

Windows+Nginx+Tomcat搭建负载均衡和集群环境同时实现session共享(一)

weixin_38044597的博客 244

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

zz Tomcat负载均衡和集群环境的搭建

Tomcat负载均衡和集群环境的搭建: 魏超 2010年3月31日星期三   注1:实现此集群的方法参考了网上的很多文章,但由于很多文章都表明是原创的,故无法知道整个操作流程的真正作者是谁。下面就是我用我们真实的项目去实现这个过程。同时修复这过程中一些问题。以下的所有步骤均为亲自测试,截图也是真实的。   注2:要完成集群和负载均衡配置,最简单步骤为完成所有标有下划线的操作。无下划线的部...

乐在其中/Leo在其中 146

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Windows+Nginx+Tomcat搭建负载均衡和集群环境同时实现session共享(一)

摘要:随着网站的访问量越来越多,所以就考虑给网站增加服务器了,现在比较流行的做法就是给网站做集群环境,下面我把我做的过程记录一下,方便日后查看,同时也希望可以帮助到有需要的朋友! 一:首先是环境: 1.jdk 1.6.0_45 2.tomcat 6.0.44 3.nginx 1.8.0 二:jdk,tomcat,nginx的安装: 1.jdk的安装请参考:点击打开链接 2.n

傾城如夢的专栏 335
上一篇: Struts2集成Spring
下一篇: Jboss6 配置数据源
SmarkMeng
博客等级 码龄16年 16粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值