Tomcat 集群配置
打开Server.xml,shutdown, ajp, http这三个端口就不多说了,解开下面注释
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
jvmRoute的值要根据apache的配置,不能冲突。
接着是最重要的一点,tomcat默认集群配置(<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>)时,配置的细节实际上被省略了,对于大多数应用而言,使用默认配置已经足够,完整的默认配置应该是这样:
Xml代码 [url=http://tyler-zhou.javaeye.com/blog/507158]
<!--同步异步模式由channelSendOptions参数控制,默认值是8,为异步模式,4是同步模式。在异步模式下,可以通过加上拷贝确认(Acknowledge)来提高可靠性,此时channelSendOptions设为10。-->
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="6">
<!---session 拷贝方式 BackupManager 只拷贝部署当前应用的服务器,DeltaManager 拷贝方式all to all-->
<Manager className="org.apache.catalina.ha.session.BackupManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"
mapSendOptions="6"/>
<!--
<Manager className="org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"/>
-->
<!--Channel负责对tomcat集群的IO层进行配置-->
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
<!--Membership用于发现集群中的其他节点,这里的address用的是组播地址(Multicast address,了解更多组播地址详情请参见http://zyycaesar.javaeye.com/admin/blogs/296501),使用同一个组播地址和端口的多个节点同属一个子集群,因此通过自定义组播地址和端口就可将一个大的tomcat集群分成多个子集群-->
<Membership className="org.apache.catalina.tribes.membership.McastService"
address="228.0.0.4"
port="45564"
frequency="500"
dropTime="3000"/>
<!--Receiver用于各个节点接收其他节点发送的数据,在默认配置下tomcat会从4000-4100间依次选取一个可用的端口进行接收,自定义配置时,如果多个tomcat节点在一台物理服务器上注意要使用不同的端口-->
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="auto"
port="5001"
selectorTimeout="100"
maxThreads="6"/>
<!--Sender用于向其他节点发送数据,具体实现通过Transport配置,PooledParallelSender是从tcp连接池中获取连接,可以实现并行发送,即集群中的多个节点可以同时向其他所有节点发送数据而互不影响-->
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
</Sender>
<!---Interceptor有点类似下面将要解释的Valve,起到一个阀门的作用,在数据到达目的节点前进行检测或其他操作,如TcpFailureDetector用于检测在数据的传输过程中是否发生了tcp错误。--->
<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>
</Channel>
<!--Valve用于在节点向客户端响应前进行检测或进行某些操作,ReplicationValve就是用于用于检测当前的响应是否涉及Session数据的更新,如果是则启动Session拷贝操作,filter用于过滤请求,如客户端对图片,css,js的请求就不会涉及Session,因此不需检测,默认状态下不进行过滤,监测所有的响应.JvmRouteBinderValve会在前端的Apache mod_jk发生错误时保证同一客户端的请求发送到集群的同一个节点-->
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>
<!--Deployer用于集群的farm功能,监控应用中文件的更新,以保证集群中所有节点应用的一致性,如某个用户上传文件到集群中某个节点的应用程序目录下,Deployer会监测到这一操作并把这一文件拷贝到集群中其他节点相同应用的对应目录下以保持所有应用的一致。这是一个相当强大的功能,不过很遗憾,tomcat集群目前并不能做到这一点,开发人员正在努力实现它,这里的配置只是预留了一个接口-->
<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false"/>
<!--Listener用于跟踪集群中节点发出和收到的数据,也有点类似Valve的功能。-->
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>
最后在Web.xml里面加上<distributable/>,官方文档没有这个,但我觉得还是应该加上,因为按照标准的tomcat启动,当Host对象被创建时,一个Cluster对象(默认配置下是SimpleTcpCluster)也同时被关联到这个Host对象。当某个应用在web.xml中设置了distributable时,Tomcat将为此应用的上下文环境创建一个DeltaManager。SimpleTcpCluster启动membership服务和Replication服务。
---
extra/httpd-mpm.conf 模块
上边一样的就不贴了,主要是下边的配置,因为我用了mod_security模块,所以要做一些配置,这里不做解释了,写的很详细,我比较喜欢在配置文件里把容易忘记的地方写上文档。毕竟这东西配完了就不再动了,很容易忘记
# WinNT MPM
# ThreadsPerChild: constant number of worker threads in the server process
# MaxRequestsPerChild: maximum number of requests a server process serves
#注意:ThreadLimit指令应当放在ThreadsPerChild之前,否则ThreadsPerChild指令生效后ThreadLimit会失效,而导致不必要的错误 ThreadLimit必须大于等于ThreadsPerChild
#对于mpm_winnt,ThreadLimit的默认值是1920;对于其他MPM这个值是64
#ThreadLimit 这个指令设置了每个子进程可配置的线程数ThreadsPerChild上限。任何在重启期间对这个指令的改变都将被忽略,但对ThreadsPerChild的修改却会生效。
#ThreadLimit 使用这个指令时要特别当心。如果将ThreadLimit设置成一个高出ThreadsPerChild实际需要很多的值,将会有过多的共享内存被分配。
#如果将ThreadLimit和ThreadsPerChild设置成超过系统的处理能力,Apache可能无法启动,或者系统将变得不稳定。该指令的值应当和ThreadsPerChild大致保持一致
#ThreadsPerChild 每个子进程建立的常驻的执行线程数。默认值是25。子进程在启动时建立这些线程后就不再建立新的线程了。
<IfModule mpm_winnt_module>
ThreadLimit 2000
ThreadsPerChild 2000
MaxRequestsPerChild 2000
</IfModule>
相关推荐
4. **原理**:JK插件作为负载均衡器,根据`worker.properties`文件中的配置参数为Tomcat服务器分配负载;而各Tomcat服务器之间通过`SimpleTcpCluster`进行通信,实现Session等状态的同步。 #### 三、Apache+Tomcat...
### Apache和Tomcat集群配置详解 #### 一、软件准备 在进行Apache和Tomcat集群配置之前,首先需要准备所需的软件资源。 - **Apache 2.2**: - Windows平台: 从官方网站 [http://httpd.apache.org/download.cgi]...
5. **Tomcat配置**:在Tomcat的server.xml文件中,需要配置Connector元素,开启AJP支持。例如: ``` ``` 6. **负载均衡**:Apache可以通过`ProxyBalance`指令实现负载均衡,可以设置轮询、权重分配等策略。例如...
在下载的“apache+tomcat配置文件”中,可能包含了这些配置的示例或模板,可以直接使用或作为参考来配置自己的环境。确保在实际部署前,根据自身的硬件资源和应用需求进行适当的调整,以达到最佳的运行效果。在部署...
在构建高性能、高可用性的Web应用系统时,Apache与Tomcat的集群配置是常见的解决方案。Apache作为前端服务器,可以通过负载均衡技术将用户请求分发到多个后端的Tomcat实例上,实现请求的分担,同时通过session同步,...
在Linux环境下配置Tomcat与Apache集群,主要是为了提高应用程序的可用性和可伸缩性,确保在高并发访问或单个服务器故障时系统仍能正常运行。以下是对文档中提到的知识点的详细说明: 1. **内存分配**: - 根据...
总结,配置Apache和Tomcat集群涉及多个环节,包括Apache的负载均衡配置、Tomcat的集群设置、session共享以及故障转移和会话持久化策略。每个环节都需要细致操作,以确保在64位Windows系统上实现稳定、高效的Web服务...
4. **Tomcat配置**: - 修改每个Tomcat实例的`server.xml`文件,开启AJP连接器,设置监听端口(如8009或9009),以便Apache通过AJP协议与Tomcat通信。 5. **测试**: - 创建一个简单的测试JSP页面,放在每个...
2. **Tomcat配置**: - 在每个Tomcat实例的server.xml文件中,打开AJP连接器: ``` ``` - 如果需要,可以配置session复制以实现会话持久性,这需要在`context.xml`文件中添加`<Manager>`元素: ``` ``` -...
- 通过调整Apache和Tomcat的配置参数,优化服务器性能,如增加最大连接数、调整线程池大小等。 - 定期检查和更新服务器软件,防止安全漏洞。 总之,通过Apache搭建Tomcat集群,不仅可以提高Web应用的可用性,还能...
本手册详细介绍了在Windows 2008操作系统上配置NLB(网络负载均衡)、Apache 2.2和Tomcat 5的集群环境的步骤和要点。以下是根据手册内容整理出的详细知识点: 1. 环境准备:需要有两台安装Windows 2008 R2操作系统...
2. **Tomcat配置**: - 每个Tomcat实例(t1和t2)都需要有自己的`server.xml`配置文件。 - **关闭端口**:更改`<Server>`标签中的端口,如将t2的`port="8005"`更改为`port="9005"`,以避免冲突。 - **Connector...
如果需要更高可用性,可以将多个Tomcat实例配置成集群,通过Apache的mod_proxy_balancer模块进行负载均衡。这将提高服务的容错能力和扩展性。 8. **日志管理** 考虑将Apache和Tomcat的日志分开管理,以便更好地...