一般来说,实现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>

Apache Http Server与Tomcat6 的负载均衡(二)的更多相关文章

  1. 使用apache和nginx代理实现tomcat负载均衡及集群配置详解

    实验环境: 1.nginx的代理功能 nginx proxy: eth0: 192.168.8.48 vmnet2 eth1: 192.168.10.10 tomcat server1: vmnet2 ...

  2. (Nginx+Apache)实现反向代理与负载均衡

    反向代理负载均衡 使用代理服务器可以将请求转发给内部的Web服务器,使用这种加速模式显然可以提升静态网页的访问速度.因此也可以考虑使用这种技术,让代理服务器将请求均匀转发给多台内部Web服务器之一上, ...

  3. Nginx网络架构实战学习笔记(三):nginx gzip压缩提升网站速度、expires缓存提升网站负载、反向代理实现nginx+apache动静分离、nginx实现负载均衡

    文章目录 nginx gzip压缩提升网站速度 expires缓存提升网站负载 反向代理实现nginx+apache动静分离 nginx实现负载均衡 nginx gzip压缩提升网站速度 网页内容的压 ...

  4. 使用IIS Server Farms搭建应用服务负载均衡

    当公司的业务扩大, 伴随着大量的请求,应用服务器的承受能力已经不能满足不断增长的业务需求,使用IIS Server Farms搭建应负载均衡的方式,把请求分发给不同的应用服务器进行处理,这个时候就降低 ...

  5. apache+jetty 配置web jsp服务器负载均衡

    首先,查找中文资料,貌似很少,有一个网友写了点,但是1版本过老,2有些地方有错误. 经过我自己摸索,记录一下.这个图很简洁明了 第一阶段 ,配置jetty 首先从 http://download.ec ...

  6. Web Server 分布式服务: Nginx负载均衡

    Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器.由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler使用.其 ...

  7. LVS(Linus Virtual Server):三种负载均衡方式比较+另三种负载均衡方式

    还有个姊妹篇也可以参考这个文章:六大Web负载均衡原理与实现 什么是LVS (Linux Virtual Server)?   首先简单介绍一下LVS (Linux Virtual Server)到底 ...

  8. nginx负载均衡二:配置

    配置方法一(可用): upstream tomcatserver1 { server ; server 192.168.70.172; server 192.168.70.173 down; serv ...

  9. Spring Cloud 2-Ribbon 客户端负载均衡(二)

    Spring Cloud Eureka  1.Hello-Service服务端配置 pom.xml application.yml 启动两个service 2.Ribbon客户端配置 pom.xml ...

随机推荐

  1. .NET 微服务——CI/CD(2):自动打包镜像

    准备工作 一.开启docker的tcp 我的服务器是linux,以端口2376为例,找到docker.service,在ExecStart下新增这段代码即可: -H tcp://0.0.0.0:237 ...

  2. Android 摄像头预览悬浮窗

    用CameraX打开摄像头预览,显示在界面上.结合悬浮窗的功能.实现一个可拖动悬浮窗,实时预览摄像头的例子. 这个例子放进了单独的模块里.使用时注意gradle里的细微差别. 操作摄像头,打开预览.这 ...

  3. RabbitMQ使用 prefetch_count优化队列的消费,使用死信队列和延迟队列实现消息的定时重试,golang版本

    RabbitMQ 的优化 channel prefetch Count 死信队列 什么是死信队列 使用场景 代码实现 延迟队列 什么是延迟队列 使用场景 实现延迟队列的方式 Queue TTL Mes ...

  4. python @property用法(转载)

    偶然碰到一篇讲解 @property 比较清晰的文章 记录下来 日常复习 # @property'''@property是python的一种装饰器,是用来修饰方法的 作用:我们可以使用@propert ...

  5. Linux中安装java JDK

    Linux中安装java JDK 1.下载jdk 下载地址:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads. ...

  6. Clickhouse的MergeTree表引擎存储结构

    MergeTree存储的文件结构 一张数据表被分成几个data part,每个data part对应文件系统中的一个目录.通过以下SQL可以查询data parts的信息. select table, ...

  7. HITsz 数据库笔记

    这是 HITsz 数据库笔记,欢迎到我的 GitHub 上查看,有笔记说明和源码,作业和实验报告,希望对你有帮助 博客园显示图片异常 数据库基本概念 数据抽象 通过抽象来对用户屏蔽复杂性,以简化用户与 ...

  8. 关于less使用初学者常犯错误

    1.多层嵌套 2.定义变量复用性不高 3.方法定义多余参数.

  9. Flutter 2022 产品路线图发布

    为了提升产品的透明性,每年年初 Flutter 团队都会发布今年度的产品路线图,以帮助使用 Flutter 的团队和开发者们根据这些优先事项制定计划. 2022 年 Flutter 团队将重点通过关注 ...

  10. Java的JDBC

    第一个JDBC程序 创建测试数据库 CREATE DATABASE jdbcStudy CHARACTER SET utf8 COLLATE utf8_general_ci; USE jdbcStud ...