Tomcat集群之会话保持

Tomcat Session Replication Cluster
方法一:

实验环境:

R1和R2做两台tomcat和一台httpd调度器
R1:192.168.243.8 tomcatA
R2:192.168.243.9 tomcatB
httpd:192.168.243.7
时间要同步 防火墙关闭

这里写图片描述

(1) 配置启用集群,将下列配置放置于 <engine> <script type="math/tex" id="MathJax-Element-1"> </script>或 <host> <script type="math/tex" id="MathJax-Element-2"> </script>中;
参考官网文档 http://192.168.243.7/docs/cluster-howto.html

[root@R1 ~]#vim /etc/tomcat/server.xml

<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.41.41"
                        port="45564"
                        frequency="500"
                        dropTime="3000"/>
            <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                      address="192.168.243.8"
                      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.JvmRouteSessionIDBinderListener"/>
          <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
        </Cluster>

注意:CentOS 7上的tomcat自带的文档中的配置示例有语法错误;

<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
                <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>

R2配置和R1中一样,只是把ip改为本机Ip192.168.243.9 两台tomcat的广播地址也需相同
同时我们在R1和R2两台tomcat服务器上分别添加自定义标签jvmRoute=”TomcatA”和”TomcatB”

105     <Engine name="Catalina" defaultHost="localhost" jvmRoute="TomcatA">
105     <Engine name="Catalina" defaultHost="localhost" jvmRoute="TomcatB">

注意,当我们配置完配置文件,可能出现重启tomcat服务发现无法启动,ss -ntl 查看8080和,8005,8009端口没有打开。

检查当天对应日志报错 /var/log/tomcat/catalina.2017-11-07.log

这里写图片描述

网上搜查报错信息解决办法需要 尝试设置一下组播的路由:

route  add  -net  224.0.0.0  netmask  224.0.0.0   dev ens33  
(2) 配置webapps

编辑WEB-INF/web.xml,添加元素;

[root@R1 tomcat]# cp /etc/tomcat/web.xml /usr/share/tomcat/webapps/myapp/WEB-INF/
[root@R1 ~]#cd /usr/share/tomcat/webapps/myapp/WEB-INF/
[root@R1 WEB-INF]#vim web.xml     

根据官网文档要求加上Make sure your web.xml has the <distributable/> <script type="math/tex" id="MathJax-Element-3"> </script> element

同时我们也需要在R2上同样加添 <distributable/> <script type="math/tex" id="MathJax-Element-4"> </script>

[root@R2 ~]#vim /usr/share/tomcat/webapps/myapp/WEB-INF/web.xml    
(3)配置调度器httpd 配置文件
[root@centos7 ~]#vim /etc/httpd/conf.d/ajp-tomcat.conf 

这里写图片描述
测试
http://192.168.243.7/myapp/
session ID 必须一样,保持同一个会话
这里写图片描述
这里写图片描述
[root@centos7 ~]#for i in {1..10};do curl -s http://192.168.243.7/myapp/ | grep -i tomcat; done


Memecached作为高速运行的分布式缓存服务器,有以下特性

● 协议简单
● 基于 libevent 的事件处理
● 内置内存存储方式
● memcached 不互相通信的分布式

Memcached也有的缺陷

● 由于数据均存储于内存中,一旦服务器宕机,所有缓存将全部丢失,对于强依赖缓存的应用将是致命性的缺陷
● 由于Memcached是旁挂式缓存服务器,不会主动去缓存数据,它所谓的分布式和智能性一半依赖于客户端(调用memcached的API开发程序),一半依赖于服务端
● 支持缓存的数据类型单一,只支持字节性数据,其它数据类型必须能够序列化方可缓存。


方法二
实现会话保持之tomcat-session-memcached

这里写图片描述

前提:
centos7.3虚拟机
两个tomcat节点:192.168.243.8(tomcatA.magedu.com)
                           192.168.243.9(tomcatB.magedu.com)
两个memcached节点:192.168.243.10,192.168.243.11
一个负载均衡节点:192.168.243.7
时间同步,iptables清空关闭

一、在两台memcache服务器上安装memcached并启动,检查其服务端口11211是否打开

二、下载如下jar文件至各tomcat节点的tomcat安装目录下的lib目录中,其中的 versiontc {6,7,8}要换成与tomcat版本相同的版本号。
下载地址
https://github.com/magro/memcached-session-manager/wiki/SetupAndConfiguration

tomcat节点的tomcat安装目录下的lib目录 /usr/share/tomcat/lib

这里写图片描述

三、分别在两个tomcat上的配置文件/etc/tomcat/server.xml某host上定义一个用于测试的context容器,并创建一个会话管理器,如下所示:

这里写图片描述
四、分别在两台tomcat添加测试界面

[root@R1 myapp]#vim /usr/share/tomcat/webapps/myapp/index.jsp 

tomcatA
这里写图片描述
tomcatB
这里写图片描述

五、在192.168.243.7上配置反向代理的负载均衡内容,类似如下所示:

[root@centos7 ~]#vim /etc/httpd/conf.d/ajp-tomcat.conf

这里写图片描述
测试:
在谷歌或者火狐浏览器中
这里写图片描述
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值