发过篇关于apache 跟 tomcat 多站点配置 整合的,所以这部分今天就不多说了,主要还是标题为主
集群这个东西说来话长,我长话短说主要目标
1、能够使用apache 跟 tomcat 实现集群
2、能保证tomcat之间进行session值复制
测试环境:apache2.2 、tomcat 7.0
步骤一:加载mod_proxy_balancer.so 集群模块,网上都喜欢说找个这个东西,然后把前面的#号去掉,但是我懒一点不想找,如果你确定你以前没有配置过得话,直接在
httpd.conf 的最下面加上以下一句:
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
步骤二:再加上以下几句
ProxyPass /examples balancer://test stickysession=jsessionid nofailover=On <proxy balancer://test/> BalancerMember http://127.0.0.1:8080/examples loadfactor=1 route=jvm1 BalancerMember http://127.0.0.1:9080/examples loadfactor=1 route=jvm2 </proxy>
简单说一下
这里跟反向代理差不多,只不过以前代理后面直接跟的是目标服务器,现在变成了一个集群组了
上面的test 是集群名字,随意取
BalancerMember 后面的是集群成员,后面的东西就不用多说了,随便看看就知道大概什么意思了
每个BalancerMember 代表一个集群,这里只有两个,当然还可以更多
/examples 是tomcat 自带的一个应用,用它来测试一下就足以说明问题了
启动两个tomcat,然后启动apache2.2
如果你apache 没有配置过反向代理的话,会报错,配置过的话就没问题,没配置过的就加上
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
步骤三:在每个tomcat 的webapps目录下的examples的WEB-INF/web.xml里面加上以下一句
<distributable/>
这叫的作用是现实session复制,挺简单的,加在头尾都行,我的是这样:
<description> Servlet and JSP Examples. </description> <display-name>Servlet and JSP Examples</display-name> <distributable/>
步骤四:配置tomcat,分别修改tomcat的 server.xml 配置文件,
Engine标签加上jvmRoute="jvm1"属性,之后变成:
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
把Engine下面的
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
注释去掉即可
上面的jvm1 分别用来表示tomcat的,另外一个tomcat可以用jvm2这样
测试一下
新建一个test.jsp ,假如内容来测试
<%@ page contentType="text/html; charset=UTF-8" %> <%@ 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>"); 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="test.jsp" method="POST"> 名称:<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/examples/test.jsp
看到以上界面说明成功了,不断刷新,会发现端口跟jvm会一直切换
说明集群已经起效了
填上session name 跟值,提交 不管你怎么刷新,tomcat 怎么变,值都不会丢失,当然session id 也没变
到这里就告一段落了,更多详情参考官网文档