浅析集群会话绑定tomcat cluster session

什么是session?
其实session是一个存在服务器上的类似于一个散列表格的文件。里面存有我们需要的信息,在我们需要用的时候可以从里面取出来。
说起session的作用,简单的举个例子:我们在登录某些网站www.ggmmpk.com的时候,输入了用户名密码,登录以后再打开新的页面时,自动显示的是已登录的状态,不需要再次重新登录。这里就是session功能的一个小小的体现。
session是一种管理用户状态和信息的机制,与cookies的不同的是,session的数据是保存在服务器端。说的明白点就是session相当于一个虚拟的浏览器,在这个浏览器上处于一种保持登录的状态。
session的功能:
1.Session是一种Web会话中的常用状态之一。
2.Session提供了一种把信息保存在服务器内存中的方式。他能储存任何数据类型,包含自定义对象。
3.每个客户端的Seesion是独立存储的。
4.在整个会话过程中,只要SessionID的cookie不丢失,都会保存Session信息的。
5.Session不能跨进程访问,只能由该会话的用户访问。应为提取Session数据的id标识是以Cookie的方式保存到访问者浏览器的缓存里的。
6.当会话终止,或过期时,服务器就清除Session对象。
7.Session常用于保存登录用户的ID.
8.Session保存的数据是跨页面全局型的。
环境配置:
http服务器:192.168.117.6
web服务器TomcatA:192.168.117.4
web服务器TomcatB:192.168.117.5
注:此实验三台虚拟机均需关闭selinux,防火墙,以免不必要的报错
systemctl stop firewalld #关闭防火墙
systemctl disable firewalld #关闭防火墙开机自启动
getenforce #查看selinux的状态
setenforce 0 #临时调整selinux为宽松模式
sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/’ /etc/selinux/config #永久关闭selinux
web服务器配置:
注:运行tomcat服务,需要java环境。
[root@tomcat ~]# yum list all | grep jdk
#查看java软件包,本实例以java-1.8.0-openjdk为例
[root@tomcat ~]# yum install java-1.8.0-openjdk -y
[root@tomcat ~]# java -version #查看java版本
本实例以apache-tomcat-8.0.30.tar.gz为例
tomcat官网:https://tomcat.apache.org/
注:以下两台tomcat的配置,除了web界面和server.xml配置不同,其他操作都是一样的
[root@tomcat ~]# cd /usr/local/src/ #此目录一般用于存放源码包,可以把下载的apache-tomcat-8.0.30.tar.gz放到此目录下
[root@tomcat src]# tar xf apache-tomcat-8.0.30.tar.gz -C /usr/local/
#解压tar格式压缩包,-C(大写的C)选项,指定解压目录
[root@tomcat src]# cd … #…代表上级目录
[root@tomcat local]# ls
apache-tomcat-8.0.30 bin etc games include lib lib64 libexec sbin share src
[root@tomcat local]# ln -sv apache-tomcat-8.0.30/ tomcat
#给apache-tomcat-8.0.30作软链接,可以简单(不精确)的认为软链接之后,两目录完全相同
[root@tomcat local]# cd tomcat/
[root@tomcat tomcat]# vim /etc/profile.d/tomcat.sh
export CATALINA_HOME=/usr/local/tomcat
export PATH= C A T A L I N A H O M E / b i n : CATALINA_HOME/bin: CATALINAHOME/bin:PATH
#在/etc/profile.d/下创建一个tomcat.sh的文件,用来声明tomcat bin目录下的环境变量,换句话说:bin目录下的所有脚本,可以在任意路径下直接运行。

1、创建web虚拟机特有的目录结构
[root@tomcat ~]# mkdir /data/mywebapps/{lib,classes,WEB-INF,META-INF} -pv
[root@tomcat ~]# tree /data/mywebapps/
/data/mywebapps/
├── classes
├── index.jsp
├── lib
├── META-INF
└── WEB-INF
注:一个webapp目录至少应有此5个文件
[root@tomcat ~]# mkdir /data/logs #提供此web访问日志

2、提供两个web界面
[root@TomcatA~]# vim /data/mywebapps/index.jsp
<%@ page language=“java” %>

TomcatA

TomcatA.magedu.com

<% session.setAttribute("magedu.com","magedu.com"); %>
Session ID<%= session.getId() %>
Created on<%= session.getCreationTime() %>

[root@TomcatB~]# vim /data/mywebapps/index.jsp
<%@ page language=“java” %>

TomcatB

TomcatB.magedu.com

<% session.setAttribute("magedu.com","magedu.com"); %>
Session ID<%= session.getId() %>
Created on<%= session.getCreationTime() %>
3、添加web虚拟机配置文件: [root@Tomcat A~]# vim /usr/local/tomcat/conf/server.xml 1) 2)
       <Manager className="org.apache.catalina.ha.session.DeltaManager"
               expireSessionsOnShutdown="false"
               notifyListenersOnReplication="true"/>

        <Channel className="org.apache.catalina.tribes.group.GroupChannel">
        <Membership className="org.apache.catalina.tribes.membership.McastService"
                    address="228.0.1.7"  #指定多播地址
                    port="45564"
                    frequency="500"
                    dropTime="3000"/>
        <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                  address="192.168.117.4" #指定本机的ip地址(即此web虚拟机的ip)
                  port="4000"
                  autoBind="100"
                  selectorTimeout="5000"
                  maxThreads="6"/>

        <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
          <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
        </Sender>
        <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
        <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
      </Channel>

      <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
             filter=""/>
      <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

      <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
                tempDir="/tmp/war-temp/"
                deployDir="/tmp/war-deploy/"
                watchDir="/tmp/war-listen/"
                watchEnabled="false"/>

      <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
      </Cluster>
       <Context path=""  docBase="/data/mywebapps" unpackWARs="true"  autoDeploy="true" />

       <Valve className="org.apache.catalina.valves.AccessLogValve"  directory="/data/logs"
         prefix="webA_access_log" suffix=".txt"
         pattern="%h %l %u %t "%r" %s %b" />
[root@tomcatA ~]# cp /usr/local/tomcat/conf/web.xml /data/webapps/ROOT/WEB-INF/ #提供虚拟机所需的web.xml文件 [root@tomcatA ~]# vim /data/webapps/ROOT/WEB-INF/web.xml 添加 #位置在之中

[root@TomcatB~]# vim /usr/local/tomcat/conf/server.xml
1)
2)

       <Manager className="org.apache.catalina.ha.session.DeltaManager"
               expireSessionsOnShutdown="false"
               notifyListenersOnReplication="true"/>

        <Channel className="org.apache.catalina.tribes.group.GroupChannel">
        <Membership className="org.apache.catalina.tribes.membership.McastService"
                    address="228.0.1.7"  #指定多播地址
                    port="45564"
                    frequency="500"
                    dropTime="3000"/>
        <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                  address="192.168.117.5" #指定本机的ip地址(即此web虚拟机的ip)
                  port="4000"
                  autoBind="100"
                  selectorTimeout="5000"
                  maxThreads="6"/>

        <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
          <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
        </Sender>
        <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
        <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
      </Channel>

      <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
             filter=""/>
      <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

      <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
                tempDir="/tmp/war-temp/"
                deployDir="/tmp/war-deploy/"
                watchDir="/tmp/war-listen/"
                watchEnabled="false"/>

      <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
      </Cluster>
      <Context path=""  docBase="/data/mywebapps" unpackWARs="true"  autoDeploy="true" />
      <Valve className="org.apache.catalina.valves.AccessLogValve"  directory="/data/logs"
         prefix="webB_access_log" suffix=".txt"
         pattern="%h %l %u %t "%r" %s %b" />
[root@tomcatB ~]# cp /usr/local/tomcat/conf/web.xml /data/webapps/ROOT/WEB-INF/ #提供虚拟机所需的web.xml文件 [root@tomcatB ~]# vim /data/webapps/ROOT/WEB-INF/web.xml 添加 #位置在之中 [root@tomcat ~]# configtest.sh #查看server.xml配置文件是否有语法错误 [root@tomcat ~]# catalina.sh start #启动tomcat [root@tomcat ~]# netstat -tan | grep 8005 #管理jvm虚拟机的端口 [root@tomcat ~]# netstat -tan | grep 8009 #ajp协议端口 [root@tomcat ~]# netstat -tan | grep 8080 #http协议端口 tomcat cluster session适用于nginx负载,apache的三种模式的负载等。本次以mod_proxy_http模块为例!!! 以mod_proxy_http模块负载的简单解析: http: mod_proxy、 mod_proxy_http、 mod_proxy_balancer Tomcat: http connector http配置: [root@httpd ~]# yum install httpd -y [root@httpd ~]# rpm -ql httpd #查看httpd相关的配置文件 [root@httpd ~]# vim /etc/httpd/conf/httpd.conf 注释掉 #DocumentRoot "/var/www/html" [root@httpd ~]# cd /etc/httpd/conf.d/ [root@httpd conf.d]# vim lb_http.conf #创建一个必须以.conf结尾文件 Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED #session会话绑定
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值