zoukankan      html  css  js  c++  java
  • Apache Http Server与Tomcat6 的负载均衡(二)

    一般来说,实现Apache与Tomcat6的负载均衡有两种方式,一种是使用mod_jk,另一种是使用mod_proxy模块。本文只讨论mod_jk方式。

    无论使用哪种方式,一般都要经过以下这几个步骤(同一台机器):

    1. 修改startup.bat中的CATALINA_HOME变量的值。因为每个Tomcat实体的CATALINA_HOME都是不一样的,如果设置为系统的环境变量,那么在启动这几个Tomcat时就会出问题。
    2. 设置不同的Tomcat服务器(启动)端口
    3. 对不同的Tomcat实体设置不同的AJP connector
    4. 停止Coyote HTTP/1.1  连接器(Http请求交给Apache Http Server处理)
    5. 在Standalone Engine中设置jvmRoute
    6. 注释掉Catalina Engine
    7. 在worker.properties中配置Tomcat worker

    下面来详细说下详细的配置步骤

    在Tomcat startup.bat中修改CATALINA_HOME的值

    注:这一步跟负载均衡没关系,没有负载均衡也要进行这一步

    首先下载Tomcat6.*.*.zip,解压后进行重命名,复制三个,分别是Tomcat6A,Tomcat6B,Tomcat6C

    startup.bat只是在.zip格式的Tomcat压缩包里才有,使用安装包安装的好像没有。找到这个文件,打开后修改

    对与Tomcat6A:

    set CATALINA_HOME=%CURRENT_DIR%为set CATALINA_HOME=C:/Program Files/Apache Software Foundation/Tomcat6A、

    对于Tomcat6B:

    set CATALINA_HOME=%CURRENT_DIR%为set CATALINA_HOME=C:/Program Files/Apache Software Foundation/Tomcat6B、 
    对于Tomcat6C:
    set CATALINA_HOME=%CURRENT_DIR%为set CATALINA_HOME=C:/Program Files/Apache Software Foundation/Tomcat6C、

    设置不同的服务器端口

    注:这一步与负载均衡没有直接关系,是为了处理多个Tomcat的问题,如果这些Tomcat分布在 不同的机器上,应该不会有这个问题
    打开conf/server.xml,找到下面这个标签:
    <Server port="8005" shutdown="SHUTDOWN" debug="0">
    在本例中, Tomcat6A使用8005端口
    Tomcat6B使用8006端口
    Tomcat6C使用8007端口

    设置Tomcat中的AJP连接器接口

    注:这是第一步跟负载均衡直接相关的步骤
    打开conf/server.xml,找到这样一个xml标签:
    <!--Define an AJP1.3 connector on port 8009-->
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443">
    在本例中, Tomcat6A使用8009端口
    Tomcat6B使用8010端口
    Tomcat6C使用8011端口

    停止监听默认的Http/1.1连接器

    注:这步也是和负载均衡直接相关,但不是负载均衡中的关键,只是个副产品(byproduct)

    为了防止人们直接访问某个Tomcat(因为这样会使负载均衡器失去意义),所以我们要关掉它的HTTP连接器,使得这些Tomcat只能通过AJP协议接收Apache转发过来的请求,因此需要停止HTTP/1.1连接器

    打开conf/server.xml,像下面的代码这样注释掉HTTP/1.1连接器的监听
    <!--Define
    <Connector port="8080" protocol="HTTP/1.1"
    maxThreads="150" connectionTimeout="20000"
    redirectPort="8443 />"
    -->

    在Standalone Engine中设置jvmRoute属性

    注:这是实现负载均衡的关键一步,这一步做了两件事,一是配置了Standalone Engine,二是赋予这个Engine一个id:jvmRoute

    每个Tomcat worker的server.xml中都有有关Engine的配置(语句)。这个Engine是一个和Catalina Engine一样级别最高的Engine,代表整个Catalina Servlet Engine。这条配置语句在server.xml中,jvmRoute的值必须是唯一的,在本例中,各个Tomcat实例的配置如下

    Tomcat6A:

    <!--You should set jvmRoute to support load-balancing via AJP-->

    <Engine name="Standalone" defaultHost="localhost" jvmRoute="Tomcat6A">

    Tomcat6B:

    <!--You should set jvmRoute to support load-balancing via AJP-->

    <Engine name="Standalone" defaultHost="localhost" jvmRoute="Tomcat6A">

    Tomcat6C:

    <!--You should set jvmRoute to support load-balancing via AJP-->

    <Engine name="Standalone" defaultHost="localhost" jvmRoute="Tomcat6A">

    注释掉Catalina Engine

    注:这一步其实可以和上一步合并

    因为我们配置了Standalone Engine,因此需要注释掉Catalina Engine。具体做法是:在server.xml中找到相应代码进行注释,结果如下:、

    <!--

    <Engine name=-"Catalina" defaultHost="localhost">

    -->

    在httpd.conf中配置Tomcat与Apache

    注:粗体字为与负载均衡有直接关系的配置语句

    在Apache Http Server下的conf文件夹中打开httpd.conf,添加下面的语句到其末尾

    LoadModule jk_module modules/mod_jk.so

    JkWorkersFile conf/workers.properties

    JkLogLevel error

    JkLogFile "C:/Program Files/Apache Software Foundation/Apache2.2/logs/mod_jk.Log"

    JkMount /examples/jsp/*bal1
    JkMount/jkstatus/stat1

    配置workers.proterties

    配置每一个Tomcat实例

    在workers.proterties中每一个Tomcat实例一般有这几个属性需要配置,分别是:

    type(类型): 一般有ajp13(代表Tomcat的worker),lb负载

    host(主机): Tomcat所在机器的ip地址

    port(端口): worker所监听的端口号

    lbfactor(负载权重): 影响负载均衡器在分发请求时所分配的请求数,相对大小更重要

    在本例中,具体配置如下:

    Tomcat6A:

    worker.Tomcat6A.type = ajp13

    worker.Tomcat6A.host = 192.168.9.182

    worker.Tomcat6A.port = 8009

    worker.Tomcat6A.lbfactor=10

    Tomcat6B:

    worker.Tomcat6B.type = ajp13

    worker.Tomcat6B.host = 192.168.9.182

    worker.Tomcat6B.port = 8010

    worker.Tomcat6B.lbfactor = 10

    Tomcat6C:

    worker.Tomcat6C.type = ajp13

    worker.Tomcat6C.host = 192.168.9.182

    worker.Tomcat6C.port = 8011

    worker.Tomcat6C.lbfactor = 10

    (这里的host值就是自己机器的ip地址,需要查看自己的机器的ip地址来替代这个地址)

    在worker.properties中配置负载均衡器

    在worker.properties文件中添加这两条配置语句

    worker.bal1.type = lb

    worker.bal1.sticky_session = 1

    worker.bal1.balance = Tomcat6A, Tomcat6B, Tomcat6C

    sticky_session属性设为1,这样负载均衡器lb就会尽量保持一个session,也就是使用户在一次会话中跟同一个Tomcat进行交互。(我猜如果不能保持跟同一个Tomcat进行交互,也就不能保持一个session)。

    balance属性可以告诉mod_jk模块那些worker由lb负载均衡器控制

    在worker.properties中配置Status Worker

    利用这个Worker,我们可以获得负载的实时统计信息

    在worker.properties中添加

    worker.staat1.type = status

    给mod_jk配置workes.list

    到现在为止,我们已经配置好了三个ajp13 worker,一个lb worker,一个status worker。接下来需要做的就是告诉mod_jk这些worker的信息,在worker.properties中添加这条配置语句就可以做到:

    worker.list = bal1, stat1

    一个配置好的worker.properties实例

    worker.list = bal1, stat1

    worker.Tomcat6A.type = ajp13

    worker.Tomcat6A.host = 192.168.9.182

    worker.Tomcat6A.port = 8009

    worker.Tomcat6A.lbfactor = 10

    worker.Tomcat6B.type = ajp13

    worker.Tomcat6B.host = 192.168.9.182

    worker.Tomcat6B.port = 8010

    worker.Tomcat6B.lbfactor = 10

    worker.Tomcat6C.type = ajp13

    worker.Tomcat6C.host = 192.168.9.182

    worker.Tomcat6C.port = 8011

    worker.Tomcat6C.lbfactor = 10

    worker.bal1.type = lb

    worker.bal1.stick_session = 1

    worker.bal1.balance_workers = Tomcat6A, Tomcat6B, Tomcat6C

    worker.stat1.type = status

    测试配置是否成功

    在Tomcat的目录下找到webapps/examples/jsp/目录下创建一个index.jsp文件,内容如下:

    1. <%@page language="java"%>  
    2. <html>  
    3.   <body>  
    4.     <h1>Index Page Of Tomcat6A</h1>  
    5.   </body>  
    6. </html>  

    其他两个Tomcat所做的操作类似,只是index.jsp中的内容变了一下,分别是:

    1. <%@page language="java"%>  
    2. <html>  
    3.   <body>  
    4.     <h1>Index Page Of Tomcat6A</h1>  
    5.   </body>  
    6. </html>  
    1. <%@page language="java"%>  
    2. <html>  
    3.   <body>  
    4.     <h1>Index Page Of Tomcat6A</h1>  
    5.   </body>  
    6. </html>  

    配好后,重启Tomcat和Apache Http Server,顺序为 关闭Apache->关闭Tomcat->启动Tomcat->启动Apache

    在浏览器中输入http://localhost/examples/jsp/index.jsp,然后运行多个浏览器实例(同一个浏览器的标签式浏览不行,因为很多标签式浏览被设置为共享session),如果出现不同的页面,就说明负载均衡配置成功了。

    在浏览器中输入http://localhost/jkstatus/,,将出现目前负载情况的统计资料,如下图所示:

      1 <?xml version='1.0' encoding='utf-8'?>
      2 <!--
      3   Licensed to the Apache Software Foundation (ASF) under one or more
      4   contributor license agreements.  See the NOTICE file distributed with
      5   this work for additional information regarding copyright ownership.
      6   The ASF licenses this file to You under the Apache License, Version 2.0
      7   (the "License"); you may not use this file except in compliance with
      8   the License.  You may obtain a copy of the License at
      9 
     10       http://www.apache.org/licenses/LICENSE-2.0
     11 
     12   Unless required by applicable law or agreed to in writing, software
     13   distributed under the License is distributed on an "AS IS" BASIS,
     14   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     15   See the License for the specific language governing permissions and
     16   limitations under the License.
     17 -->
     18 <!-- Note:  A "Server" is not itself a "Container", so you may not
     19      define subcomponents such as "Valves" at this level.
     20      Documentation at /docs/config/server.html
     21  -->
     22 <Server port="8005" shutdown="SHUTDOWN">
     23   <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
     24   <!-- Security listener. Documentation at /docs/config/listeners.html
     25   <Listener className="org.apache.catalina.security.SecurityListener" />
     26   -->
     27   <!--APR library loader. Documentation at /docs/apr.html -->
     28   <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
     29   <!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html -->
     30   <Listener className="org.apache.catalina.core.JasperListener" />
     31   <!-- Prevent memory leaks due to use of particular java/javax APIs-->
     32   <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
     33   <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
     34   <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
     35 
     36   <!-- Global JNDI resources
     37        Documentation at /docs/jndi-resources-howto.html
     38   -->
     39   <GlobalNamingResources>
     40     <!-- Editable user database that can also be used by
     41          UserDatabaseRealm to authenticate users
     42     -->
     43     <Resource name="UserDatabase" auth="Container"
     44               type="org.apache.catalina.UserDatabase"
     45               description="User database that can be updated and saved"
     46               factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
     47               pathname="conf/tomcat-users.xml" />
     48   </GlobalNamingResources>
     49 
     50   <!-- A "Service" is a collection of one or more "Connectors" that share
     51        a single "Container" Note:  A "Service" is not itself a "Container",
     52        so you may not define subcomponents such as "Valves" at this level.
     53        Documentation at /docs/config/service.html
     54    -->
     55   <Service name="Catalina">
     56 
     57     <!--The connectors can use a shared executor, you can define one or more named thread pools-->
     58     <!--
     59     <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
     60         maxThreads="150" minSpareThreads="4"/>
     61     -->
     62 
     63 
     64     <!-- A "Connector" represents an endpoint by which requests are received
     65          and responses are returned. Documentation at :
     66          Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
     67          Java AJP  Connector: /docs/config/ajp.html
     68          APR (HTTP/AJP) Connector: /docs/apr.html
     69          Define a non-SSL HTTP/1.1 Connector on port 8080
     70     -->
     71     <Connector port="8080" protocol="HTTP/1.1"
     72                connectionTimeout="20000"
     73                redirectPort="8443"  URIEncoding="UTF-8" />
     74     <!-- A "Connector" using the shared thread pool-->
     75     <!--
     76     <Connector executor="tomcatThreadPool"
     77                port="8080" protocol="HTTP/1.1"
     78                connectionTimeout="20000"
     79                redirectPort="8443" />
     80     -->
     81     <!-- Define a SSL HTTP/1.1 Connector on port 8443
     82          This connector uses the BIO implementation that requires the JSSE
     83          style configuration. When using the APR/native implementation, the
     84          OpenSSL style configuration is required as described in the APR/native
     85          documentation -->
     86     <!--
     87     <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
     88                maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
     89                clientAuth="false" keystoreFile="C:/tomcat.keystore" keystorePass="password" sslProtocol="TLS" />
     90                -->
     91 <!--
     92   <Connector port="8081" protocol="HTTP/1.1"
     93                connectionTimeout="20000"
     94                redirectPort="8443"  URIEncoding="UTF-8" />
     95 
     96   <Connector port="8082" protocol="HTTP/1.1"
     97                connectionTimeout="20000"
     98                redirectPort="8443"  URIEncoding="UTF-8" />
     99 
    100 
    101   <Connector port="8083" protocol="HTTP/1.1"
    102                connectionTimeout="20000"
    103                redirectPort="8443"  URIEncoding="UTF-8" />
    104 
    105  <Connector port="8084" protocol="HTTP/1.1"
    106                connectionTimeout="20000"
    107                redirectPort="8443"  URIEncoding="UTF-8" />
    108 -->
    109 
    110     
    111 
    112     <!-- Define an AJP 1.3 Connector on port 8009 -->
    113     <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
    114  
    115      
    116 
    117     <!-- An Engine represents the entry point (within Catalina) that processes
    118          every request.  The Engine implementation for Tomcat stand alone
    119          analyzes the HTTP headers included with the request, and passes them
    120          on to the appropriate Host (virtual host).
    121          Documentation at /docs/config/engine.html -->
    122 
    123     <!-- You should set jvmRoute to support load-balancing via AJP ie :
    124     <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
    125     -->
    126     <Engine name="Catalina" defaultHost="localhost"  jvmRoute="worker1">
    127 
    128       <!--For clustering, please take a look at documentation at:
    129           /docs/cluster-howto.html  (simple how to)
    130           /docs/config/cluster.html (reference documentation) -->
    131       <!--
    132       <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
    133       -->
    134       <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8">
    135 
    136             <Manager className="org.apache.catalina.ha.session.DeltaManager" 
    137                 expireSessionsOnShutdown="false"
    138                 notifyListenersOnReplication="true" />
    139 
    140             <Channel className="org.apache.catalina.tribes.group.GroupChannel">
    141                 <Membership className="org.apache.catalina.tribes.membership.McastService" 
    142                     address="228.0.0.4"
    143                     port="45564" 
    144                     frequency="500" 
    145                     dropTime="3000" />
    146                 <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" 
    147                     address="auto"
    148                     port="4000" 
    149                     autoBind="100" 
    150                     selectorTimeout="5000" 
    151                     maxThreads="6" />
    152 
    153                 <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
    154                     <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender" />
    155                 </Sender>
    156                 <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector" />
    157                 <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor" />
    158             </Channel>
    159 
    160             <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter="" />
    161             <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve" />
    162 
    163             <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer" 
    164                 tempDir="/tmp/war-temp/"
    165                 deployDir="/tmp/war-deploy/" 
    166                 watchDir="/tmp/war-listen/" 
    167                 watchEnabled="false" />
    168 
    169             <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener" />
    170             <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener" />
    171         </Cluster>
    172 
    173       <!-- Use the LockOutRealm to prevent attempts to guess user passwords
    174            via a brute-force attack -->
    175       <Realm className="org.apache.catalina.realm.LockOutRealm">
    176         <!-- This Realm uses the UserDatabase configured in the global JNDI
    177              resources under the key "UserDatabase".  Any edits
    178              that are performed against this UserDatabase are immediately
    179              available for use by the Realm.  -->
    180         <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
    181                resourceName="UserDatabase"/>
    182       </Realm>
    183 
    184       <Host name="localhost"  appBase="webapps"
    185             unpackWARs="true" autoDeploy="true">
    186 
    187         <!-- SingleSignOn valve, share authentication between web applications
    188              Documentation at: /docs/config/valve.html -->
    189         <!--
    190         <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
    191         -->
    192 
    193         <!-- Access log processes all example.
    194              Documentation at: /docs/config/valve.html
    195              Note: The pattern used is equivalent to using pattern="common" -->
    196         <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
    197                prefix="localhost_access_log." suffix=".txt"
    198                pattern="%h %l %u %t &quot;%r&quot; %s %b" />
    199 
    200       </Host>
    201     </Engine>
    202   </Service>
    203   
    204   <Service name="Catalina1">
    205 
    206     <!--The connectors can use a shared executor, you can define one or more named thread pools-->
    207     <!--
    208     <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
    209         maxThreads="150" minSpareThreads="4"/>
    210     -->
    211 
    212 
    213     <!-- A "Connector" represents an endpoint by which requests are received
    214          and responses are returned. Documentation at :
    215          Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
    216          Java AJP  Connector: /docs/config/ajp.html
    217          APR (HTTP/AJP) Connector: /docs/apr.html
    218          Define a non-SSL HTTP/1.1 Connector on port 8080
    219     -->
    220     <Connector port="8081" protocol="HTTP/1.1"
    221                connectionTimeout="20000"
    222                redirectPort="8443"  URIEncoding="UTF-8" />
    223     <!-- A "Connector" using the shared thread pool-->
    224     <!--
    225     <Connector executor="tomcatThreadPool"
    226                port="8080" protocol="HTTP/1.1"
    227                connectionTimeout="20000"
    228                redirectPort="8443" />
    229     -->
    230     <!-- Define a SSL HTTP/1.1 Connector on port 8443
    231          This connector uses the BIO implementation that requires the JSSE
    232          style configuration. When using the APR/native implementation, the
    233          OpenSSL style configuration is required as described in the APR/native
    234          documentation -->
    235     <!--
    236     <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
    237                maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
    238                clientAuth="false" keystoreFile="C:/tomcat.keystore" keystorePass="password" sslProtocol="TLS" />
    239                -->
    240 <!--
    241   <Connector port="8081" protocol="HTTP/1.1"
    242                connectionTimeout="20000"
    243                redirectPort="8443"  URIEncoding="UTF-8" />
    244 
    245   <Connector port="8082" protocol="HTTP/1.1"
    246                connectionTimeout="20000"
    247                redirectPort="8443"  URIEncoding="UTF-8" />
    248 
    249 
    250   <Connector port="8083" protocol="HTTP/1.1"
    251                connectionTimeout="20000"
    252                redirectPort="8443"  URIEncoding="UTF-8" />
    253 
    254  <Connector port="8084" protocol="HTTP/1.1"
    255                connectionTimeout="20000"
    256                redirectPort="8443"  URIEncoding="UTF-8" />
    257 -->
    258 
    259     
    260 
    261     <!-- Define an AJP 1.3 Connector on port 8009 -->
    262     <Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />
    263     
    264      
    265 
    266     <!-- An Engine represents the entry point (within Catalina) that processes
    267          every request.  The Engine implementation for Tomcat stand alone
    268          analyzes the HTTP headers included with the request, and passes them
    269          on to the appropriate Host (virtual host).
    270          Documentation at /docs/config/engine.html -->
    271 
    272     <!-- You should set jvmRoute to support load-balancing via AJP ie :
    273     <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
    274     -->
    275     <Engine name="Catalina" defaultHost="localhost"  jvmRoute="worker2">
    276 
    277       <!--For clustering, please take a look at documentation at:
    278           /docs/cluster-howto.html  (simple how to)
    279           /docs/config/cluster.html (reference documentation) -->
    280       <!--
    281       <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
    282       -->
    283       <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8">
    284 
    285             <Manager className="org.apache.catalina.ha.session.DeltaManager" 
    286                 expireSessionsOnShutdown="false"
    287                 notifyListenersOnReplication="true" />
    288 
    289             <Channel className="org.apache.catalina.tribes.group.GroupChannel">
    290                 <Membership className="org.apache.catalina.tribes.membership.McastService" 
    291                     address="228.0.0.4"
    292                     port="45564" 
    293                     frequency="500" 
    294                     dropTime="3000" />
    295                 <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" 
    296                     address="auto"
    297                     port="4000" 
    298                     autoBind="100" 
    299                     selectorTimeout="5000" 
    300                     maxThreads="6" />
    301 
    302                 <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
    303                     <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender" />
    304                 </Sender>
    305                 <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector" />
    306                 <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor" />
    307             </Channel>
    308 
    309             <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter="" />
    310             <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve" />
    311 
    312             <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer" 
    313                 tempDir="/tmp/war-temp/"
    314                 deployDir="/tmp/war-deploy/" 
    315                 watchDir="/tmp/war-listen/" 
    316                 watchEnabled="false" />
    317 
    318             <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener" />
    319             <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener" />
    320         </Cluster>
    321 
    322       <!-- Use the LockOutRealm to prevent attempts to guess user passwords
    323            via a brute-force attack -->
    324       <Realm className="org.apache.catalina.realm.LockOutRealm">
    325         <!-- This Realm uses the UserDatabase configured in the global JNDI
    326              resources under the key "UserDatabase".  Any edits
    327              that are performed against this UserDatabase are immediately
    328              available for use by the Realm.  -->
    329         <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
    330                resourceName="UserDatabase"/>
    331       </Realm>
    332 
    333       <Host name="localhost"  appBase="webapps"
    334             unpackWARs="true" autoDeploy="true">
    335 
    336         <!-- SingleSignOn valve, share authentication between web applications
    337              Documentation at: /docs/config/valve.html -->
    338         <!--
    339         <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
    340         -->
    341 
    342         <!-- Access log processes all example.
    343              Documentation at: /docs/config/valve.html
    344              Note: The pattern used is equivalent to using pattern="common" -->
    345         <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
    346                prefix="localhost_access_log." suffix=".txt"
    347                pattern="%h %l %u %t &quot;%r&quot; %s %b" />
    348 
    349       </Host>
    350     </Engine>
    351   </Service>
    352 
    353   <Service name="Catalina2">
    354 
    355     <!--The connectors can use a shared executor, you can define one or more named thread pools-->
    356     <!--
    357     <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
    358         maxThreads="150" minSpareThreads="4"/>
    359     -->
    360 
    361 
    362     <!-- A "Connector" represents an endpoint by which requests are received
    363          and responses are returned. Documentation at :
    364          Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
    365          Java AJP  Connector: /docs/config/ajp.html
    366          APR (HTTP/AJP) Connector: /docs/apr.html
    367          Define a non-SSL HTTP/1.1 Connector on port 8080
    368     -->
    369     <Connector port="8082" protocol="HTTP/1.1"
    370                connectionTimeout="20000"
    371                redirectPort="8443"  URIEncoding="UTF-8" />
    372     <!-- A "Connector" using the shared thread pool-->
    373     <!--
    374     <Connector executor="tomcatThreadPool"
    375                port="8080" protocol="HTTP/1.1"
    376                connectionTimeout="20000"
    377                redirectPort="8443" />
    378     -->
    379     <!-- Define a SSL HTTP/1.1 Connector on port 8443
    380          This connector uses the BIO implementation that requires the JSSE
    381          style configuration. When using the APR/native implementation, the
    382          OpenSSL style configuration is required as described in the APR/native
    383          documentation -->
    384     <!--
    385     <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
    386                maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
    387                clientAuth="false" keystoreFile="C:/tomcat.keystore" keystorePass="password" sslProtocol="TLS" />
    388                -->
    389 
    390     <!-- Define an AJP 1.3 Connector on port 8009 -->
    391     <Connector port="8011" protocol="AJP/1.3" redirectPort="8443" />
    392     
    393      
    394 
    395     <!-- An Engine represents the entry point (within Catalina) that processes
    396          every request.  The Engine implementation for Tomcat stand alone
    397          analyzes the HTTP headers included with the request, and passes them
    398          on to the appropriate Host (virtual host).
    399          Documentation at /docs/config/engine.html -->
    400 
    401     <!-- You should set jvmRoute to support load-balancing via AJP ie :
    402     <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
    403     -->
    404     <Engine name="Catalina" defaultHost="localhost"  jvmRoute="worker3">
    405 
    406       <!--For clustering, please take a look at documentation at:
    407           /docs/cluster-howto.html  (simple how to)
    408           /docs/config/cluster.html (reference documentation) -->
    409       <!--
    410       <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
    411       -->
    412       <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8">
    413 
    414             <Manager className="org.apache.catalina.ha.session.DeltaManager" 
    415                 expireSessionsOnShutdown="false"
    416                 notifyListenersOnReplication="true" />
    417 
    418             <Channel className="org.apache.catalina.tribes.group.GroupChannel">
    419                 <Membership className="org.apache.catalina.tribes.membership.McastService" 
    420                     address="228.0.0.4"
    421                     port="45564" 
    422                     frequency="500" 
    423                     dropTime="3000" />
    424                 <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" 
    425                     address="auto"
    426                     port="4000" 
    427                     autoBind="100" 
    428                     selectorTimeout="5000" 
    429                     maxThreads="6" />
    430 
    431                 <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
    432                     <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender" />
    433                 </Sender>
    434                 <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector" />
    435                 <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor" />
    436             </Channel>
    437 
    438             <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter="" />
    439             <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve" />
    440 
    441             <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer" 
    442                 tempDir="/tmp/war-temp/"
    443                 deployDir="/tmp/war-deploy/" 
    444                 watchDir="/tmp/war-listen/" 
    445                 watchEnabled="false" />
    446 
    447             <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener" />
    448             <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener" />
    449         </Cluster>
    450 
    451       <!-- Use the LockOutRealm to prevent attempts to guess user passwords
    452            via a brute-force attack -->
    453       <Realm className="org.apache.catalina.realm.LockOutRealm">
    454         <!-- This Realm uses the UserDatabase configured in the global JNDI
    455              resources under the key "UserDatabase".  Any edits
    456              that are performed against this UserDatabase are immediately
    457              available for use by the Realm.  -->
    458         <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
    459                resourceName="UserDatabase"/>
    460       </Realm>
    461 
    462       <Host name="localhost"  appBase="webapps"
    463             unpackWARs="true" autoDeploy="true">
    464 
    465         <!-- SingleSignOn valve, share authentication between web applications
    466              Documentation at: /docs/config/valve.html -->
    467         <!--
    468         <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
    469         -->
    470 
    471         <!-- Access log processes all example.
    472              Documentation at: /docs/config/valve.html
    473              Note: The pattern used is equivalent to using pattern="common" -->
    474         <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
    475                prefix="localhost_access_log." suffix=".txt"
    476                pattern="%h %l %u %t &quot;%r&quot; %s %b" />
    477 
    478       </Host>
    479     </Engine>
    480   </Service>
    481    
    482 </Server>
  • 相关阅读:
    网页中 弹出提示框
    三级联动
    pdo预处理
    ajax返回数据类型 text json xml
    PHP语言 -- 数据访问 好友列表
    2.17 牛牛你个渣渣这种题都做不出来 尹老师教你的你全还给他了吗?
    1.25 作业
    1.22作业
    1.20 作业
    js 学习笔记
  • 原文地址:https://www.cnblogs.com/wangjuneng/p/4727634.html
Copyright © 2011-2022 走看看