什么是session?

其实session是一个存在服务器上的类似于一个散列表格的文件。里面存有我们需要的信息,在我们需要用的时候可以从里面取出来。说起session的作用,简单的举个例子:我们在登录某些网站的时候,输入了用户名密码,登录以后再打开新的页面时,自动显示的是已登录的状态,不需要再次重新登录。这里就是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.6web服务器TomcatA:192.168.117.4web服务器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]# lsapache-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.shexport CATALINA_HOME=/usr/local/tomcatexport PATH=$CATALINA_HOME/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" %><html>  <head><title>TomcatA</title></head>  <body>    <h1><font color="blue">TomcatA.magedu.com</font></h1>    <table align="centre" border="1">      <tr>        <td>Session ID</td>    <% session.setAttribute("magedu.com","magedu.com"); %>        <td><%= session.getId() %></td>      </tr>      <tr>        <td>Created on</td>        <td><%= session.getCreationTime() %></td>     </tr>    </table>  </body></html>[root@TomcatB~]# vim /data/mywebapps/index.jsp<%@ page language="java" %><html>  <head><title>TomcatB</title></head>  <body>    <h1><font color="red">TomcatB.magedu.com</font></h1>    <table align="centre" border="1">      <tr>        <td>Session ID</td>    <% session.setAttribute("magedu.com","magedu.com"); %>        <td><%= session.getId() %></td>      </tr>      <tr>        <td>Created on</td>        <td><%= session.getCreationTime() %></td>     </tr>    </table>  </body></html>3、添加web虚拟机配置文件:[root@Tomcat A~]# vim /usr/local/tomcat/conf/server.xml1) <Engine name="Catalina" defaultHost="web.test.com" jvmRoute="TomcatA">2) <Host name="web.test.com" appbase="/data/mywebapps">         <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"                 channelSendOptions="8">           <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" /></Host>[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添加 <distributable/> #位置在<web-app>之中[root@TomcatB~]# vim /usr/local/tomcat/conf/server.xml1)<Engine name="Catalina" defaultHost="web.test.com" jvmRoute="TomcatB">2)<Host name="web.test.com" appbase="/data/mywebapps">         <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"                 channelSendOptions="8">           <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" /></Host>[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添加 <distributable/> #位置在<web-app>之中[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_balancerTomcat:        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会话绑定<proxy balancer://lbcluster1> #定义集群lbcluster1BalancerMember http://192.168.117.4:8080 loadfactor=10 route=TomcatA #指定集群成员,loadfactor指定负载权重,route指定web服务器的标签,集群可以通过此标签找到这个集群成员BalancerMember http://192.168.117.5:8080 loadfactor=10 route=TomcatBProxySet Stickysession=ROUTEID #session会话绑定</proxy><VirtualHost *:80>ServerName web.test.comProxyVia on ProxyRequests off #关闭正向代理ProxyPreserveHost on #开启web虚拟机<Proxy *>    Require all granted</Proxy>ProxyPass / balancer://lbcluster1/ProxyPa***everse / balancer://lbcluster1/ #ProxyPass Reverse,因为前面被和谐了,分开写的,合在一起就可以了。<Location />    Require all granted</Location></VirtualHost>[root@httpd conf.d]# httpd -t #检查conf文件的语法格式是否正确[root@httpd conf.d]# systemctl start httpd.service[root@httpd conf.d]# netstat -tan | grep 80 

客户端验证(本地物理机):

http://192.168.117.6

效果:http前端无论代理到哪台tomcat服务器,Session ID都是保持不变的

©著作权归作者所有:来自51CTO博客作者wx6050542b8a25f的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. vmware.exe命令行参数详解
  2. 3.18 部署具有嵌入式Platform Services Controller的vCenter
  3. 看图说话,脏读、不可重复读、幻读分别是什么?
  4. Linux系统——KVM虚拟机安装与管理
  5. VMware拷贝虚拟机
  6. 对vSAN使用较小的磁盘大小可能会导致VM故障
  7. 虚拟机安装Linux复盘
  8. 诊断虚拟机频繁 OOM 的问题
  9. 利用Azure虚拟机安装Dynamics 365 Customer Engagement之九:新建

随机推荐

  1. 使用Python启动浏览器(Chromium)并更改URL
  2. python 读写文本文件
  3. 用 Python 分析胡歌的《猎场》到底值不值
  4. Python: sorted和sort的区别
  5. Python闭包需要注意的问题
  6. 使用python将图片转换为字符图片
  7. 如何按期执行python脚本?
  8. python 3.3 爬虫之爬取图片
  9. python处理数据,存进hive表
  10. Python笔记-几种取整方式