[b]网站服务器是tomcat,最近由于网站访问量在某一时间段会很大,为了避免tomcat的压力过大,也为了避免由于单个的tomcat宕机而造成的访问量丢失的情况出现,就准备安装多个tomcat以实现集群和负载均衡。[/b]
在网上找了很多方法,但多不太好,根据几个讲解,自己完成了这个功能,现在总结一下,和大家分享。
首先介绍一下所需的软件
apache_2.2.11-win32-x86-no_ssl.msi
apache-tomcat-6.0.18.tar
先安装apache,安装过程没什么特别的,不再细说。
安装完之后,打开apache安装目录下的conf/httpd.conf文件,具体修改如下:
[b][color=darkred]找到这些内容,将其注释取消。
在文件的最后加入[/color][/b]
修改conf/extra/httpd-vhost.conf文件
在其最后加入
解压tomcat,解压两个即可。修改conf/server.xml文件
具体修改如下:
一个<Server port="9005" shutdown="SHUTDOWN">
<Connector port="9080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="9009" protocol="AJP/1.3" redirectPort="8443" />
另一个不变
仔细对比下面的内容,和原来的tomcat不一样:
另一个改为
如果是小型的集群,只需将下面的注释去掉即可:
如果是大型的,得加入下面的内容:
其中
<!--
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
-->
注释不取消
好了,到此,基本配置完成,下面来测试一下。
在webapps下建立目录test,在目录中建立WEB-INF,里面的web.xml具体配置如下:
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<display-name>Welcome to Tomcat</display-name>
[color=red] <distributable/>[/color]
</web-app>
红色为重点内容
建立index.jsp文件
内容如下:
现在访问http://127.0.0.1/test/index.jsp
看tomcat的打印时候是交替打印的。
在网上找了很多方法,但多不太好,根据几个讲解,自己完成了这个功能,现在总结一下,和大家分享。
首先介绍一下所需的软件
apache_2.2.11-win32-x86-no_ssl.msi
apache-tomcat-6.0.18.tar
先安装apache,安装过程没什么特别的,不再细说。
安装完之后,打开apache安装目录下的conf/httpd.conf文件,具体修改如下:
#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
#Include conf/extra/httpd-vhosts.conf
[b][color=darkred]找到这些内容,将其注释取消。
在文件的最后加入[/color][/b]
ProxyRequests Off
<proxy balancer://sy>
BalancerMember ajp://127.0.0.1:8009 loadfactor=1 route=jvm1
BalancerMember ajp://127.0.0.1:9009 loadfactor=1 route=jvm2
</proxy>
修改conf/extra/httpd-vhost.conf文件
在其最后加入
<VirtualHost *:80>
ServerAdmin jiessiedyh@gmail.com
ServerName localhost
ServerAlias localhost
ProxyPass / balancer://sy/ stickysession=jsessionid nofailover=On
ProxyPassReverse / balancer://sy/
ErrorLog "logs/sy-error.log"
CustomLog "logs/sy-access.log" common
</VirtualHost>
解压tomcat,解压两个即可。修改conf/server.xml文件
具体修改如下:
一个<Server port="9005" shutdown="SHUTDOWN">
<Connector port="9080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="9009" protocol="AJP/1.3" redirectPort="8443" />
另一个不变
仔细对比下面的内容,和原来的tomcat不一样:
<!-- You should set jvmRoute to support load-balancing via AJP ie :
<Engine name="Catalina" defaultHost="localhost">
-->
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm2">
另一个改为
<!-- You should set jvmRoute to support load-balancing via AJP ie :
<Engine name="Catalina" defaultHost="localhost">
-->
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
如果是小型的集群,只需将下面的注释去掉即可:
<!--
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
-->
如果是大型的,得加入下面的内容:
其中
<!--
<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="4011"
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>
好了,到此,基本配置完成,下面来测试一下。
在webapps下建立目录test,在目录中建立WEB-INF,里面的web.xml具体配置如下:
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<display-name>Welcome to Tomcat</display-name>
[color=red] <distributable/>[/color]
</web-app>
红色为重点内容
建立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.print("<b>Session 列表</b>");
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="index.jsp">
名称:<input type=text size=20 name="dataName">
<br>
值:<input type=text size=20 name="dataValue">
<br>
<input type=submit>
</form>
</body>
</html>
现在访问http://127.0.0.1/test/index.jsp
看tomcat的打印时候是交替打印的。