设为首页 收藏本站
查看: 1236|回复: 0

[经验分享] 第四篇、Tomcat 集群

[复制链接]

尚未签到

发表于 2015-8-10 16:14:03 | 显示全部楼层 |阅读模式
  1.  前言
  该篇中测试的机器发生了变更,在第一篇中设置的Apache  DocumentRoot "d:/deployment"修改为了DocumentRoot d:/cluster 。这个不影响实际操作,just换了台电脑。
  在第一篇中讲了apache整合tomcat的,该篇中将阐述tomcat的集群.
DSC0000.png
  
  

   2. 集群的概念
  集群分类
  ■ 纵向集群 :VERTICAL CLUSTER 多个tomcat部署在同一台服务机上,CPU资源需要抢占,只能对内存进行拓展
  ■ 横向集群 : HORIZONTAL CLUSTER  tomcat和服务机一一对应,即一台服务器上部署一个tomcat。(可做大规模集群)
    核心概念
  ■ 负载均衡 :LOAD BALANCE  依据每个节点对应的权重大小分配需要处理的数据
  ■ 高可用性 : HIGH AVAILABLE 实际运行中只有一台服务器在工作,当其挂掉后其他服务器顶上  
  
  Tomcat 官网给出的结构图 :
DSC0001.png
  通过负载均衡,任务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
DSC0002.png
  
       修改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"  />
  
  
DSC0003.png
  
  以上为设置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 。
  
  通过下图
DSC0004.png
  可知道,为了集群,需要在应用中的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
DSC0005.png
  
  该值需要手动设置 .
  
  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目录下
DSC0006.png
  
  重启apache ,后启动两个tomcat  
  
DSC0007.png
DSC0008.png
  
  输入  http://192.168.1.5/JMIE  访问
DSC0009.png
  关闭正在运行的tomcat后可发现扔可继续操作.
  
  该篇结束
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-97109-1-1.html 上篇帖子: tomcat中的几点配置说明 下篇帖子: 【转载】eclipse+tomcat开发web程序
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表