zoukankan      html  css  js  c++  java
  • 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.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后可发现扔可继续操作.

                   该篇结束

  • 相关阅读:
    Oracle常用命令大全(很有用,做笔记)
    表格驱动编程在代码中的应用
    mac 利用svn下载远程代码出现Agreeing to the Xcode/iOS license requires admin privileges, please re-run as root via sudo.
    FAILURE: Build failed with an exception.
    There is an internal error in the React performance measurement code.Did not expect componentDidMount timer to start while render timer is still in progress for another instance
    react native TypeError network request failed
    Android向系统相册中插入图片,相册中会出现两张 一样的图片(只是图片大小不一致)
    react-native Unrecognized font family ‘Lonicons’;
    react-native SyntaxError xxxxx/xx.js:Unexpected token (23:24)
    Application MyTest has not been registered. This is either due to a require() error during initialization or failure to call AppRegistry.registerComponent.
  • 原文地址:https://www.cnblogs.com/fx2008/p/4154696.html
Copyright © 2011-2022 走看看