[关闭]
@Fancy-Bai 2015-08-18T08:29:18.000000Z 字数 4936 阅读 2522

Apache2.4 + Tomcat7负载均衡和集群(二)

Apache,Tomcat


接上篇Apache2.4 + Tomcat7负载均衡和集群(一)

JK配置

打开httpd.conf配置文件

  1. # vi /usr/local/apache/conf/httpd.conf

在文件最后加入以下jk配置内容

  1. Include conf/mod_jk.conf

新建mod_jk.logsmod_jk.shmmod_jk.conf文件,并在mod_jk.conf文件中添加相关配置内容

  1. # cd /usr/local/apache/logs
  2. # touch mod_jk.logs
  3. # touch mod_jk.shm
  4. # cd /usr/local/apache/conf
  5. # touch mod_jk.conf
  6. # vi mod_jk.conf
  1. LoadModule jk_module modules/mod_jk.so
  2. <IfModule mod_jk.c>
  3. JKWorkersFile /usr/local/apache/conf/workers.properties
  4. JKLogFile /usr/local/apache/logs/mod_jk.logs
  5. JKLogLevel info
  6. JKLogStampFormat "[%a %b %d %H:%M:%S %Y]"
  7. JKOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
  8. JKRequestLogFormat "%w %V %T %q %U %R"
  9. JKShmFile /usr/local/apache/logs/mod_jk.shm
  10. JKMount /* loadbalancer
  11. </IfModule>

新建workers.properties文件,并添加配置内容

  1. # cd /usr/local/apache/conf
  2. # touch workers.properties
  3. # vi workers.properties
  1. # workers.properties
  2. #
  3. # in unix, we use forward slashes:
  4. ps=/
  5. worker.list=tomcat1,tomcat2,loadbalancer,status
  6. # tomcat1
  7. # tomcat的server.xml文件中ajp13协议的端口号,默认是8009,
  8. # 如果tomcat部署在不同的机器上端口号可不改
  9. worker.tomcat1.port=8009
  10. worker.tomcat1.host=162.16.1.229
  11. worker.tomcat1.type=ajp13
  12. worker.tomcat1.lbfactor=1
  13. # 其他配置参数
  14. # worker.tomcat1.cachesize=100
  15. # worker.tomcat1.cachesize_timeout=600
  16. # worker.tomcat1.reclycle_timeout=300
  17. # worker.tomcat1.socket_keepalive=1
  18. # worker.tomcat1.socket_timeout=300
  19. # worker.tomcat1.local_worker=1
  20. # worker.tomcat1.retries=3
  21. # tomcat2
  22. worker.tomcat2.port=9009
  23. worker.tomcat2.host=162.16.1.229
  24. worker.tomcat2.type=ajp13
  25. worker.tomcat2.lbfactor=1 # 负载均衡权重值(1-100)
  26. # load balancer worker
  27. worker.loadbalancer.type=lb
  28. worker.loadbalancer.balanced_workers=tomcat1,tomcat2
  29. worker.loadbalancer.sticky_session=1
  30. worker.loadbalancer.sticky_session_force=0
  31. worker.status.type=status

Tomcat配置

打开tomcat/conf/server.xml修改相关内容
1. 查找<Server port="9007" shutdown="SHUTDOWN">,修改此处端口号,我这里改为9007
2. 查找HTTP/1.1协议配置的<Connector>,因为我们使用的是mod_jk模式,此处可以不用修改,如果想越过Apache代理直接用http协议的方式访问web服务可以修改。也可以注释掉此段标签用于禁止http访问。
3. 查找AJP/1.3协议配置的<Connector>,修改默认端口号8009,如果tomcat部署在不同的机器上,则不需要修改。

  1. <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

4.查找<Engine>标签,修改为:

  1. <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1" >

我测试使用了两个tomcat,另一个tonmcat可以改为tomcat2
5. 在<Engine>标签内查找<Cluster>标签,并打开注释。默认的已经足够使用,也可以替换为以下更详细的内容:

  1. <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
  2. channelSendOptions="8">
  3. <Manager className="org.apache.catalina.ha.session.BackupManager"
  4. expireSessionsOnShutdown="false"
  5. notifyListenersOnReplication="true"
  6. mapSendOptions="6"/>
  7. <Channel className="org.apache.catalina.tribes.group.GroupChannel">
  8. <Membership className="org.apache.catalina.tribes.membership.McastService"
  9. address="228.0.0.4"
  10. port="45564"
  11. frequency="500"
  12. dropTime="3000"/>
  13. <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
  14. address="162.16.1.229"
  15. port="4000"
  16. autoBind="100"
  17. selectorTimeout="5000"
  18. maxThreads="6"/>
  19. <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
  20. <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
  21. </Sender>
  22. <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
  23. <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
  24. </Channel>
  25. <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
  26. filter=""/>
  27. <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
  28. <!--<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
  29. tempDir="/tmp/war-temp/"
  30. deployDir="/tmp/war-deploy/"
  31. watchDir="/tmp/war-listen/"
  32. watchEnabled="false"/> -->
  33. <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
  34. <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
  35. </Cluster>

web项目

web项目的web.xml中最后添加

  1. <distributable />

这样才可以达成Session复制的功能。
至此所有配置已经完成。

测试

负载均衡集群Session测试

创建测试工程SessionTest

① 新建一个Java Web工程SessionTest,在工程下新建index.jsp,文件内容如下:

  1. <%@ pageimport="java.util.*" %>
  2. <html>
  3. <head>
  4. <title> Session Test</title>
  5. </head>
  6. <body bgcolor="red">
  7. <%
  8. out.print("session Id:"+session.getId());
  9. %>
  10. <formaction="index.jsp" method="post">
  11. key<input type="text" name="key"/>
  12. <br />
  13. value<input type="text"name="value" />
  14. <br />
  15. <input type="submit"value="Submit" />
  16. <br />
  17. </form>
  18. <%
  19. String key =request.getParameter("key");
  20. if(key!=null &&key.isEmpty()==false)
  21. {
  22. String value =request.getParameter("value");
  23. session.setAttribute(key, value);
  24. Enumeration e =session.getAttributeNames();
  25. while (e.hasMoreElements())
  26. {
  27. String sKey = (String)e.nextElement();
  28. String sValue = (String)session.getAttribute(sKey);
  29. out.print(sKey+ " ="+sValue+"<br>");
  30. }
  31. }
  32. %>
  33. </body>
  34. </html>

修改SessionTest的web.xml,在web.xml末尾的</web-app>标签里添加<distributable/>

将该项目放入同一组的tomcat的webapps下.

session粘性测试

启动同组tomcat以及apache。浏览器访问apache所在的主机IP地址:http://162.16.1.229/, 从页面显示的session Id,假设请求访问的是tomcat1。多次刷新或submit后,请求访问的一直是tomcat1,并且session Id一直保持不变,session中的数据也能够保持,说明session粘性良好。

session复制测试

启动同组tomcat以及apache。浏览器访问apache所在的主机IP地址:http://162.16.1.229/,假设页面显示的session Id是tomcat1。提交几组session数据。然后停掉tomcat1,再次提交session数据,或刷新页面,如果请求被转发给tomcat2,页面访问正常。页面颜色改变,但Session Id保持不变,session数据也全部传递给tomcat2,表明session复制良好。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注