第四篇、Tomcat 集群

1.  前言

该篇中测试的机器发生了变更,在第一篇中设置的Apache  DocumentRoot "d:/deployment"修改为了DocumentRoot d:/cluster 。这个不影响实际操作,just换了台电脑。

在第一篇中讲了apache整合tomcat的,该篇中将阐述tomcat的集群.

2. 集群的概念

集群分类

■ 纵向集群 :VERTICAL CLUSTER 多个tomcat部署在同一台服务机上,CPU资源需要抢占,只能对内存进行拓展

■ 横向集群 : HORIZONTAL CLUSTER  tomcat和服务机一一对应,即一台服务器上部署一个tomcat。(可做大规模集群)

 核心概念

■ 负载均衡 :LOAD BALANCE  依据每个节点对应的权重大小分配需要处理的数据

■ 高可用性 : HIGH AVAILABLE 实际运行中只有一台服务器在工作,当其挂掉后其他服务器顶上

Tomcat 官网给出的结构图 :

    

 通过负载均衡,任务TASK分配给集群节点.

3. 集群

3.1 配置Apache

修改Apache  httpd.conf 文件 ,去掉第一篇中文件末尾追加的内容,在其后面追加如下内容:

LoadModule jk_module modules/mod_jk-1.2.31-httpd-2.2.3.so
JKWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
<VirtualHost *>
DocumentRoot d:/cluster
<Directory "d:/cluster/JMIE">
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

ServerAdmin ufida-hf:80
ServerName ufida-hf:80
DirectoryIndex index.html index.htm index.jsp index.action
ErrorLog logs/error_log.txt
CustomLog logs/access_log.txt common

JkMount /*WEB-INF cluster 
JkMount /servlet/* cluster
JkMount /*.jsp cluster
JkMount /*.do cluster
JkMount /*.json cluster
JkMount /*.action cluster
</VirtualHost>

   备注:这里发布的包名称为JMIE

在第一篇中使用的是 apj13 而这里使用的是cluster,那么这个cluster是哪里来的呢? 很显然是在worders.properties中进行配置,其内容如下:

worker.list = cluster
#node1
worker.node1.port = 8009
worker.node1.host = localhost
worker.node1.type = ajp13
worker.node1.lbfactor = 1 

#node2
worker.node2.port = 9009
worker.node2.host = localhost
worker.node2.type = ajp13
worker.node2.lbfactor = 1 

#cluster
worker.cluster.type = lb
worker.cluster.balance_workers = node1,node2
worker.cluster.sticky_session=0
worker.cluster.sticky_session_force=false
worker.connection_pool_size=3000
worker.connection_pool_minsize=40
worker.connection_pool_timeout=10000
  worker.node1.host = localhost

worker.节点名称.host 表示的为节点对应的主机名 ,这里为纵向集群,都是在本地配置,如果需要横向集群直接修改对应的host即可。

  worker.cluster.type = lb 

表示集群方式为负载均衡,其中worder.节点名称.lbfactor 表示节点对应的权重,权重越到处理的TASK越多,这里为1:1 即平均分配

  worker.cluster.sticky_session=0
  worker.cluster.sticky_session_force=false

保证session可在各节点进行复制,即关闭一台服务器后,我们登录系统的session会被转移到另外一台服务器上,客户端仍能正常操作。

   worker.cluster.balance_workers = node1,node2

表示两个节点tomcat对应名称为node1,node2 。

3.2 配置TOMCAT

由上可以需要两个tomcat ,解压两个tomcat

    修改tomcat node1 中的conf/server.xml文件

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

节点2 在修改为8006

 <Connector port="8080" protocol="HTTP/1.1"   redirectPort="8443" />

节点2 修改为

 <Connector port="9090" protocol="HTTP/1.1"   redirectPort="9443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"  />

节点2 修改为

<Connector port="9009" protocol="AJP/1.3" redirectPort="9443"  />

以上为设置tomcat在节点的名称,节点2修改为node2 ,随后在其下方加入:

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
                  channelSendOptions="6">
              <Manager className="org.apache.catalina.ha.session.BackupManager"
                    expireSessionsOnShutdown="false"
                    notifyListenersOnReplication="true"
                    mapSendOptions="6"/>
           <Channel className="org.apache.catalina.tribes.group.GroupChannel">
             <Membership className="org.apache.catalina.tribes.membership.McastService"
                         bind="127.0.0.1"
                         address="228.0.0.4"
                         port="45564"
                         frequency="500"
                         dropTime="3000"/>
             <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                       address="auto"
                       port="4001"
                       selectorTimeout="100"
                       maxThreads="6"/>
             <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
               <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender" timeout="60000"/>
             </Sender>
             <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
             <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
             <Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>
           </Channel>
              <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
                  filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>
              <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
         </Cluster>

   节点2修改为4001 。

通过下图

可知道,为了集群,需要在应用中的web.xml末尾追加一个<distributable/>元素 。

3.3 Tomcat调优

通过以上的操作,集群环境已经成功搭建了,为了让tomcat能跑的更high,下面来对tomcat进行调优  。

3.3.1 优化启动参数

在tomcat的bin目录下修改catalina.bat 文件,在该文件头上追加如下信息

set JAVA_OPTS=-server -Xms1000M -Xmx1000M 

其中 server 表示tomcat 允许在生产环境

-Xms 和 -Xmx 表示最小、最大JVM内存(如果是win32的系统会受到系统内存的限制) 两者设置为一样,可通过如下命令来测试其合适的值

java -Xmx1200m -version

该值需要手动设置 .

tomcat的启动参数还有很多,详细可自行查看官方文档:http://tomcat.apache.org/tomcat-7.0-doc/index.html

   3.3.2 TOMCAT本身优化

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

替换为:

    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443"
   URIEncoding="UTF-8"  minSpareThreads="25" maxSpareThreads="75"
                            enableLookups="false" disableUploadTimeout="true" connectionTimeout="20000"
                            acceptCount="300"  maxThreads="300" maxProcessors="1000" minProcessors="5"
                            useURIValidationHack="false"
                                      compression="on" compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
/>

解释如下:

    
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443"
     URIEncoding="UTF-8"  设置编码     minSpareThreads="25"  最大线程数      maxSpareThreads="75"   最小线程数
      enableLookups="false"  关闭DNS查询      disableUploadTimeout="true"       connectionTimeout="20000"
      acceptCount="300"  线程数达到maxThreads后,后续请求会被放入一个等待队列      maxThreads="300"   最大并发数      maxProcessors="1000"        minProcessors="5"
      useURIValidationHack="false"  减少对url的不必要的检查
      compression="on"   打开压缩功能      compressionMinSize="2048"  启用压缩的输出内容大小 默认为2KB
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"  压缩类型
/>

同样的道理也可以去修改8080端口,这里集群我们只需要用到8009端口,将节点2同样优化后可启动两个Tomcat

3.4  测试集群

将工程分别拷贝到两个TOMCAT中的webapps目录下

重启apache ,后启动两个tomcat

输入  http://192.168.1.5/JMIE  访问

关闭正在运行的tomcat后可发现扔可继续操作.

该篇结束

时间: 2024-10-06 19:35:00

第四篇、Tomcat 集群的相关文章

[原创]zero downtime using goldengate实现oracle 12C升级系列 第四篇:集群安装

1. 图形化界面,我用的软件是MobaXterm Personal Edition, 直接ssh [email protected]_server,然后./runInstaller就可以弹出图形化界面,当然还有其他工具如vnc可以实现图形化,这里就略过不提了,下面直接开始安装. 2.关于软件下载,在mos上面下载 Installation Type Zip File Oracle Database (includes Oracle Database, Oracle RAC, and Deinst

[CoreOS 转载] CoreOS实践指南(四):集群的指挥所Fleet

转载:http://www.csdn.net/article/2015-01-14/2823554/2 摘要:CoreOS是采用了高度精简的系统内核及外围定制的操作系统.ThoughtWorks的软件工程师林帆将带来“漫步云端:CoreOS实践指南”系列文章,介绍CoreOS精华和推荐的实践方法.本文为基础第四篇:集群的指挥所Fleet. 集群上的服务生命周期 刚刚的启动流程看起来很简单,不是么?在实际的使用中,如果为了省事,用Fleet启动一个服务,这样做就可以了.但这种做法其实会带来的服务管

(apache+tomcat集群+memcached番外篇)单台tomcat的session信息的2种持久化方式

为什么要实现搭建tomcat集群环境呢?主要因为单个tomcat无论从吞吐量和并发数上,会达到一定的极限.如果访问量超过单个tomcat的承受能力的话,tomcat一般要么拒绝提供服务,要么直接宕掉.所以,必须要依靠tomcat集群技术.举个最简单的例子,拿"送快件"比喻,如果一个人,5分钟送一件,一小时之内,送10个,一个人完全能胜任这项工作.假设现在到了双十一,要求1小时,送100个, 那怎么办?只能安排更多的人加入"送快件"这项工作中来.这其实和集群一个道理.

转载 Tomcat集群配置学习篇-----分布式应用

Tomcat集群配置学习篇-----分布式应用 现目前基于javaWeb开发的应用系统已经比比皆是,尤其是电子商务网站,要想网站发展壮大,那么必然就得能够承受住庞大的网站访问量:大家知道如果服务器访问量过大,就会出现服应用务器崩溃的情况,这个时候怎么办,难道就只能去重启服务器吗?好,如果是一般的小型公益网站到也无所谓,但如果是比如像大型航空公司售票等电子商务网站,每天每小时都有大量的订单业务,如果这些售票系统一旦崩溃后,再去重启,这些时间和客户的损失就直接会影响到航空公司的利益,这些损失如何去避

Apache反向代理结合Tomcat集群来实现负载均衡(四)、Apache反向代理

上文中主要介绍了tomcat的集群方式,下边再来说下apache的反向代理.反向代理可以这样来理解,我们通常认为的代理(正向代理)是局域网内部机器本身不能上网,网关可以上网,大家在局域网内是通过网关上网的,这个网关就是个代理机器.反向代理意思就反了过来,现在网关并不是给内部局域网做代理的,而是给外部请求内部局域网做代理的,例如,当前一个应用系统在局域网内的A机器上,外部网络不能直接访问A机器,而是通过网关访问到了A,这里网关就是个反向代理了. 总结:正向代理---为在防火墙内的局域网客户端提供I

java集群优化——Nginx+tomcat集群配置-理论篇

我们了解一个道理,就是数据的增长是我们必然面对的问题,因为在技术日益变化的当下,我们收集数据的方式和存储及处理技术不断升级,迫使我们面对这一问题,并且,在数据挖掘日益火热的今天,我们也要对这样的问题加以重视,改变在所难免! 我们曾经想过,在极致优化的情况下,一台普通服务器,是可以挖掘出无穷的潜力的,我的们的确曾做到这一点,用一台2万元的设备,承载了同时1万余人的并发,但是随着技术的衍生,我们需要更灵活地处理应用,我们需要更及时的响应速度,我们需要实时地对数据进行分析和处理!这时,我们必然接触一个

tomcat集群-群猫乱舞(转)

一.为何要集群 单台App Server再强劲,也有其瓶劲,先来看一下下面这个真实的场景. 当时这个工程是这样的,tomcat这一段被称为web zone,里面用spring+ws,还装了一个jboss的规则引擎Guvnor5.x,全部是ws没有service layer也没有dao layer. 然后App Zone这边是weblogic,传输用的是spring rmi,然后App Zone这块全部是service layer, dao layer和数据库打交道. 用户这边用的是.net,以w

tomcat集群实现源码级别剖析

随着互联网快速发展,各种各样供外部访问的系统越来越多且访问量越来越大,以前Web容器可以包揽接收-逻辑处理-响应整个请求生命周期的工作,现在为了构建让更多用户访问更强大的系统,人们通过不断地业务解耦.架构解耦将web容器的逻辑处理抽离交由其他中间件处理,例如缓存中间件.消息队列中间件.数据存储中间件等等.Web容器负责的工作可能越来越少,但是它确实必不可少的部分,它负责接收用户请求并分别调用各个服务最后响应.可以说目前最受欢迎的web容器是用Java写的tomcat小猫,由于生产上的tomcat

Linux下通过apache实现tomcat集群

对于WEB应用集群的技术实现而言,最大的难点就是如何能在集群中的多个节点之间保持数据的一致性,会话(Session)信息是这些数据中最重要的一块.要实现这一点,大体上有两种方式,一种是把所有Session数据放到一台服务器上或者数据库中,集群中的所有节点通过访问这台Session服务器来获取数据:另一种就是在集群中的所有节点间进行Session数据的同步拷贝,任何一个节点均保存了所有的Session数据.两种方式都各有优点,第一种方式简单.易于实现,但是存在着Session服务器发生故障会导致全

Apache + Tomcat集群配置详解

Apache + Tomcat集群配置详解 一.软件准备 Apache 2.2 : http://httpd.apache.org/download.cgi,下载msi安装程序,选择no ssl版本 Tomcat 6.0 : http://tomcat.apache.org/download-60.cgi,下载Tomcat 6.0.18 zip文件 注意:由于Apache和Tomcat项目与集群相关的模块均处于持续发展和优化过程中,因此笔者不保证本文配置方法对所有Apache和Tomcat版本均