- 浏览: 10010 次
- 性别:
- 来自: 上海
最新评论
Apache2.2.11+Tomcat6.0.20集群配置
- 博客分类:
- tomcat
Apache2.x和Tomcat配置可以采用反向代理的方式(mod proxy),也可以采用JK模块,最终采用了JK模块,JK模块的效率要比反向代理高,这是Apache官方网站上说的,我没有测试过。JK配置虽然复杂,但更加灵活。
首先,下载Apache2.2.11,Tomcat6.0.20解压版,以及mod_jk-1.2.28-httpd-2.2.3.so
安装Apache服务器,将mod_jk-1.2.28-httpd-2.2.3.so重命名为mod_jk.so并拷贝到Apache安装目录下的modules文件夹中。
在Apache2.2安装目录的conf文件夹下,建立以下3个文件:
mod_jk.conf、workers.properties、uriworkermap.properties
在httpd.conf最后加上:
# JK module settings Include conf/mod_jk.conf
表示将mod_jk.conf配置文件包含进来,以下是mod_jk.conf文件的内容:
- # Load JK Module
- LoadModule jk_module modules/mod_jk.so
- # Configure mod_jk
- JkWorkersFile conf/workers.properties
- JkMountFile conf/uriworkermap.properties
- JkShmFile logs/mod_jk.shm
- JkLogFile logs/mod_jk.log
- JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
- JkLogLevel warn
- JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
- HostnameLookups Off
- <Location /jkmanager/>
- JkMount jkstatus
- Order deny,allow
- Deny from all
- Allow from 127.0.0.1
- </Location>
# Load JK Module LoadModule jk_module modules/mod_jk.so # Configure mod_jk JkWorkersFile conf/workers.properties JkMountFile conf/uriworkermap.properties JkShmFile logs/mod_jk.shm JkLogFile logs/mod_jk.log JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories JkLogLevel warn JkLogStampFormat "[%a %b %d %H:%M:%S %Y]" HostnameLookups Off <Location /jkmanager/> JkMount jkstatus Order deny,allow Deny from all Allow from 127.0.0.1 </Location>
接下来配置workers.properties文件:
- # environment slash for Windows(反斜杠代表Windows系统)
- ps=\
- worker.retries=3
- # 此处定义了一个负载均衡器和状态监视器
- worker.list=loadbalancer,jkstatus
- worker.tomcatA.type=ajp13
- worker.tomcatA.host=localhost
- worker.tomcatA.port=9001
- worker.tomcatA.lbfactor=1
- worker.tomcatA.connection_pool_timeout=600
- worker.tomcatA.socket_keepalive=true
- worker.tomcatA.socket_timeout=60
- worker.tomcatB.type=ajp13
- worker.tomcatB.host=localhost
- worker.tomcatB.port=9002
- worker.tomcatB.lbfactor=1
- worker.tomcatB.connection_pool_timeout=600
- worker.tomcatB.socket_keepalive=true
- worker.tomcatB.socket_timeout=60
- worker.tomcatC.type=ajp13
- worker.tomcatC.host=localhost
- worker.tomcatC.port=9003
- worker.tomcatC.lbfactor=1
- worker.tomcatC.connection_pool_timeout=600
- worker.tomcatC.socket_keepalive=true
- worker.tomcatC.socket_timeout=60
- worker.jkstatus.type=status
- worker.loadbalancer.type=lb
- worker.loadbalancer.sticky_session=true
- worker.loadbalancer.sticky_session_force=false
- worker.loadbalancer.balance_workers=tomcatA,tomcatB,tomcatC
# environment slash for Windows(反斜杠代表Windows系统) ps=\ worker.retries=3 # 此处定义了一个负载均衡器和状态监视器 worker.list=loadbalancer,jkstatus worker.tomcatA.type=ajp13 worker.tomcatA.host=localhost worker.tomcatA.port=9001 worker.tomcatA.lbfactor=1 worker.tomcatA.connection_pool_timeout=600 worker.tomcatA.socket_keepalive=true worker.tomcatA.socket_timeout=60 worker.tomcatB.type=ajp13 worker.tomcatB.host=localhost worker.tomcatB.port=9002 worker.tomcatB.lbfactor=1 worker.tomcatB.connection_pool_timeout=600 worker.tomcatB.socket_keepalive=true worker.tomcatB.socket_timeout=60 worker.tomcatC.type=ajp13 worker.tomcatC.host=localhost worker.tomcatC.port=9003 worker.tomcatC.lbfactor=1 worker.tomcatC.connection_pool_timeout=600 worker.tomcatC.socket_keepalive=true worker.tomcatC.socket_timeout=60 worker.jkstatus.type=status worker.loadbalancer.type=lb worker.loadbalancer.sticky_session=true worker.loadbalancer.sticky_session_force=false worker.loadbalancer.balance_workers=tomcatA,tomcatB,tomcatC
上述配置文件中,sticky_session=true,sticky_session_force=false。很多文章建议,前者设置为true时,后者也设置为true。
实际上,负载均衡和集群复制是两个概念。在Tomcat的集群复制中,分为DeltaManager和BackupManager两种,前者适合于小型系统,任何情况下,均进行Session复制,消耗大量资源。所以,我们应该采用BackupManager,仅在需要的时候(Tomcat挂掉的时候)进行Session复制。
sticky_session=true表示某个请求始终由当前Tomcat处理,不会转移到其他Tomcat上。sticky_session_force=false表示,当前Tomcat挂掉的时候,自动将Session复制到其他Tomcat上。如果将sticky_session_force设置为true,当你关闭一台Tomcat并刷新网页,将得到503错误。但设置为false,关闭一台Tomcat并刷新网页,被关闭的那台Tomcat上的Session会被自动复制到其他Tomcat上,系统继续正常运行。
再来看uriworkermap.properties文件,这个文件是用来定义哪些资源由Tomcat处理,哪些资源由Apache处理。
- /*.jsp=loadbalancer
- /*.action=loadbalancer
- /jkmanager/*=jkstatus
- !*.gif=loadbalancer
- !*.jpg=loadbalancer
- !*.png=loadbalancer
- !*.bmp=loadbalancer
- !*.css=loadbalancer
- !*.js=loadbalancer
- !*.htm=loadbalancer
- !*.html=loadbalancer
- !*.swf=loadbalancer
/*.jsp=loadbalancer /*.action=loadbalancer /jkmanager/*=jkstatus !*.gif=loadbalancer !*.jpg=loadbalancer !*.png=loadbalancer !*.bmp=loadbalancer !*.css=loadbalancer !*.js=loadbalancer !*.htm=loadbalancer !*.html=loadbalancer !*.swf=loadbalancer
上述配置文件将jsp和action交给负载均衡器处理,实际上就是Tomcat,其他请求由Apache处理。如果你用!/*.gif=loadbalancer,图片可能会不显示,正确设置虚拟目录即可。或者使用!*.gif=loadbalancer,代表所有gif图片均交给Apache处理。
接下来,配置Tomcat的配置文件。Tomcat6解压后,server.xml和Tomcat5相比,少很多注释的内容,所以需要到Tomcat5的server.xml文件中拷贝过来,然后去掉注释。
需要修改的端口:
SHUTDOWN、HTTP/1.1、AJP/1.3、Receiver 4001,如果是同一台机器,确保上述端口均不同。
3台Tomcat的jvmRoute需要同workers.properties中的一致
- <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcatA">
- <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcatB">
- <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcatC">
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcatA"> <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcatB"> <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcatC">
以下是集群配置内容(Tomcat6的server.xml中没有相应的注释代码,必须从Tomcat5的里面复制过来,再修改一下):
- <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
- channelSendOptions="6">
- <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 className="org.apache.catalina.tribes.group.GroupChannel">
- <Membership className="org.apache.catalina.tribes.membership.McastService"
- bind="127.0.0.1"
- address="228.0.0.4"
- port="45564"
- frequency="500"
- dropTime="3000"/>
- <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
- address="127.0.0.1"
- port="4001"
- selectorTimeout="100"
- 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"/>
- <Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>
- </Channel>
- <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
- filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>
- <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
- </Cluster>
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="6"> <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 className="org.apache.catalina.tribes.group.GroupChannel"> <Membership className="org.apache.catalina.tribes.membership.McastService" bind="127.0.0.1" address="228.0.0.4" port="45564" frequency="500" dropTime="3000"/> <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="127.0.0.1" port="4001" selectorTimeout="100" 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"/> <Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/> </Channel> <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/> <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/> </Cluster>
注意:这里要使用BackupManager,不要使用DeltaManager。3台Tomcat的Receiver端口要设置为不一样的。
接下来,要进行Session复制,还需要给你的web.xml配置文件中加一行<distributable/>。这样很麻烦,改变Tomcat的content.xml配置文件就可以了,修改19行为<Context distributable="true">
大功告成,先启动Apache,然后分别启动几个Tomcat。
在浏览器上输入http://localhost/test.jsp
在一个Tomcat设置Session的内容,然后刷新,通过观察后台窗口,会发现Session一直粘在这台Tomcat上,然后关闭掉这台Tomcat,继续刷新页面,会发现Session里面的内容自动转移到了另外一台Tomcat上面。如果你将sticky_session_force设置为false,此时刷新页面,就会报503错误。
对uriworkermap.properties还有一些模糊,加了/后就代表相对路径,不加代表绝对匹配,我用*.jsp,居然报404找不到页面的错误。用/*.jsp就正常了,我没有设置任何虚拟目录。而图片的配置刚好相反,加了斜杠就不显示,去掉就可以显示了。想不通啊!
以下是测试用的test.jsp
- <%@ page contentType="text/html; charset=GBK" %>
- <%@ page import="java.util.*" %>
- <html><head><title>Cluster App Test</title></head>
- <body>
- <%
- System.out.println("SessionID:" + session.getId());
- %>
- Server Info:
- <%
- out.println(request.getServerName() + " : " + request.getServerPort()+"<br>");%>
- <%
- out.println("<br> ID " + session.getId()+"<br>"); // 如果有新的 Session 属性设置
- String dataName = request.getParameter("dataName");
- if (dataName != null && dataName.length() > 0) {
- String dataValue = request.getParameter("dataValue");
- session.setAttribute(dataName, dataValue);
- }
- out.print("<b>Session 列表</b><br>");
- Enumeration e = session.getAttributeNames();
- while (e.hasMoreElements()) {
- String name = (String)e.nextElement();
- String value = session.getAttribute(name).toString();
- out.println( name + " = " + value+"<br>");
- System.out.println( name + " = " + value);
- }
- %>
- <form action="test.jsp" method="POST">
- 名称:<input type=text size=20 name="dataName">
- <br>
- 数值:<input type=text size=20 name="dataValue">
- <br>
- <input type=submit>
- </form>
- </body>
- </html>
相关推荐
SVN1.4.6 + apache2.2.11 + tomcat 6.0.18 集成配置SVN1.4.6 + apache2.2.11 + tomcat 6.0.18 集成配置
apache2.2.11和tomcat6整合配置例子打包下载,开发宝典...... apache2.2.11和tomcat6整合配置 1,下载mod_jk.so 2,在apache的httpd.conf里面加入下面的话 LoadModule jk_module modules/mod_jk.so JkWorkersFile "D:\...
首先,你需要下载Apache 2.2.11和Tomcat 6.0.20的解压版本,以及对应版本的JK模块,例如mod_jk-1.2.28-httpd-2.2.3.so。然后,安装Apache服务器,并将JK模块的.so文件重命名为mod_jk.so,将其复制到Apache的modules...
【Apache+Tomcat 集群与负载均衡及Session绑定】是将多个Apache和Tomcat服务器配置成一个集群,以实现更高的服务可扩展性和可用性。集群的基本思想是通过将工作负载分散到多个服务器,避免单点故障,提高系统的整体...
XP搭建Apache+Tomcat+JSP+PHP+MYSQL环境教程 ...1、apache_2.2.11-win32-x86-no_ssl.msi 2、Mod_jk-1.2.28-httpd-2.2.3.so 3、apache-tomcat-6.0.18.zip 4、mysql-5.5.15-win32.msi 5、php-5.4.35-Win32-VC9-x86
### Apache+Tomcat整合安装配置详解(Windows平台) #### 一、概述 本文将详细介绍如何在Windows平台上安装和配置Apache与Tomcat,并实现基于mod_jk模块的负载均衡。通过这种方式,可以有效地提高Web应用程序的...
本文档详细介绍了如何在 Windows 系统上安装配置并整合 Apache Tomcat 6.0.20 和 Apache 2.2.11。这种整合可以有效地提升 Web 应用程序的性能和服务质量,同时也能让 Web 开发者更加灵活地管理应用程序。以下是整个...
在本文中,我们将深入探讨Apache 2.2.11在Windows平台上的安装、配置、使用以及其主要特性。 1. **安装Apache 2.2.11 on Windows** - 下载:首先,你需要从官方或可靠的源下载`apache_2.2.11.zip`文件,解压缩到...
在Windows平台上配置Apache+Tomcat环境,主要是为了搭建一个能够处理Java Web应用的服务器。Apache HTTP服务器作为前端服务器,负责处理HTTP请求,并通过mod_jk模块与后台的Tomcat Web应用容器进行通信。以下是详细...
在httpd-2.2.11文件中,用户可以找到安装和配置Apache所需的所有文件,包括源代码、文档、示例配置等。安装过程通常包括编译源代码、配置服务器选项、安装二进制文件以及启动和管理服务器等步骤。 总的来说,Apache...
apache 2.2.11配置文件中英文对照
4. 配置Apache以支持SVN,编辑`httpd.conf`,添加以下模块和配置: ```apache LoadModule dav_svn_module modules/mod_dav_svn.so LoadModule authz_svn_module modules/mod_authz_svn.so ``` 然后,添加一...
这个名为"apache_2.2.11-win32-x86-openssl-0.9.8i_gpxz"的压缩包文件,显然包含了在Windows 32位系统上运行的Apache 2.2.11版本,以及OpenSSL 0.9.8i库。这两个组件在IT领域中都具有重要的地位。 Apache 2.2.11是...
Apache+PHP+MySQL安装配置所需的资源与教程 由于上传大小限制,共分3个文件 一共包括: mysql-5.0.67-linux-i686-icc-glibc23.tar.gz httpd-2.2.11.tar.gz jpegsrc.v6b.tar.gz zlib-1.2.3.tar.gz libpng-1.2.34.tar....
ubuntu下Apache+PHP+MySQL安装配置所需的资源及一份教程 由于上传大小限制,共分三个文件 一共包括: mysql-5.0.67-linux-i686-icc-glibc23.tar.gz httpd-2.2.11.tar.gz jpegsrc.v6b.tar.gz zlib-1.2.3.tar.gz ...
最新win平台Apache+PHP+MySQL+PHPMyAdmin一键安装包(多国语言) WAMP是指在Windows服务器上使用Apache、MySQL和PHP的集成安装环境,可以快速...Apache 2.2.11 PHP 5.3.0 MySQL 5.1.36 Phpmyadmin 大小:16M
apache2.2.11最新版,win32版本,20个字很难凑啊