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文件,内容如下:

[xhtml] view plaincopyprint?

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

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

[xhtml] view plaincopyprint?

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

[xhtml] view plaincopyprint?

  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>
时间: 2024-11-13 10:07:39

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

通过Apache+mod_JK+Tomcat集群实现负载均衡

通过Apache+mod_JK+Tomcat集群实现负载均衡 1.概念 通过Apache+mod_JK+Tomcat集群搭建起来的环境主要用来实现负载均衡和高可用性.使用apache作为反向代理服务器实现负载均衡,使用mod_jk可以实现节点的故障恢复功能,达到高可用性.使用tomcat集群功能实现sessionID共享复制.用户访问数据在到达apache后,如果是静态内容,直接由apache处理,如果是动态请求,就通过mod_jk调用后端的一台tomcat服务器去处理请求,可以通过黏性Sess

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

实验环境: 1.nginx的代理功能 nginx proxy: eth0: 192.168.8.48 vmnet2 eth1: 192.168.10.10 tomcat server1: vmnet2 eth0: 192.168.10.20 tomcat server2: vmnet2 eth0: 192.168.10.30 # yum install -y nginx-1.8.1-1.el6.ngx.x86_64.rpm # vim /etc/nginx/conf.d/default.conf

Linux LVS(Linux virtual server)V1.26 负载均衡 详细配置教程

2 Linux LVS(Linux virtual server)V1.26 负载均衡 配置思路: 安装LVS服务器 在LVS服务器上安装kernel 链接内核文件 并手动绑定VIP 配置realserver后端服务,手动执行VIP绑定脚本 2.1 LVS 概念 LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目,它的官方站点是www.linuxvirtualserver.org.现在LVS已经是 Linux标准内核的一部分

使用Apache通过JK实现多Tomcat负载均衡集群时,Apache不能将请求分发给Tomcat处理(即Apache反向代理不成功)的问题

前些天在做Apache通过JK实现多Tomcat负载均衡集群时,参考网上的配置将配置文件配置好后,访问已存在tomcat中的JSP文件时发现Apache提示URL不存在,然后检查了配置文件及tomcat工程部署,发现配置部署均无问题.尝试访问Apache静态页面,通过http单独访问tomcat均无问题.然后我猜会不会之前参考的网上的配置有问题,于是继续查询网上其它配置发现都差不多,尝试更改各种参数均没有解决.后来我仔细想了想出现这个问题的原因应该是Apache没有将HTTP请求分发给Tomca

nginx编译安装与apache动静分离共存设置及负载均衡设置

nginx对于静态文件强大的响应能力一定程度上弥补了apache环境的不足,使用nginx做反向代理,一部分为了提高静态文件的相应能力,另外可以使用nginx做负载均衡来搭2至3台的apache服务器,这样在相当长的时间段内解决了初建团队的业务蓬勃发展所遇到的服务器资源问题. 1,安装依赖. yum -y install wget zip unzip zlib zlib-devel pcre pcre-devel  pcre* openssl openssl-devel perl perl-de

基于apache实现tomcat集群的负载均衡

概述 Tomcat是一个完全功能的HTTP服务器,能够独立完成接收客户端请求,处理请求,然后封装响应报文响应客户端.但是Tomcat的并发响应能力并不强,所以往往使用httpd或nginx服务器用于在前端接收客户端请求,然后将请求调度至后端多个Tomcat节点.本文介绍的是利用httpd作为反向代理服务器,实现Tomcat的负载均衡. httpd连接后端的Tomcat服务器,需要启用对应的模块.能够实现该功能的有两个模块:mod_proxy,mod_jk.mod_proxy是新出的模块,只有在a

使用Apache通过JK实现多Tomcat负载均衡集群实现总结及自己的感悟

第一次玩负载均衡集群,使用的是Apache.Tomcat,通过JK来实现.由于没有这方面经验,自己摸索了好多天,直到今天才基本完全搞定了.也了解了里面的一些相关原理,自己也亲自动手验证了一些原理.现将自己的经历过程和一些感悟总结分享一下,也以便自己日后查阅. 首先是下载Apache.Tomcat.JK,这没什么说的,主要注意一下需要的Apache的版本,然后是Apache.Tomcat集群相应的JK版本.版本不对的话会有问题.我自己在这里没遇到多大问题. 第一步,先做负载均衡,网上这方面的配置很

Apache上配置反向代理以及负载均衡配置

之前一个项目需要在Apache上配置负载均衡,由于事情繁多,时间紧迫,没有时间去弄. 今天抽时间测试了一把,至少是可以进行代理了. 现将如何配置反向代理和负载均衡分别描述. 1.反向代理 步骤: (1)在Apache的配置文件httpd.conf中打开反向代理的模块 #----------------------------------------------- LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_conne

nginx负载均衡二:配置

配置方法一(可用): upstream tomcatserver1 { server 192.168.70.170 weight=3; server 192.168.70.172; server 192.168.70.173 down; server 192.168.70.174; server 192.168.70.175 backup; } server { listen 80; server_name localhost; #charset koi8-r; #access_log logs