一般来说,实现Apache与Tomcat6的负载均衡有两种方式,一种是使用mod_jk,另一种是使用mod_proxy模块。本文只讨论mod_jk方式。
无论使用哪种方式,一般都要经过以下这几个步骤(同一台机器):
- 修改startup.bat中的CATALINA_HOME变量的值。因为每个Tomcat实体的CATALINA_HOME都是不一样的,如果设置为系统的环境变量,那么在启动这几个Tomcat时就会出问题。
- 设置不同的Tomcat服务器(启动)端口
- 对不同的Tomcat实体设置不同的AJP connector
- 停止Coyote HTTP/1.1 连接器(Http请求交给Apache Http Server处理)
- 在Standalone Engine中设置jvmRoute
- 注释掉Catalina Engine
- 在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文件,内容如下:
[xhtml] view plaincopyprint?
- <%@page language="java"%>
- <html>
- <body>
- <h1>Index Page Of Tomcat6A</h1>
- </body>
- </html>
其他两个Tomcat所做的操作类似,只是index.jsp中的内容变了一下,分别是:
[xhtml] view plaincopyprint?
- <%@page language="java"%>
- <html>
- <body>
- <h1>Index Page Of Tomcat6A</h1>
- </body>
- </html>
[xhtml] view plaincopyprint?
- <%@page language="java"%>
- <html>
- <body>
- <h1>Index Page Of Tomcat6A</h1>
- </body>
- </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 "%r" %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 "%r" %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 "%r" %s %b" /> 477 478 </Host> 479 </Engine> 480 </Service> 481 482 </Server>