apache2.2 + tomcat7 集群配置记录
一直说做一下这个集群练习的,今天终于有时间了,就练习了一下,网上摘录了很多朋友的技术成果。完成了自己的练习。
官网上下载的apache版本为:httpd-2.2.22-win32-x86-no_ssl.msi
tomcat的版本是:apache-tomcat-7.0.30
在自己的电脑上:window xp上做的练习
安装apache,这个就不说了。一路next就可以。
小弟做了三个tomcat,由于硬件资源有限,所以三个tomcat都放在了本机。分别取名:tomcat7_a、tomcat7_b、tomcat7_c。放在D、E、F盘上。
都装好后,就开始配置,我这里先配置的是apache,采用的不是JK,是mod_proxy_blancer方式,这种方式简单一些。
1、打开apache安装目录:conf下面的httpd.conf,如果怕配置错误,可以先备份一把。
在httpd.conf里面,把注释着的这几个模块打开,让apache加载这些模块:
LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_ajp_module modules/mod_proxy_ajp.so LoadModule proxy_balancer_module modules/mod_proxy_balancer.so LoadModule proxy_connect_module modules/mod_proxy_connect.so LoadModule proxy_ftp_module modules/mod_proxy_ftp.so LoadModule proxy_http_module modules/mod_proxy_http.so
在httpd.conf的最后加上虚拟主机和代理端口配置:
<VirtualHost *:80> ServerAdmin zyujie@163.com ServerName localhost ServerAlias localhost #小心,有些地方要有空格,要不然会出错哈哈。 ProxyPass / balancer://cluster/ stickysession=JSESSIONID|jsessionid nofailover=On ProxyPassReverse / balancer://cluster/ #ErrorLog "logs/error.log" #CustomLog "logs/access.log" common </VirtualHost> #The ProxyRequests directive should usually be set off when using ProxyPass. ProxyRequests Off <proxy balancer://cluster> #这些参数我们可以自己设定,ajp要和tomcat对应,我这里做了三个tomcat BalancerMember ajp://localhost:8009 loadfactor=1 route=tomcat7_a smax=5 max=20 ttl=120 retry=300 timeout=15 BalancerMember ajp://localhost:9009 loadfactor=1 route=tomcat7_b smax=5 max=20 ttl=120 retry=300 timeout=15 BalancerMember ajp://localhost:7009 loadfactor=1 route=tomcat7_c smax=5 max=20 ttl=120 retry=300 timeout=15 # status=+H为配置热备,当所有机器都over时,才会请求该机器 #BalancerMember http://192.168.1.218:8009 status=+H ProxySet lbmethod=bytraffic </proxy>
这样apache就配置完成了,下面是tomcat。
2、tomcat7_a的配置,只需要配置conf/server.xml,如果要加连接池,其它,再进行配置。
tomcat7_a默认所有端口,8080的访问端口,8009的ajp代理端口,我们都默认,所以只需要配置session复制的地方:
在server.xml的Engine节点里面,添加jvmRoute="tomcat7_a",取个名字嘛。
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat7_a">在Engine节点里面,再添加(注意是添加,以前的host这些节点,我们继续保留)以下代码:具体意思,我们可以查看API:
<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.4"
port="45564"
frequency="500"
dropTime="3000"/>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="auto"
port="4000"
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=".*\.gif|.*\.js|.*\.jpeg|.*\.jpg|.*\.png|.*\.htm|.*\.html|.*\.css|.*\.txt"/>
<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>
3、下面是tomcat7_b的配置:
端口已经给了a tomcat,所以我们要修改端口:总共有三个地方需要以a tomcat不同:
<Server port="9005" shutdown="SHUTDOWN"><!--默认是8005-->
<Connector port="9080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" /> <!--默认是8080-->
<Connector port="9009" protocol="AJP/1.3" redirectPort="8443" /> <!--默认是8009-->
接下来的配置和tomcat7_a一样:
在server.xml的Engine节点里面,添加jvmRoute="tomcat7_b",取个名字嘛。
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat7_b">在Engine节点里面,再添加(注意是添加,以前的host这些节点,我们继续保留)以下代码:具体意思,我们可以查看API:
<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.4"
port="45564"
frequency="500"
dropTime="3000"/>
<!--这里值得注意:port端口和tomcat7_a不一样,Reciver的port属性,默认为5000,tomcat识别的范围为4000-4100-->
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="auto"
port="4001"
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=".*\.gif|.*\.js|.*\.jpeg|.*\.jpg|.*\.png|.*\.htm|.*\.html|.*\.css|.*\.txt"/>
<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>
tomcat7_b也配置好了。
4、下面是tomcat7_c的配置。基本同b的配置雷同:
端口已经给了a tomcat,所以我们要修改端口:总共有三个地方需要以a和b tomcat不同:
<Server port="7005" shutdown="SHUTDOWN"><!--默认是8005-->
<Connector port="7080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" /> <!--默认是8080-->
<Connector port="7009" protocol="AJP/1.3" redirectPort="8443" /> <!--默认是8009-->
接下来的配置和tomcat7_a一样:
在server.xml的Engine节点里面,添加jvmRoute="tomcat7_c",取个名字嘛。
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat7_c">在Engine节点里面,再添加(注意是添加,以前的host这些节点,我们继续保留)以下代码:具体意思,我们可以查看API:
<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.4"
port="45564"
frequency="500"
dropTime="3000"/>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="auto"
port="4002"
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=".*\.gif|.*\.js|.*\.jpeg|.*\.jpg|.*\.png|.*\.htm|.*\.html|.*\.css|.*\.txt"/>
<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>
好了,配置完成。做一个简单的工程,放在这三个tomcat的webapp下面。我想是不是虚拟目录,可以一个工程都行。
工程很简单,就是一个web工程。index.jsp改一下,方便测试:
<%@ page contentType="text/html; charset=GBK" %> <%@ page import="java.util.*" %> <html><head><title>Cluster App Test</title></head> <body> Server Info: <% out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<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.println("<b>Session 列表</b><br>"); System.out.println("============================"); 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="test2.jsp" method="POST"> 名称:<input type=text size=20 name="dataName"> <br> 值:<input type=text size=20 name="dataValue"> <br> <input type=submit> </form> <br/> <!--tomcat7_a就都写a tomcat7_b工程里都写b tomcat7_c工程里都写c--> <b>负载均衡测试:此为:Tomcat7_a上的文件,aaaaaaaaaaaaaaaaaa </b> </body> </html>
输入地址:http://localhost/testTomcat/index.jsp
会发现三个tomcat都在正常工作,如果停掉其中一个,另两个在工作。这样就达到了负载均衡,而且session也可以进行复制。
apache + tomcat的集群就成功部署了。
以上的配置我分别在tomcat a b c中放了三个工程,如果要使用一个工程,就配置虚拟目录,当然这需要是本机的tomcat,配置虚拟目录,就在server.xml中的host标签里加上这句话:path需要加 / ,docBase,需要把目录指向webroot下面。reloadable=true的话,classes被修改,会自动 重启tomcat,我这里设置为false
<Context path="/doTomcat" docBase="D:\webapp\doTomcat" reloadable="false" />
注意的地方有两点:
1、很多网友说,我们的工程web.xml里面要加上这句
<display-name>Welcome to Test Tomcat7 Cluster</display-name>
<description>Welcome to Test Tomcat7 Cluster</description>
<distributable/>
原因是让这个工程,要告诉servlet/JSP容器,编写的应用将在分布式Web容器中部署。我们还是加上吧,试了一下,貌似不加,也没有出错样。
2、Tomcat7 a b c启动的时候要报错:严重: FarmWarDeployer can only work as host cluster subelement
则将以下部分注释掉:
<!--
<DeployerclassName="org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false"/>
-->
相关推荐
apache2.2 + tomcat6 整合以及集群配置
apache2.2+tomcat6在windows下的集群配置
Apache2.2+Tomcat5.5或5.0 集群配置文档
apache2.2和tomcat6.0集群配置,Apache和Tomcat集群配置步骤。
最新Apache2.2.11 + Tomcat 6.0.20 集群配置详解,版主亲测试,并且布署了真实的项目进行了测试,session 成功共享。欢迎大家下载。
Apache+Tomcat集群配置详解 把Apache安装为运行在80端口的Windows服务,安装成功后在系统服务列表中可以看到Apache2.2服务。对于已安装IIS的机器,在启动Apache服务之前必须首先停止IIS Admin服务,不然会因为端口...
NULL 博文链接:https://yulinyyb001.iteye.com/blog/1308609
NULL 博文链接:https://zengzhaoshuai.iteye.com/blog/1172900
这是本人原创整理的文档。包括apache的安装配置,tomcat的配置,热备份,配置均衡算法,webservice集群配置
apache server2.2 + tomcat7.0 服务器集群负载均衡+session共享 包括配套的软件和详细的配置文档。
本资源包含了文章Apache2.2.x + Tomcat6.x + JK 集群配置,http://blog.csdn.net/qq396229783/article/details/74295797里面所用到的软件配置
apache2.2+tomcat6集群已经配置好,tomcat优化过,在实际项目发布中直接将项目复制到集群中的所有tomcat的webapps中即可, 此配置中包含是3个tomcat集群, 安装步骤大概如下: 1:安装httpd-2.2.17-win32-x86-no_ssl...
Apache2.2+3个tomcat-6.0.18负载均衡与集群,采用代理模式和jk模式,两份文档,详细说明,配置全套,自己做的,成功运行,代码太大,上传不了,只有文档了,不过很详细的。
Windows 2008 NLB Apache2.2 Tomcat 5集群安装配置指导手册,是一个很实用的文档,有本公司研究院测试并在项目上使用的。按照手册去操作,肯定没有问题,大家自己来拿吧
本资源为小夜的传说Apache2.2.x+Tomcat6.x+jk2.x做集群配置源码!
1 文档目的 4 2 读者对象 4 3 网络拓扑图 4 4 具体步骤 4 4.1 需要事先下载的文件 4 4.2 安装 4 4.2.1 安装jdk、Tomcat 4 4.2.2 安装Apache 4 ...4.4.1 修改Tomcat的配置文件 7 4.4.2 优化Tomcat 7
NULL 博文链接:https://chunfengxixi.iteye.com/blog/1146875
上面的四个BalancerMember成员是我们配置的tomcat集群。后面会说明的 1.2、httpd-vhosts.conf设置 接下来进行虚拟主机的设置。APACHE的虚拟主机设置如下: 首先要修改 conf/httpd.conf找到 (#Include conf/extra/...
Apche2.2.17 与Tomcat6.0.20进行集群与负载均衡配置,并实现session共享功能