Tomcat配置Session复制

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Tomcat配置Session复制相关的知识,希望对你有一定的参考价值。

一、Session概述

  Session是由应用服务器维持的一个服务器端的存储空间,用户在连接服务器时,会由服务器生成一个唯一的Session ID,客户端使用该Session ID为标识符来存取服务器端的Session存储空间。而Session ID则保存到客户端,使用浏览器Cookie保存,用户提交页面时,也会将Session ID提交到服务器端,来存取Session数据。服务器也通过URL重写的方式来传递Session ID的值,因此不是完全依赖Cookie。如果客户端Cookie禁用,则服务器可以自动通过重写URL的方式来保存Session的值,并且这个过程对程序员透明。

  Web应用中将这些多次请求修改使用的上下文对象称作会话(Session),单机情况下,Session可由部署在服务器上的Web容器(Tomcat、Resin)进行管理。但在使用高可用负载均衡的集群环境中,由于负载均衡服务器可能会将每次请求分发到集群任何一台应用服务器上,所以保证每次请求依然能够获得正确的Session比在单机上实现要复杂的多。

  Session复制是小型企业应用使用较多的一种服务器集群Session管理机制。应用服务器开启Web容器的Session复制功能,在集群中的几台服务器之间同步Session对象,使每台服务器上都保存了所有用户的Session信息,这样任何一台机器宕机都不会导致Session数据的丢失,而服务器使用Session时,也只需要在本机获取即可。

  Session复制方案只能应用在集群规模比较小的环境下,当集群规模较大时,集群服务器间需要大量的通信进行Session复制,占用服务器和网络的大量资源。而且由于所有用户的Session信息在每台服务器上都有备份,在大量用户访问的情况下,会出现服务器内存不够Session使用的情况。


环境描述

操作系统

IP地址

主机名

软件包列表

CentOS6.8-x86_64

192.168.200.101

nginx

nginx

CentOS6.8-x86_64

192.168.200.103

Node1

JDK Tomcat  

CentOS6.8-x86_64

192.168.200.104

Node2

JDK Tomcat


步骤一:配置Nginx服务器

[[email protected] ~]# yum -y install pcre-devel zlib-devel openssl-devel 

[[email protected] ~]# yum -y install nginx

[[email protected] ~]# vim /etc/nginx/nginx.conf 

user  nginx;

worker_processes  1;


error_log  /var/log/nginx/error.log warn;

pid        /var/run/nginx.pid;



events {

    worker_connections  1024;

}



http {

    include       /etc/nginx/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  /var/log/nginx/access.log  main;

    upstream tomcat_pool {

        server 192.168.200.103:8080;

        server 192.168.200.104:8080;

    }

    server {

        listen 80;

        server_name 192.168.200.101:80;

        location / {

            proxy_pass http://tomcat_pool;

            proxy_set_header X-Real-IP $remote_addr;

        }

    }

    sendfile        on;

    #tcp_nopush     on;


    keepalive_timeout  65;


    #gzip  on;


    include /etc/nginx/conf.d/*.conf;

}

[[email protected] ~]# service nginx start


步骤二:配置JDK(两台web服务器一致)

[[email protected] ~]# rpm -qa | grep jdk                  //删除系统自带的jdk版本

java-1.6.0-openjdk-1.6.0.38-1.13.10.4.el6.x86_64

java-1.7.0-openjdk-1.7.0.99-2.6.5.1.el6.x86_64

[[email protected] ~]# rpm -e java-1.6.0-openjdk

[[email protected] ~]# rpm -e java-1.7.0-openjdk --nodeps


[[email protected] ~]# tar xf jdk-7u65-linux-x64.tar.gz 

[[email protected] ~]# mv jdk1.7.0_65/ /usr/local/java

[[email protected] ~]# vim /etc/profile                           //添加环境变量

export JAVA_HOME=/usr/local/java

export PATH=$PATH:$JAVA_HOME/bin

[[email protected] ~]# source /etc/profile                         //使配置生效

[[email protected] ~]# java -version

java version "1.7.0_99"

OpenJDK Runtime Environment (rhel-2.6.5.1.el6-x86_64 u99-b00)

OpenJDK 64-Bit Server VM (build 24.95-b01, mixed mode)


步骤三、部署Tomcat(两台web服务器一致)

[[email protected] ~]# tar xf apache-tomcat-7.0.54.tar.gz 

[[email protected] ~]# mv apache-tomcat-7.0.54 /usr/local/tomcat


步骤四:配置Session复制

 Tomcat支持Session集群,可在Tomcat服务器间复制全部Session信息,当后端一台服务器宕机后,Nginx重新调度请求分配到另外一台服务器,客户端可从另一台Tomcat上获取用户的session信息。Session集群可在Tomcat服务器规模在10台以下时使用,否则会导致Session复制时性能代价过高。

[[email protected] ~]# vim /usr/local/tomcat/conf/server.xml

104     <Engine name="Catalina" defaultHost="localhost" jvmRoute="node1">  //node2主机写node2

109       <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>   //去掉注释

[[email protected] ~]# vim /usr/local/tomcat/webapps/ROOT/WEB-INF/web.xml 

32 <distributable/>   #添加内容,在</web-app>上添加


步骤五:建立测试页面

[[email protected] ~]# vim /usr/local/tomcat/webapps/ROOT/session.jsp

Session ID:<%= session.getId() %><BR>

SessionPort:<%= request.getServerPort() %>

<% out.println("This tomcat server 192.168.200.103");%>

[[email protected] ~]# vim /usr/local/tomcat/webapps/ROOT/session.jsp

Session ID:<%= session.getId() %><BR>

SessionPort:<%= request.getServerPort() %>

<% out.println("This tomcat server 192.168.200.104");%>


步骤六:启动tomcat

[[email protected] ~]# /usr/local/tomcat/bin/startup.sh 

[[email protected] ~]# /usr/local/tomcat/bin/startup.sh 


步骤七:测试

技术分享图片

刷新浏览器

技术分享图片

可以看到session编号是不变的,而node标签在变化。

以上是关于Tomcat配置Session复制的主要内容,如果未能解决你的问题,请参考以下文章

session复制

nginx tomcat glassfish session 复制配置

nginxnginx tomcat session 共享配置

Apache和Tomcat 配置负载均衡(mod-proxy方式)-粘性session

nginx+tomcat集群负载均衡(实现session复制)

session复制