apache2.2 + tomcat7 集群配置记录
来源:互联网 发布:甄嬛传演技排名知乎 编辑:程序博客网 时间:2024/05/18 03:10
一直说做一下这个集群练习的,今天终于有时间了,就练习了一下,网上摘录了很多朋友的技术成果。完成了自己的练习。
官网上下载的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.soLoadModule proxy_ajp_module modules/mod_proxy_ajp.soLoadModule proxy_balancer_module modules/mod_proxy_balancer.soLoadModule proxy_connect_module modules/mod_proxy_connect.soLoadModule proxy_ftp_module modules/mod_proxy_ftp.soLoadModule 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>
关键的是在工程web.xml中加上这句:意思是让该工程的会话可复制,这样才能在多个tomcat中切换。<distributable/>
原因是让这个工程,要告诉servlet/JSP容器,编写的应用将在分布式Web容器中部署。我们还是加上吧,试了一下,貌似不加,也没有出错样。
2、Tomcat7 a b c启动的时候要报错:严重: FarmWarDeployer can only work as host cluster subelement
则将以下部分注释掉:
<!--
<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false"/>
-->
- apache2.2 + tomcat7 集群配置记录
- Tomcat7+Apache2集群配置
- Windows中Apache2.2 Tomcat7 集群配置
- Apache2.2.4 + Tomcat7集群配置
- Apache2.4+Tomcat7服务器集群配置
- Apache2.2+Tomcat7.0集群 完美攻略
- apache2.2+mod_JK+Tomcat7+Terracotta3.7 集群
- Apache2.2+Mod_jk+Tomcat7集群 负载均衡
- Apache2.4+tomcat7集群
- apache2.2+tomcat7.0.53+ehcache1.5分布式缓存集群配置完整版
- tomcat7+apache2.2.25 集群负载均衡以及session复制配置
- apache2.4 + mod_proxy + tomcat7 配置集群和负载均衡
- Apache2.2+Tomcat7.0整合配置详解
- Apache2.2+Tomcat7.0整合配置详解
- Apache2.2+Tomcat7.0整合配置详解
- Apache2.2+Tomcat7.0整合配置详解
- Apache2.2+Tomcat7.0整合配置详解
- Apache2.2+Tomcat7.0整合配置详解
- Android 利用ViewPager、Fragment、PagerTabStrip实现多页面滑动效果(牛逼)
- Cocos2d-x建工程时避免copy文件夹和库(子龙山人)
- MS_DOS头部 IMAGE_DOS_HEADER
- Exchange Server恢复数据库和标准邮箱数据库的区别
- cocos2dx 自学知识点之五 getwinsize 获取到不同的数值 Default-568h@2x.png
- apache2.2 + tomcat7 集群配置记录
- Linux 内核3.10的到来与ARM big.Little架构
- php验证码生成
- 【DFS】hdu 2553 N皇后问题
- 回调函数和钩子函数
- 动态获取资源ID
- Ven 的一些历史
- 6.28 arm blog 3种授权license
- 如何检索Android设备的唯一ID