一、安装
1.1、安装版本
apache-tomcat-7.0.40
apache httpd 2.2.22
tomcat-connectors-1.2.37-windows-i386-httpd-2.2.x
1.2、下载安装过程略
该配置为单机多tomcat节点配置。
二、配置
httpd.conf
在文件的末尾添加以下内容:
-
#==================================================
-
#配置Apache与Tomcat之间的连接
-
LoadModule jk_module modules/mod_jk.so
-
-
#指定tomcat监听配置文件
-
JkWorkersFile conf/workers.properties
-
-
#指定日志存放位置
-
JkLogFile logs/mod_jk.log
-
-
#指定日志输出级别
-
JkLogLevel warn
-
-
HostnameLookups Off
-
-
-
#设置虚拟主机
-
<VirtualHost *>
-
-
ServerAdmin hehzdc@163.com
-
Serveralias localhost
-
-
#站点路径中不能存在空格
-
DocumentRoot "E:\HttpdRoot"
-
-
ServerName localhost:80
-
-
ErrorLog logs/shsc-error_log.txt
-
CustomLog logs/shsc-access_log.txt common
-
-
<Directory />
-
Options Indexes FollowSymLinks
-
#Options None #禁止索引文件目录的权限
-
AllowOverride None
-
Order allow,deny
-
Allow from all
-
</Directory>
-
-
#指定哪些请求转发给Tomcat处理,cluster1是workers.propertise配置文件里定义的负载均衡器的名字
-
-
#JkMount /servlet/* cluster1
-
JkMount /*.jsp cluster1
-
#JkMount /*.action cluster1
-
#JkMount /*.do cluster1
-
#JkMount /*.action cluster1
-
#JkMount /*j_spring_security_check cluster1
-
-
</VirtualHost>
works.properties
该文件手动创建,放到httpd.conf文件同级目录下,文件内容:
-
#为解决找不到负载分发器的问题
-
#workers.java_home=C:/Program Files/Java/jdk1.7.0_04
-
-
worker.list=cluster1
-
-
#========tomcat1============================================================
-
#ajp13端口号,在tomcat下server.xml配置,默认8009
-
worker.tomcat1.port=8009
-
#tomcat所在机器的IP地址
-
worker.tomcat1.host=localhost
-
#协议类型ajp13
-
worker.tomcat1.type=ajp13
-
#server的加权比重,值越高,分得的请求越多
-
worker.tomcat1.lbfactor=1
-
-
#========tomcat2============================================================
-
worker.tomcat2.port=9009
-
worker.tomcat2.host=localhost
-
worker.tomcat2.type=ajp13
-
worker.tomcat2.lbfactor=1
-
-
#========tomcat3============================================================
-
#worker.tomcat3.port=9019
-
#worker.tomcat3.host=192.168.68.171
-
#worker.tomcat3.type=ajp13
-
#worker.tomcat3.lbfactor=1
-
-
#========负载均衡控制器配置=================================================
-
worker.cluster1.type=lb
-
worker.cluster1.balance_workers=tomcat1,tomcat2
-
-
#关于tricky_session配置
-
# sticky_session sticky_session_force desc
-
# true false SESSION会复制,有粘性
-
# true true SESSION不复制,有粘性
-
# false false SESSION会复制,有粘性
-
# false true SESSION不复制,有粘性
-
-
# sticky_session=true - 请求始终由当前的tomcat处理
-
worker.cluster1.sticky_session=false
-
# sticky_session_force=false - 当tomcat挂了时,将session复制到另一台继续
-
worker.cluster1.sticky_session_force=false
tomcat1 的server.xml
-
<?xml version='1.0' encoding='utf-8'?>
-
<!--
-
Licensed to the Apache Software Foundation (ASF) under one or more
-
contributor license agreements. See the NOTICE file distributed with
-
this work for additional information regarding copyright ownership.
-
The ASF licenses this file to You under the Apache License, Version 2.0
-
(the "License"); you may not use this file except in compliance with
-
the License. You may obtain a copy of the License at
-
-
http://www.apache.org/licenses/LICENSE-2.0
-
-
Unless required by applicable law or agreed to in writing, software
-
distributed under the License is distributed on an "AS IS" BASIS,
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-
See the License for the specific language governing permissions and
-
limitations under the License.
-
-->
-
<!-- Note: A "Server" is not itself a "Container", so you may not
-
define subcomponents such as "Valves" at this level.
-
Documentation at /docs/config/server.html
-
-->
-
<Server port="8005" shutdown="SHUTDOWN">
-
<!-- Security listener. Documentation at /docs/config/listeners.html
-
<Listener className="org.apache.catalina.security.SecurityListener" />
-
-->
-
-
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
-
-
<Listener className="org.apache.catalina.core.JasperListener" />
-
-
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
-
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
-
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
-
-
<!-- Global JNDI resources
-
Documentation at /docs/jndi-resources-howto.html
-
-->
-
<GlobalNamingResources>
-
<!-- Editable user database that can also be used by
-
UserDatabaseRealm to authenticate users
-
-->
-
<Resource name="UserDatabase" auth="Container"
-
type="org.apache.catalina.UserDatabase"
-
description="User database that can be updated and saved"
-
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
-
pathname="conf/tomcat-users.xml" />
-
</GlobalNamingResources>
-
-
<!-- A "Service" is a collection of one or more "Connectors" that share
-
a single "Container" Note: A "Service" is not itself a "Container",
-
so you may not define subcomponents such as "Valves" at this level.
-
Documentation at /docs/config/service.html
-
-->
-
<Service name="Catalina">
-
-
-
<!--
-
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
-
maxThreads="150" minSpareThreads="4"/>
-
-->
-
-
-
<!-- A "Connector" represents an endpoint by which requests are received
-
and responses are returned. Documentation at :
-
Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
-
Java AJP Connector: /docs/config/ajp.html
-
APR (HTTP/AJP) Connector: /docs/apr.html
-
Define a non-SSL HTTP/1.1 Connector on port 8080
-
-->
-
<Connector port="8080" protocol="HTTP/1.1"
-
connectionTimeout="20000"
-
redirectPort="8443" />
-
-
<!--
-
<Connector executor="tomcatThreadPool"
-
port="8080" protocol="HTTP/1.1"
-
connectionTimeout="20000"
-
redirectPort="8443" />
-
-->
-
<!-- Define a SSL HTTP/1.1 Connector on port 8443
-
This connector uses the JSSE configuration, when using APR, the
-
connector should be using the OpenSSL style configuration
-
described in the APR documentation -->
-
<!--
-
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
-
maxThreads="150" scheme="https" secure="true"
-
clientAuth="false" sslProtocol="TLS" />
-
-->
-
-
-
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
-
-
-
<!-- An Engine represents the entry point (within Catalina) that processes
-
every request. The Engine implementation for Tomcat stand alone
-
analyzes the HTTP headers included with the request, and passes them
-
on to the appropriate Host (virtual host).
-
Documentation at /docs/config/engine.html -->
-
-
<!-- You should set jvmRoute to support load-balancing via AJP ie :
-
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
-
-->
-
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
-
-
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
-
channelSendOptions="8">
-
-
<Manager className="org.apache.catalina.ha.session.DeltaManager"
-
expireSessionsOnShutdown="false"
-
notifyListenersOnReplication="true"/>
-
-
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
-
<Membership className="org.apache.catalina.tribes.membership.McastService"
-
address="228.0.0.3"
-
port="45561"
-
frequency="500"
-
dropTime="3000"/>
-
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
-
address="auto"
-
port="4501"
-
autoBind="100"
-
selectorTimeout="5000"
-
maxThreads="6"/>
-
-
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
-
<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
-
</Sender>
-
<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
-
<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
-
</Channel>
-
-
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
-
filter=""/>
-
<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
-
-
<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
-
tempDir="/tmp/war-temp/"
-
deployDir="/tmp/war-deploy/"
-
watchDir="/tmp/war-listen/"
-
watchEnabled="false"/>
-
-
<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
-
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
-
</Cluster>
-
-
<!--For clustering, please take a look at documentation at:
-
/docs/cluster-howto.html (simple how to)
-
/docs/config/cluster.html (reference documentation) -->
-
-
-
-
-
-
<!-- Use the LockOutRealm to prevent attempts to guess user passwords
-
via a brute-force attack -->
-
<Realm className="org.apache.catalina.realm.LockOutRealm">
-
<!-- This Realm uses the UserDatabase configured in the global JNDI
-
resources under the key "UserDatabase". Any edits
-
that are performed against this UserDatabase are immediately
-
available for use by the Realm. -->
-
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
-
resourceName="UserDatabase"/>
-
</Realm>
-
-
<Host name="localhost" appBase="webapps"
-
unpackWARs="true" autoDeploy="true">
-
-
<!-- SingleSignOn valve, share authentication between web applications
-
Documentation at: /docs/config/valve.html -->
-
-
-
-
-
<!-- Access log processes all example.
-
Documentation at: /docs/config/valve.html
-
Note: The pattern used is equivalent to using pattern="common" -->
-
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
-
prefix="localhost_access_log." suffix=".txt"
-
pattern="%h %l %u %t "%r" %s %b" />
-
-
</Host>
-
</Engine>
-
</Service>
-
</Server>
tomcat2 的 server.xml
-
<?xml version='1.0' encoding='utf-8'?>
-
<!--
-
Licensed to the Apache Software Foundation (ASF) under one or more
-
contributor license agreements. See the NOTICE file distributed with
-
this work for additional information regarding copyright ownership.
-
The ASF licenses this file to You under the Apache License, Version 2.0
-
(the "License"); you may not use this file except in compliance with
-
the License. You may obtain a copy of the License at
-
-
http://www.apache.org/licenses/LICENSE-2.0
-
-
Unless required by applicable law or agreed to in writing, software
-
distributed under the License is distributed on an "AS IS" BASIS,
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-
See the License for the specific language governing permissions and
-
limitations under the License.
-
-->
-
<!-- Note: A "Server" is not itself a "Container", so you may not
-
define subcomponents such as "Valves" at this level.
-
Documentation at /docs/config/server.html
-
-->
-
<Server port="9005" shutdown="SHUTDOWN">
-
<!-- Security listener. Documentation at /docs/config/listeners.html
-
<Listener className="org.apache.catalina.security.SecurityListener" />
-
-->
-
-
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
-
-
<Listener className="org.apache.catalina.core.JasperListener" />
-
-
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
-
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
-
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
-
-
<!-- Global JNDI resources
-
Documentation at /docs/jndi-resources-howto.html
-
-->
-
<GlobalNamingResources>
-
<!-- Editable user database that can also be used by
-
UserDatabaseRealm to authenticate users
-
-->
-
<Resource name="UserDatabase" auth="Container"
-
type="org.apache.catalina.UserDatabase"
-
description="User database that can be updated and saved"
-
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
-
pathname="conf/tomcat-users.xml" />
-
</GlobalNamingResources>
-
-
<!-- A "Service" is a collection of one or more "Connectors" that share
-
a single "Container" Note: A "Service" is not itself a "Container",
-
so you may not define subcomponents such as "Valves" at this level.
-
Documentation at /docs/config/service.html
-
-->
-
<Service name="Catalina">
-
-
-
<!--
-
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
-
maxThreads="150" minSpareThreads="4"/>
-
-->
-
-
-
<!-- A "Connector" represents an endpoint by which requests are received
-
and responses are returned. Documentation at :
-
Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
-
Java AJP Connector: /docs/config/ajp.html
-
APR (HTTP/AJP) Connector: /docs/apr.html
-
Define a non-SSL HTTP/1.1 Connector on port 8080
-
-->
-
-
<Connector port="9080" protocol="HTTP/1.1"
-
connectionTimeout="20000"
-
redirectPort="9443" />
-
-
-
<!--
-
<Connector executor="tomcatThreadPool"
-
port="8080" protocol="HTTP/1.1"
-
connectionTimeout="20000"
-
redirectPort="8443" />
-
-->
-
<!-- Define a SSL HTTP/1.1 Connector on port 8443
-
This connector uses the JSSE configuration, when using APR, the
-
connector should be using the OpenSSL style configuration
-
described in the APR documentation -->
-
<!--
-
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
-
maxThreads="150" scheme="https" secure="true"
-
clientAuth="false" sslProtocol="TLS" />
-
-->
-
-
-
<Connector port="9009" protocol="AJP/1.3" redirectPort="9443" />
-
-
-
<!-- An Engine represents the entry point (within Catalina) that processes
-
every request. The Engine implementation for Tomcat stand alone
-
analyzes the HTTP headers included with the request, and passes them
-
on to the appropriate Host (virtual host).
-
Documentation at /docs/config/engine.html -->
-
-
<!-- You should set jvmRoute to support load-balancing via AJP ie :
-
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
-
-->
-
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">
-
-
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
-
channelSendOptions="8">
-
-
<Manager className="org.apache.catalina.ha.session.DeltaManager"
-
expireSessionsOnShutdown="false"
-
notifyListenersOnReplication="true"/>
-
-
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
-
<Membership className="org.apache.catalina.tribes.membership.McastService"
-
address="228.0.0.3"
-
port="45561"
-
frequency="500"
-
dropTime="3000"/>
-
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
-
address="auto"
-
port="4501"
-
autoBind="100"
-
selectorTimeout="5000"
-
maxThreads="6"/>
-
-
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
-
<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
-
</Sender>
-
<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
-
<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
-
</Channel>
-
-
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
-
filter=""/>
-
<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
-
-
<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
-
tempDir="/tmp/war-temp/"
-
deployDir="/tmp/war-deploy/"
-
watchDir="/tmp/war-listen/"
-
watchEnabled="false"/>
-
-
<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
-
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
-
</Cluster>
-
-
<!--For clustering, please take a look at documentation at:
-
/docs/cluster-howto.html (simple how to)
-
/docs/config/cluster.html (reference documentation) -->
-
-
-
-
-
<!-- Use the LockOutRealm to prevent attempts to guess user passwords
-
via a brute-force attack -->
-
<Realm className="org.apache.catalina.realm.LockOutRealm">
-
<!-- This Realm uses the UserDatabase configured in the global JNDI
-
resources under the key "UserDatabase". Any edits
-
that are performed against this UserDatabase are immediately
-
available for use by the Realm. -->
-
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
-
resourceName="UserDatabase"/>
-
</Realm>
-
-
<Host name="localhost" appBase="webapps"
-
unpackWARs="true" autoDeploy="true">
-
-
<!-- SingleSignOn valve, share authentication between web applications
-
Documentation at: /docs/config/valve.html -->
-
-
-
-
-
<!-- Access log processes all example.
-
Documentation at: /docs/config/valve.html
-
Note: The pattern used is equivalent to using pattern="common" -->
-
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
-
prefix="localhost_access_log." suffix=".txt"
-
pattern="%h %l %u %t "%r" %s %b" />
-
-
</Host>
-
</Engine>
-
</Service>
-
</Server>
实际测试过程中遇到的问题
网上资料很多描述说,<membership/>的监听端口如果是同一机器,各tomcat配置要区分开,我测试的实际情况是,设成不同端口tomcat之间session无法复制:
-
<Membership className="org.apache.catalina.tribes.membership.McastService"
-
address="228.0.0.3"
-
port="45561"
-
frequency="500"
-
dropTime="3000"/>
-
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
-
address="auto"
-
port="4501"
-
autoBind="100"
-
selectorTimeout="5000"
-
maxThreads="6"/>
org.apache.catalina.tribes.membership.McastService的address和port在各tomcat里配置都必须完全相同,而Receiver的port,可以设为不同,如果相同,tomcat会自动区分开,设一个未被占用的端口。
(责任编辑:IT) |