tomcat session复制

背景:

须要使用2台tomcat作集群,如何保持在负载均衡时session不丢失。html

环境:winxp+httpd-2.2.22-win32-x86-openssl-0.9.8t.zip+apache-tomcat-7.0.53+jdk8java

思路:

方法一、使用session粘滞,就是A用户进来永远都是A tomcat对应,缺点:A一挂,session就丢失了web

方法二、使用session复制,这样即便一台挂了,session也不会丢失。缺点:session同步,会耗费tomcat性能apache

这里着重讲一下方法2.tomcat

 

步骤:

一、winxp虚拟机一台(略);apache(负载均衡);tomcat 2台session

二、apche配置app

2.一、httpd.conf配置负载均衡

2.1.1) httpd.conf,将如下模块注释去掉webapp

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
LoadModule proxy_scgi_module modules/mod_proxy_scgi.so

 

2.1.2)去掉Include conf/extra/httpd-vhosts.conf的注释jvm

2.1.3)在最后添加以下代码

#分配请求
ProxyRequests Off   
<proxy balancer://cluster>    
    BalancerMember ajp://192.168.92.1:8009 loadfactor=1 route=tomcat1 
    BalancerMember ajp://192.168.92.1:8109 loadfactor=1 route=tomcat2
</proxy>

2.二、httpd-vhosts.conf配置

在最后一行添加以下代码

<VirtualHost *:80>            
    ServerAdmin webmaster@dummy-host2.localhost           
    ServerName 127.0.0.1          
    ServerAlias localhost            
    ProxyPass / balancer://cluster/ stickysession=jsessionid nofailover=On           
    ProxyPassReverse / balancer://cluster/           
    ErrorLog "logs/lbtest-error.log"           
    CustomLog "logs/lbtest-access.log" common       
</VirtualHost>

三、配置tomcat.先配置tomcat1,tomcat2同(端口冲突记得改掉)。

tomcat1配置

3.一、将engine改为以下

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

3.二、配置集群

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"  channelSendOptions="8"/>

注意:cluster能够有更复杂的配置,这里已经够用。

3.三、tomcat2同

3.四、开启tomcat集群

在context.xml中,将context改为以下格式

<Context distributed="true">

四、编写代码

4.一、在webapps目录下新建test目录,新建WEB-INF文件夹,test.jsp

4.二、编写test.jsp

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ page import="java.util.*" %>
<html><head><title>Tomcat Cluster Demo</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);
     System.out.println("application:" + application.getAttribute(dataName));
     application.setAttribute(dataName, dataValue);
  }
  out.print("<b>Session List</b>");
  Enumeration<String> e = session.getAttributeNames();
  while (e.hasMoreElements()) {
     String name = e.nextElement();
     String value = session.getAttribute(name).toString();
     out.println( name + " = " + value+"<br>");
         System.out.println( name + " = " + value);
   }
%>
  <form action="test.jsp" method="POST">
    Name:<input type=text size=20 name="dataName">
     <br>
    Value:<input type=text size=20 name="dataValue">
     <br>
    <input type=submit>
   </form>
</body>
</html>

4.三、在WEB-INF目录下,新建web.xml,内容以下

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> 
  <display-name>test</display-name> 
   <distributable/> 
</web-app>

五、启动2个tomcat,apache.

效果以下图所示

相关文章
相关标签/搜索