接上篇A + Tomcat7负载均衡和集群(一)继续讲apache的配置
JK配置
打开``配置文件
# vi /usr/local/apache/conf/
在文件最后加入以下jk配置内容
Include con
新建`mod_jk.logs`,`mod_jk.shm`,`mod_jk.conf`文件,并在`mod_jk.conf`文件中添加相关配置内容
# cd /usr/local/apache/logs
# touch mod_jk.logs
# touch mod_jk.shm
# cd /usr/local/apache/conf
# touch mod_jk.conf
# vi mod_jk.conf
LoadModule jk_module module
<IfModule mod_jk.c>
JKWorkersFile /usr/local/apache/con
JKLogFile /usr/local/apache/log
JKLogLevel info
JKLogStampFormat "[%a %b %d %H:%M:%S %Y]"
JKOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
JKrequestLogFormat "%w %V %T %q %U %R"
JKShmFile /usr/local/apache/log
JKMount /* loadbalancer
</IfModule>
新建`workers.properties`文件,并添加配置内容
# cd /usr/local/apache/conf
# touch workers.properties
# vi workers.properties
# workers.properties
#
# in unix, we use forward slashes:
ps=/
worker.list=tomcat1,tomcat2,loadbalancer,status
# tomcat1
# tomcat的文件中ajp13协议的端口号,默认是8009,
# 如果tomcat部署在不同的机器上端口号可不改
worker.
worker.
worker.
worker.
# 其他配置参数
# worker.
# worker.
# worker.
# worker.
# worker.
# worker.
# worker.
# tomcat2
worker.
worker.
worker.
worker. # 负载均衡权重值(1-100)
# load balancer worker
worker.loadbalancer.type=lb
worker.loadbalancer.balanced_workers=tomcat1,tomcat2
worker.loadbalancer.sticky_session=1
worker.loadbalancer.sticky_session_force=0
worker.
Tomcat配置
打开`tomcat/conf/`修改相关内容
查找`<Server port="9007" shutdown="SHUTDOWN">`,修改此处端口号,我这里改为`9007`
查找`HTTP`协议配置的`<Connector>`,因为我们使用的是mod_jk模式,此处可以不用修改,如果想越过Apache代理直接用http协议的方式访问web服务可以修改。也可以注释掉此段标签用于禁止http访问。
查找`AJP`协议配置的`<Connector>`,修改默认端口号8009,如果tomcat部署在不同的机器上,则不需要修改。
<Connector port="8009" protocol="AJP" redirectPort="8443" />
查找`<Engine>`标签,修改为:
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1" >
我测试使用了两个tomcat,另一个tonmcat可以改为`tomcat2`
在`<Engine>`标签内查找`<Cluster>`标签,并打开注释。默认的已经足够使用,也可以替换为以下更详细的内容:
<Cluster className="org.a;
channelSendOptions="8">
<Manager className="org.a;
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"
mapSendOptions="6"/>
<Channel className="org.a;>
<Membership className="org.a;
address="228.0.0.4"
port="45564"
frequency="500"
dropTime="3000"/>
<Receiver className="org.a;
address="162.16.1.229"
port="4000"<!-- 同一台机器上的不同Tomcat,此处端口需要配置不同 -->
autoBind="100"
selectorTimeout="5000"
maxThreads="6"/>
<Sender className="org.a;>
<Transport className="org.a;/>
</Sender>
<Interceptor className="org.a;/>
<Interceptor className="org.a;/>
</Channel>
<Valve className="org.a;
filter=""/>
<Valve className="org.a;/>
<!--<Deployer className="org.a;
tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false"/> -->
<ClusterListener className="org.a;/>
<ClusterListener className="org.a;/>
</Cluster>
web项目
web项目的web.xml中最后添加
<distributable />
这样才可以达成Session复制的功能。
至此所有配置已经完成。
测试
负载均衡集群Session测试
创建测试工程SessionTest
① 新建一个Java Web工程SessionTest,在工程下新建index.jsp,文件内容如下:
<%@ pageimport="java.util.*" %>
<html>
<head>
<title> Session Test</title>
</head>
<body bgcolor="red">
<%
out.print("session Id:"+());
%>
<formaction="index.jsp" method="post">
key<input type="text" name="key"/>
<br />
value<input type="text"name="value" />
<br />
<input type="submit"value="Submit" />
<br />
</form>
<%
String key =reque("key");
if(key!=null &&key.isEmpty()==false)
{
String value =reque("value");
(key, value);
Enumeration e =();
while ())
{
String sKey = (String();
String sValue = (String(sKey);
out.print(sKey+ " ="+sValue+"<br>");
}
}
%>
</body>
</html>
修改SessionTest的web.xml,在web.xml末尾的`</web-app>`标签里添加`<distributable/>`。
将该项目放入同一组的tomcat的webapps下.
session粘性测试
启动同组tomcat以及apache。浏览器访问apache所在的主机IP地址:, 从页面显示的session Id,假设请求访问的是tomcat1。多次刷新或submit后,请求访问的一直是tomcat1,并且session Id一直保持不变,session中的数据也能够保持,说明session粘性良好。
session复制测试
启动同组tomcat以及apache。浏览器访问apache所在的主机IP地址:,假设页面显示的session Id是tomcat1。提交几组session数据。然后停掉tomcat1,再次提交session数据,或刷新页面,如果请求被转发给tomcat2,页面访问正常。页面颜色改变,但Session Id保持不变,session数据也全部传递给tomcat2,表明session复制良好。
以上。如果有任何技术疑问,或者文章有错误,都可以在评论中指出,我会及时反馈及改正。