Tomcat Session集群---会话绑定

实验配置:

7-1安装Nginx
7-2和7-3安装Tomcat

1.配置7-1

1.做负载均衡,反向代理

复制代码
[root@localhost ~]# vim /etc/nginx/nginx.conf

 17 http {
 18         upstream tomcat {
 19         server 192.168.91.102:8080;
 20         server 192.168.91.103:8080;
 21 }
复制代码
 50         location ~* \.jsp$ {
 51         proxy_pass http://tomcat;
 52         }
复制代码
[root@localhost ~]# nginx -t
[root@localhost ~]# nginx -s reload

2.配置7-2和7-3

1.改一下主页面

复制代码
[root@localhost local]# cd tomcat
[root@localhost tomcat]# ls
bin           conf             lib      logs    README.md      RUNNING.txt  webapps
BUILDING.txt  CONTRIBUTING.md  LICENSE  NOTICE  RELEASE-NOTES  temp         work
[root@localhost tomcat]# cd webapps/ROOT
[root@localhost ROOT]# ls
asf-logo-wide.svg  bg-nav.png    index.jsp          tomcat.gif        tomcat.svg
bg-button.png      bg-upper.png  RELEASE-NOTES.txt  tomcat.png        WEB-INF
bg-middle.png      favicon.ico   tomcat.css         tomcat-power.gif
[root@localhost ROOT]# mv index.jsp index.jsp.bak
[root@localhost ROOT]# ls
asf-logo-wide.svg  bg-nav.png    index.jsp.bak     

2.配置安装环境;替换主页面文件

这个脚本会产生sessionid

###每次调度7-2和7-3时,sessionID都会改变

###我们要让他保持会话连接(sessionID不会变)

3.原理

1.当客户端去访问代理服务器;代理服务器调度给Tomcat1;如果是第一次访问:客户端cookie里面没有sessionID,Tomcat1服务器就给给客户端生成一个sessionID并且发给客户端;客户端会将sessionID存在cookie中;当客户端第二次去访问Tomcat1时,会带着Tomcat1的sessionID,第二次,Tomcat1就不会给客户端生成新的sessionID
2.由于代理服务器调度的原因;不会每次都调度给Tomcat1;当调度给Tomcat2时;cookie带的是sessionID1;Tomcat2上要用sessionID2,他就会生成一个新的ID给客户端
3.所以,来回调度的时候,每次都是新的sessionID

4.会话绑定方法一:IP hash

1.去配置7-1

2.网页段查看结果

3.缺点:

服务器不会调度了

5.会话绑定方法二

https://tomcat.apache.org/tomcat-9.0-doc/cluster-howto.html

把官网中,蓝色页面内容全部复制到主配置文件中

复制代码
 <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
                 channelSendOptions="6">

          <Manager className="org.apache.catalina.ha.session.BackupManager"
                   expireSessionsOnShutdown="false"
                   notifyListenersOnReplication="true"
                   mapSendOptions="6"/>
          <!--
          <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.0.4"
                        port="45564"
                        frequency="500"
                        dropTime="3000"/>
            <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                      address="auto"
                      port="5000"
                      selectorTimeout="100"
                      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.MessageDispatchInterceptor"/>
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>
          </Channel>

          <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
                 filter=".*\.gif|.*\.js|.*\.jpeg|.*\.jpg|.*\.png|.*\.htm|.*\.html|.*\.css|.*\.txt"/>

          <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>

1.先把ip hash删掉

2.配置7-2和7-3的主配置文件

复制代码
[root@localhost tomcat]# vim conf/server.xml

2.修改7-2和7-3子配置文件

复制代码
[root@localhost tomcat]# cd webapps/ROOT
[root@localhost ROOT]# ls
asf-logo-wide.svg  bg-nav.png    index.jsp          tomcat.css  tomcat-power.gif
bg-button.png      bg-upper.png  index.jsp.bak      tomcat.gif  tomcat.svg
bg-middle.png      favicon.ico   RELEASE-NOTES.txt  tomcat.png  WEB-INF
[root@localhost ROOT]# cd WEB-INF
[root@localhost WEB-INF]# LS
bash: LS: 未找到命令...
相似命令是: 'ls'
[root@localhost WEB-INF]# ls
web.xml

[root@localhost WEB-INF]# vim web.xml

3.访问浏览器看结果

结果:不管调度7-2还是7-3;sessionID都保持一致

相关推荐
TT哇4 分钟前
【Java EE初阶】计算机是如何⼯作的
java·redis·java-ee
清幽竹客6 分钟前
vue-37(模拟依赖项进行隔离测试)
前端·vue.js
vvilkim6 分钟前
Nuxt.js 页面与布局系统深度解析:构建高效 Vue 应用的关键
前端·javascript·vue.js
pipip.7 分钟前
UDP————套接字socket
linux·网络·c++·网络协议·udp
滿10 分钟前
Vue3 父子组件表单滚动到校验错误的位置实现方法
前端·javascript·vue.js
zkmall10 分钟前
企业电商解决方案哪家好?ZKmall模块商城全渠道支持 + 定制化服务更省心
大数据·运维·重构·架构·开源
Félix25111 分钟前
计算机网络笔记(不全)
网络·计算机网络
夏梦春蝉1 小时前
ES6从入门到精通:模块化
前端·ecmascript·es6
云资源服务商2 小时前
解锁阿里云日志服务SLS:云时代的日志管理利器
服务器·阿里云·云计算
拓端研究室2 小时前
视频讲解:门槛效应模型Threshold Effect分析数字金融指数与消费结构数据
前端·算法