• 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后可发现扔可继续操作.

                   该篇结束

  • 相关阅读:
    Linq技术四:动态Linq技术 -- Linq.Expressions
    74HC595的中文资料
    MessageDigest简单介绍
    gpu显存(全局内存)在使用时数据对齐的问题
    走进windows编程的世界-----windows进程
    Matlab画图-非常具体,非常全面
    php实现 合并表记录(需求是最好的老师)
    php实现求一个数的质数因子
    php课程 4-16 数组自定义函数(php数组->桶)
    jquery-3 jquery选择器
  • 原文地址:https://www.cnblogs.com/fx2008/p/4154696.html
Copyright © 2020-2023  润新知