memcache在tomcat中实现session交叉存放

一.在server和server5上安装jdk
1.解压到指定目录/usr/local/

tar zxf jdk-7u79-linux-x64.tar.gz -C /usr/local/
cd /usr/local/
ln -s jdk1.7.0_79/ java   做软连接,升级的时候只升级软连接,较为方便

2.配置java的环境变量

vim /etc/profile  (写在文件最后)
export  JAVA_HOME=/usr/local/java
export  CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export  PATH=$PATH:$JAVA_HOME/bin

source /etc/profile    # 重新加载配置文件

#加载后查看是否成功
echo $JAVA_HOME
  /usr/local/java
echo $CLASSPATH
  .:/usr/local/java/lib:/usr/local/java/jre/lib
echo $PATH
  /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/lnmp/mysql/bin:/usr/local/lnmp/php/bin/:/usr/local/java/bin

3.检测jdk环境是否正确:

vim test.java            #java语言格式
public class test {
        public  static  void main(String[] args){
                System.out.println("Hello World!");
        }
}  
javac test.java     #javac编译.java脚本
java test           # 运行脚本
Hello World!        # 运行结果

二.在server1和server2上安装tomcat
1.解压tomcat:

tar zxf apache-tomcat-7.0.37.tar.gz -C /usr/local/
cd /usr/local
ln -s apache-tomcat-7.0.37/ tomcat   # 做软连接

2.进入tomcat的发布目录,测试tomcat是否安装正确

cd tomcat/webapps/ROOT   
index.jsp是默认发布文件
vim index.jsp
the time is :<%=new java.util.Date() %>

在浏览器处输入172.25.1.5:8080/test.jsp查看页面。
3.实现server1和server2的tomcat负载均衡
修改nginx的配置文件:

upstream tomcat{
    #sticky;
    server 172.25.1.5:8080;     # 后端服务器之一
    server 172.25.1.3:8080;     # 后端服务器之一
    }

在浏览器172.25.1.5:8080/test.jsp,出现轮询

三.在tomcat中实现session共享
什么是session:

session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。Session对象最常见的一个用法就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在 Session 对象中。

为了对数据的保存更加牢靠,我们选择交叉存放session的方法,即将访问tomcat1上的数据存放在memcache2中,将访问tomcat2上的数据存放在memcache1中,这样存放,当某个tomcat服务断了之后,访问它的客户session并不会消失,而是存放在了对立的memcache,如果存放session的memcache坏了,那么它的数据会立即切换到另一个memcached中....

1.在server3和server5端修改我们的测试页面test.jsp
这是一个可以提交信息的页面:

vim test.jsp:  
<%@ page contentType="text/html; charset=GBK" %>
<%@ 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 list</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">
name:<input type=text size=20 name="dataName">
<br>
key:<input type=text size=20 name="dataValue">
<br>
<input type=submit>
</form>
</body>
</html>

2.下载memcached服务端(目的是在每次经过浏览器访问tomcat时,记录两者之间的session)
3.安装nginx的sticky模块

./configure --prefix=/usr/local/lnmp/nginx/ --with-threads --with-http_stub_status_module --with-http_ssl_module --with-file-aio --add-module=/root/nginx-sticky-module-ng
make && make install

对inginx做相应的配置:

vim /usr/local/lnmp/nginx/conf/nginx.conf

http{
upstream tomcat{
sticky;       # 在未向nginx中添加sticky模块时可以注释这一行
server 172.25.1.5:8080;
server 172.25.1.3:8080;    # 实现tomcat的负载均衡
}
include       mime.types;
default_type  application/octet-stream;

#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
#                  '$status $body_bytes_sent "$http_referer" '
#                  '"$http_user_agent" "$http_x_forwarded_for"';

#access_log  logs/access.log  main;

sendfile        on;
#tcp_nopush     on;

#keepalive_timeout  0;
keepalive_timeout  65;

#gzip  on;

server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;

    #access_log  logs/host.access.log  main;

    location / {
    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }

    #proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    location ~ \.jsp$ {
        proxy_pass   http://tomcat;
    }
4.编辑两台tomcat的配置文件,写入memcache模块,添加两台tomcat服务器
vim tomcat/conf/context.xml  (两台主机都要写)
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n5:172.25.1.5:11211,n3:172.25.1.3:11211"   # 节点一定要对应
failoverNodes="n5"      # 对方session坏了的时候找自己
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>

5.将jar包放在tomcat的lib目录下
6.打开tomcat
cd tomcat/bin/./startup.sh
打开nginx
nginx -s reload
这里写图片描述

6.查看日志(tomcat/log)是否一切都配置得当,出现下图的语句说明session配置完成
这里写图片描述
6.测试:在浏览器处172.25.1.5/test.jsp(yum install telnet -y)
这里写图片描述
这里写图片描述
如果server3的memcache坏掉,那么session会来到server5上:
这里写图片描述
这里写图片描述

猜你喜欢

转载自blog.csdn.net/jay_youth/article/details/81482514
今日推荐