之前在项目中遇到过集群配置,当时被一大堆配置弄得一脸懵逼,完全不懂这些配置的含义,所以一直对集群有一些好奇心,最近利用了一点时间研究了一下apache+tomcat的集群配置。研究的不是很深入,只是看了一些网上的相关资料,自己搭建并实验成功了而已。
一、首先我们得准备好集群所需要的工具,这里只需要两样工具:1.apache2.2.15 2.tomcat。这里需要注意的一点就是apache2.2.15的windows安装文件的下载地址是http://archive.apache.org/dist/httpd/binaries/win32/,如果我不说明的话,可能大家到apache官网上找半天都找不到,因为我当初在官网上也找了半天没找到。
二、配置apache httpd服务器。
首先配置conf/httpd.conf文件
1.加载一些功能模块。
将以下配置前的注释去掉:
LoadModule proxy_module modules/mod_proxy.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
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
2.添加index.jsp
将
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
修改成
<IfModule dir_module>
DirectoryIndex index.html index.jsp
</IfModule>
3.加入反向代理配置
在文件末尾加上反向代理:
ProxyRequests Off
<proxy balancer://cluster>
BalancerMember ajp://127.0.0.1:8019 loadfactor=1 route=jvm1
BalancerMember ajp://127.0.0.1:8029 loadfactor=1 route=jvm2
</proxy>
4.增加虚拟主机配置
首先将conf/httpd.conf文件中的#Include conf/extra/httpd-vhosts.conf这行被注释掉的配置还原。
然后修改conf/extra/httpd-vhosts.conf文件,在文件中添加以下配置:
<VirtualHost *:80>
ServerAdmin zengwei.shao@samsung.com
ServerName localhost
ServerAlias localhost
ProxyPass / balancer://cluster/ stickysession=jsessionid nofailover=On
ProxyPassReverse / balancer://cluster/
ErrorLog "logs/lbtest-error.log"
CustomLog "logs/lbtest-access.log" common
</VirtualHost>
三、配置tomcat服务器
1.修改server.xml文件
首先修改tomcat1的server.xml:
<Connector port="8019" protocol="AJP/1.3" redirectPort="8443"/>中的port改为8019,与前面反向代理中jvm1的端口相对应
<Engine defaultHost="localhost" name="Catalina" jvmRoute="jvm1">中jvmRoute改为jvm1。
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>替换成
<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" address="228.0.0.4" port="45564" frequency="500" dropTime="3000"/>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="auto" port="4444" 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;"/>
<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.ClusterSessionListener"/>
</Cluster>
这里需要注意的一点是Receiver 中的port需要保证唯一性。
接着修改一下tomcat2中的server.xml:
<Connector port="8019" protocol="AJP/1.3" redirectPort="8443"/>中的port改为8019,与 前面反向代理中jvm1的端口相对应
<Engine defaultHost="localhost" name="Catalina" jvmRoute="jvm1">中jvmRoute改为jvm1。
其他配置同上。
四、编写用于测试的jsp页面。
<%@ page contentType=”text/html; charset=utf-8” %>
<%@ page import=”java.util.*” %>
Cluster App Test
Server Info:
<%
out.println(request.getLocalAddr() + ” : ” + request.getLocalPort()+”
”);%>
<%
out.println(“
ID ” + session.getId()+”
”);
// 如果有新的 Session 属性设置
String dataName = request.getParameter(“dataName”);
if (dataName != null && dataName.length() > 0) {
String dataValue = request.getParameter(“dataValue”);
session.setAttribute(dataName, dataValue);
}
out.println(“Session 列表
”);
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+”
”);
System.out.println( name + ” = ” + value);
}
%>
名称:
值:
五、修改web.xml文件
在你所需要实现集群的web工程中的web.xml文件里增加一个属性< distributable/>