tomcat-session共享

tomcat集群实现session共享问题。

session是什么东西?干什么用的,当初我也想知道。后来我通过了百度了解的他的作用。简单的介绍下,不全面只是简单的说明下。大家都知道http协议是无状态的协议。什么叫做无状态,也就说如果你在1秒钟之前访问了我们的web服务器,如果你在一秒钟之后再去访问的话,我们的web服务器可能就已经不再认识你了。所以呢session这个东西可以加载在cookie里面,可以作为你的标志。也可以来帮助我们的web服务器来识别我们的身份下面简单的介绍下,在tomcat集群里面如何实现session的共享。

在开始之前,在唠叨一句,为什么实现session共享呢?有什么作用呢?好吧,最大众也最有说服力的一个例子是,加入你在淘宝买东西,此处没有打广告的嫌疑,大家没必要紧张。如果你前一秒访问的服务器,突然崩了。也就是你原来加在购物车的东西都没了。这回事一种什么样子的感受呢。大家应该明白session共享的目的了吧。下面开始了。

设计:前段时Apache用来接收web请求。后面是tomcat的集群,我用两个tomcat来进行模拟。

①编辑Apache的配置文件。

打开反向代理的模块

oadModule proxy_module modules/mod_proxy.so

LoadModule proxy_connect_modulemodules/mod_proxy_connect.so

LoadModule proxy_http_modulemodules/mod_proxy_http.so

LoadModule proxy_wstunnel_modulemodules/mod_proxy_wstunnel.so

LoadModule proxy_ajp_modulemodules/mod_proxy_ajp.so

LoadModule proxy_balancer_modulemodules/mod_proxy_balancer.so

LoadModule proxy_express_modulemodules/mod_proxy_express.so

上面的这些,即打开了代理的模块。同样的负载的模块也已经被打开了。注释掉中心主机,我们利用虚拟主机来进行配置。

Iclude /etc/httpd/extra/httpd-proxy.conf

vi /etc/httpd/extra/httpd-proxy.conf

ProxyRequests off

<Proxy balancer://cluster>

BalancerMember  /  http://172.16.5.10:8080  loadfactor=1

BalancerMember  /  http://172.16.5.20:8080  loadfactor=1

ProxySet        lbmethod=byrequests

</Proxy>

<VirtualHost *:80>

ProxyRequests off

ProxyVia    off

ProxyPass /   balancer://cluster/

proxyPassReverse /  balancer://cluster/

<Proxy />

Require all granted

</Proxy>

<Location />

Require all granted

</Location>

</VirtualHost>

httpd的部分已经配置完成。下面可以重启web服务了。

②配置tomcat,在tomcat的配置过程中,包括下面的几个部分。

1、  更改配置文件

<Engine name="Catalina"defaultHost="www.xuejinliang.com" jvmRoute="TomcatA">

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"

                channelSendOptions="8">

         <ManagerclassName="org.apache.catalina.ha.session.DeltaManager"

                  expireSessionsOnShutdown="false"

                   notifyListenersOnReplication="true"/>

         <ChannelclassName="org.apache.catalina.tribes.group.GroupChannel">

           <MembershipclassName="org.apache.catalina.tribes.membership.McastService"

                       address="228.0.0.4"

                        port="45564"

                       frequency="500"

                       dropTime="3000"/>

           <ReceiverclassName="org.apache.catalina.tribes.transport.nio.NioReceiver"

                     address="172.16.5.10"

                      port="4000"

                      autoBind="100"

                     selectorTimeout="5000"

                     maxThreads="6"/>

           <SenderclassName="org.apache.catalina.tribes.transport.ReplicationTransmitter">

              <TransportclassName="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>

           </Sender>

           <InterceptorclassName="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>

           <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>

         </Channel>

         <ValveclassName="org.apache.catalina.ha.tcp.ReplicationValve"

         <ValveclassName="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

         <DeployerclassName="org.apache.catalina.ha.deploy.FarmWarDeployer"

                   tempDir="/tmp/war-temp/"

                   deployDir="/tmp/war-deploy/"

                   watchDir="/tmp/war-listen/"

                   watchEnabled="false"/>

          <ClusterListenerclassName="org.apache.catalina.ha.session.ClusterSessionListener"/>

       </Cluster>

上面的配置添加在配置文件中,可以放在engine中同时也可以放在host中。上面的作用是将tomcat服务器放到一个集群的组里面去。同时利用我们的DeltaManager这个管理器实现session的共享,IP地址自行进行配置。

<Host name="www.xuejinliang.com"  appBase="webapps"

           unpackWARs="true" autoDeploy="true">

     <Context path="" docBase="web"reLoadable="true"/>

     <ValveclassName="org.apache.catalina.valves.AccessLogValve"directory="logs"

              prefix="localhost_access_log" suffix=".txt"

              pattern="%{X-Forwarded-For}i %l %u %t &quot;%r&quot; %s%b" />

</Host>

这些都是常规的配置。根据自己的需求进行配置。集群的那部分代码是我们tomcat的官方网站找来的tomcat.apache.org,配置文件的更改已经完成。

2、  项目目录的文件更改。

我的项目目录为例:
cd  /usr/locat/tomcat/webapps/web/

mkdir WEB-INF

cp /usr/locat/tomcat/conf/web.xml  /usr/local/tomcat/webapps/web/WEB-INF/

vim web.xml

将<distributable/>加载到配置文件中,然后保存退出就可以了。

<web-appxmlns="http://xmlns.jcp.org/xml/ns/javaee"

 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee

                     http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"

  version="4.0">

 

<distributable/>

放在这里即可。

好了,在我们的项目的根目录下面可以建立一个测试的页面

vim index.jsp

<%@page language="java" %>

<html>

 <head><title>TomcatA</title></head>

  <body>

    <h1><fontcolor="red">TomcatA </font></h1>

    <table align="centre"border="1">

      <tr>

        <td>Session ID</td>

    <%session.setAttribute("abc","abc"); %>

        <td><%= session.getId()%></td>

      </tr>

      <tr>

        <td>Created on</td>

        <td><%=session.getCreationTime() %></td>

     </tr>

    </table>

  </body>

</html>

另外的一台进行同样的配置步骤,然后让我们的两台tomcat都重新的启动起来就好了。然后我们可以通过刷新web几面来查看是不是实现了我们的session共享。

今天想说的就是这些,下面的博客估计会发布些总结性的东西。概念或者原理的东西会多一些。continue…………….

 

 

 

 

你可能感兴趣的:(tomcat-session共享)