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.

效果以下圖所示

相關文章
相關標籤/搜索