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.lbcontroller.sticky_session=0
  worker.controller.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.lbcontroller.sticky_session=0
    worker.controller.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后可发现扔可继续操作.

该篇结束

Tomcat 集群的更多相关文章

  1. FineReport关于tomcat集群部署的方案

    多台服务器集群后,配置权限.数据连接.模板.定时调度等,只能每台服务器一个个配置,不会自动同步到所有服务器. 针对上述情况,在FineReport中提供新集群部署插件,将xml配置文件.finedb/ ...

  2. (转)Nginx SSL+tomcat集群,request.getScheme() 取到https正确的协议

    转自http://www.cnblogs.com/interdrp/p/4881785.html 最近在做一个项目, 架构上使用了 Nginx +tomcat 集群, 且nginx下配置了SSL,to ...

  3. Redis存储Tomcat集群的Session

    Redis存储Tomcat集群的Session 如何 做到把新开发的代码推送到到生产系统中部署,生产系统要能够零宕机.对使用用户零影响. 设想 是使用集群来搞定,通过通知负载均衡Nginx,取下集群中 ...

  4. Ubuntu下基于Nginx实现Tomcat集群负载均衡

    版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[+]   Nginx是一款HTTP和反向代理服务器,有关它的介绍可以到网上搜一下,很多很多,不再累述.这里,我们记录一下Nginx ...

  5. nginx+tomcat集群配置(4)--rewrite规则和多应用根目录设定思路

    前言: nginx中有一块很重要的概念, 就是rewrite规则. 它会对URL进行修改, 然后进行内部的重定向. rewrite授予了nginx更多的自由, 使得后级服务的接入更加地方便. 本文将简 ...

  6. window xp Apache与Tomcat集群配置--转载

    转载地址:http://www.cnblogs.com/obullxl/archive/2011/06/09/apache-tomcat-cluster-config.html 一. 环境说明 Win ...

  7. 161028、Nginx负载均衡实现tomcat集群方案简要小结

    重点两部分:一.负载均衡二.tomcat集群 所谓tomcat集群,就是可以向外提供并行服务的多台机器,任何一台服务器宕机,其它服务器可以替代它向外提供服务,而不影响用户访问. Nginx是一个常用的 ...

  8. tomcat集群session共享

    Tomcat集群配置其实很简单,在Tomcat自带的文档中有详细的说明( /docs/cluster-howto.html ),只不过是英语的,对我这样的人来说很难懂   .   下面根据说下怎么配置 ...

  9. Tomcat集群---Cluster节点配置(转)

    <!-- Cluster(集群,族) 节点,如果你要配置tomcat集群,则需要使用此节点. className 表示tomcat集群时,之间相互传递信息使用那个类来实现信息之间的传递. cha ...

  10. nginx+tomcat集群配置(1)---根目录设定和多后端分发配置

    前言: 对于javaer而言, nginx+tomcat集群配置, 已然成了web应用部署的主流. 大公司如此, 小公司亦然. 对于个人开发者而言, 资源有限, 往往多个web应用混部于一台服务器(云 ...

随机推荐

  1. poj 3414 Pots ( bfs )

    题目:http://poj.org/problem?id=3414 题意:给出了两个瓶子的容量A,B, 以及一个目标水量C, 对A.B可以有如下操作: FILL(i)        fill the ...

  2. echarts 版本区分导致的错误

    在更新到echarts2.2.5这个版本的时候发现map不能正常运行了.....擦!控制台一看: 我就日了,那个小刺老把这朕的源码改了......,找到这一行,果断给轮掉: 都特么好了..... 再透 ...

  3. SQL注入攻击的种类和防范手段

    观察近来的一些安全事件及其后果,安全专家们已经得到一个结论,这些威胁主要是通过SQL注入造成的.虽然前面有许多文章讨论了SQL注入,但今天所讨论的内容也许可帮助你检查自己的服务器,并采取相应防范措施. ...

  4. POJ 2955 Brackets 区间合并

    输出一个串里面能匹配的括号数 状态转移方程: if(s[i]=='('&&s[j]==')'||s[i]=='['&&s[j]==']')             dp ...

  5. codeforce 609A - USB Flash Drives

    排序水题 #include<iostream> #include<cstdlib> #include<cstdio> #include<algorithm&g ...

  6. codeforce 606C - Sorting Railway Cars

    题意:给你一串数,没个数只能往前提到首位,或则往后放末尾.问最少步骤使操作后的序列成上升序列. 思路:最长连续子序列. #include<iostream> #include<std ...

  7. window2008 64位系统没有office组件问题分析及解决

    服务器是windows server2008 64位系统, 我的系统需要用到Microsoft.Office.Interop.Excel组件 在上传Excel单据遇到错误:检索 COM 类工厂中 CL ...

  8. [思维题]Bored Qishen

    给出一个整数集,其中包含1-n的所有整数,要求挑选出一个元素最多的子集,使得子集中任意两数的乘积不是完全平方数 (n<=10^6) 求这样一个最大子集的元素个数 #include <cst ...

  9. 教程-最全ASCII 码对照表

    第一部分由 00H 到 1FH 共 32 个,一般用来通讯或作为控制之用,有些字符可显示于屏幕,有些则无法显示在屏幕上,但能看到其效果(例如换行字符.归位字符). 第二部分是由 20H 到 7FH 共 ...

  10. 教程-Delphi编译就报毒

    这几天都在忙专周实验,今天用到delphi,一到编译时nod32就报毒,编译空文件也报毒,上网查了资料才明白,是编译文件被感染了,生成软件就会报毒.把自己找到的资料分享如下:   重新编译时,生成的e ...