1.系统结构图
2.准备
主机tomcatA:关闭iptables
主机tomcatB:关闭iptables
主机apache:关闭iptables,关闭selinux
3.安装软件
安装tomcat请参考:http://blog.csdn.net/kairui123/article/details/71247618
安装apache:yum install httpd
4.配置appche
ProxyRequests off //是否开启正向代理 <Location /lbstate> SetHandler balancer-manager </Location> <VirtualHost *:80> ServerAdmin www.creazyrui.com DocumentRoot /var/www/html ServerName www.creazyrui.com </VirtualHost>
参数解释:
loadfactor:指定权重
route:指定主机
5.配置tomcat
<!-- You should set jvmRoute to support load-balancing via AJP ie : <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1"> --> <Engine name="Catalina" defaultHost="localhost"> <!-- You should set jvmRoute to support load-balancing via AJP ie : --> <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1"> <!-- <Engine name="Catalina" defaultHost="localhost"> --> 在最后追加一下内容: <display-name> Welcome to tomcat </displaay-name> <description> welcome to tomcat </description> <distributable/> //这个元素告诉tomcat,这个时分布式的引用 //给集群中tomcat服务器全部配置以上文件并且修改jvmRoute=“”
6.添加页面并测试
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.util.*" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>test tomcat jiqun</title> <style type="text/css"> div{border: 1px dashed #0099cc;background-color: #D1EFF9;font-size:14px;margin:5px;padding:5px} </style> </head> <body> <div> <h4>当前请求所在服务器信息:</h4> session标识:<%=session.getId() %> <br/> IP地址:<%=java.net.InetAddress.getLocalHost() %><br/> 临时目录:<%=System.getProperty("java.io.tmpdir") %> </div> <div> <h4>session创建表单:</h4> <form action="index.jsp" method="POST"> session名称:<input type="text" name="sessionName"> session值:<input type="text" name="sessionValue"> <input type="submit" value="创建session"> </form> </div> <!--根据session创建表单里床过来的参数创建session --> <% String sessionName=request.getParameter("sessionName"); String sessionValue=request.getParameter("sessionValue"); if(sessionName!=null && !sessionName.equals("")){ session.setAttribute(sessionName, sessionValue); } %> <div> <h4>当前请求所在服务器的session列表</h4> <% Enumeration e=session.getAttributeNames(); while(e.hasMoreElements()){ String name=(String)e.nextElement(); String value=session.getAttribute(name).toString(); out.println(name+"= "+value+"<br>"); } %> </div> </body> </html>
测试结果:
7.tomcat的会话管理
1.StandarManager:默认会话管理器,使用于单个运行单个运行状态的tomcat实例管理,当tomcat正常关闭时,会将session会话写入一个以SESSION.ser文件,并在下次启动时读取 2.PersistentManager:当会话长时间处于空闲状态时将被写入swap会话对象。 3.DeltaManager:用于tomcat集群会话管理通过session复制实现session共享,将改变的session同步与集群中的每一个节点 4.BackupManager:用于tomcat集群中,但与DeltaManager不同,他将会话只同步给集群中一个的节点,而不是所有。
定义StandarManager,PersistentManager会话管理器
1.定义StandarManager会话管理器,默认使用 <Manage className="org.apache.catalina.session.StandarManager" maxInactiveInterval="7200"/> 默认保存在$CATALINA_HOME/work/Catalina/<hostname>/<webapp-name>/下的session 参数: maxActiveSession:允许最多的会话数量,-1表示不限制 maxInactiveInterval:非活动的会话超时时间,默认伪60s pathname:会话文件路径 2.定义PersistentManager会话管理器,将session会话写入文件 <Manager calssName="org.apache.catalina.session.PersisitentManager" saveOnRestart="true"> <Store className="org.apache.catalina.session.FileStore" diretory="/dir/path"/> </Manager> 参数: diretory:指定文件的路径 3.定义PersistentManager会话管理器,将session会话写入数据库 <Manager calssName="org.apache.catalina.session.PersisitentManager" saveOnRestart="true"> <Store className="org.apache.catalina.session.JDBCStore" diretory="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/bdname?user=user;password=pw" /> </Manager>
8.tomcat实现session复制
a.编辑每个server.xml文件,将一下内容添加在engine|host标签中,配置Cluster标签
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8"> <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" //这里表示自动获取ip,但是在linux上会称为127.0.0.1,win上会自动获取正确的ip port="4000" autoBind="100" selectorTimeout="5000" 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.MessageDispatchInterceptor"/> </Channel> <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=""/> <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/> <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>
b.在各个节点上添加组播路由
route add -net ip netmask 255.255.255.255 dev eth011
测试结果:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。