dickrong 发表于 2018-11-29 12:37:38

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服务器
  # yum -y install pcre-devel zlib-devel openssl-devel
  # yum -y install nginx
  # vim /etc/nginx/nginx.conf
  usernginx;
  worker_processes1;
  error_log/var/log/nginx/error.log warn;
  pid      /var/run/nginx.pid;
  events {
  worker_connections1024;
  }
  http {
  include       /etc/nginx/mime.types;
  default_typeapplication/octet-stream;
  log_formatmain'$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.logmain;
  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_timeout65;
  #gzipon;
  include /etc/nginx/conf.d/*.conf;
  }
  # service nginx start
  步骤二:配置JDK(两台web服务器一致)
  # 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
  # rpm -e java-1.6.0-openjdk
  # rpm -e java-1.7.0-openjdk --nodeps
  # tar xf jdk-7u65-linux-x64.tar.gz
  # mv jdk1.7.0_65/ /usr/local/java
  # vim /etc/profile                           //添加环境变量
  export JAVA_HOME=/usr/local/java
  export PATH=$PATH:$JAVA_HOME/bin
  # source /etc/profile                         //使配置生效
  # 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服务器一致)
  # tar xf apache-tomcat-7.0.54.tar.gz
  # mv apache-tomcat-7.0.54 /usr/local/tomcat
  步骤四:配置Session复制
  Tomcat支持Session集群,可在Tomcat服务器间复制全部Session信息,当后端一台服务器宕机后,Nginx重新调度请求分配到另外一台服务器,客户端可从另一台Tomcat上获取用户的session信息。Session集群可在Tomcat服务器规模在10台以下时使用,否则会导致Session复制时性能代价过高。

  # vim /usr/local/tomcat/conf/server.xml
  104       //node2主机写node2
  109          //去掉注释
  # vim /usr/local/tomcat/webapps/ROOT/WEB-INF/web.xml
  32    #添加内容,在上添加
  步骤五:建立测试页面
  # vim /usr/local/tomcat/webapps/ROOT/session.jsp
  Session ID:
  SessionPort:
  
  # vim /usr/local/tomcat/webapps/ROOT/session.jsp
  Session ID:
  SessionPort:
  
  步骤六:启动tomcat
  # /usr/local/tomcat/bin/startup.sh
  # /usr/local/tomcat/bin/startup.sh
  步骤七:测试
http://s1.运维网.com/images/20180228/1519807515679752.png
  刷新浏览器
http://s1.运维网.com/images/20180228/1519807531963231.png
  可以看到session编号是不变的,而node标签在变化。



页: [1]
查看完整版本: Tomcat配置Session复制