【Session】Tomcat Session 集群

本文详细描述了如何在Linux服务器上安装并配置Nginx作为反向代理,以及如何设置Tomcat集群以实现会话持久化和负载均衡。通过修改Nginx配置和Tomcat的server.xml,读者可以学习到如何处理不同节点间的请求分发和会话同步。

设备

nginx:192.168.67.11
tomcat1:192.168.67.12
tomcat2:192.168.67.13

安装nginx

(192.168.67.11)

#关闭防火墙和安全机制
[root@test1 ~]# systemctl stop firewalld
[root@test1 ~]# setenforce 0

#安装epel源
[root@test1 ~]# yum -y install epel-release.noarch

#安装nginx
[root@test1 ~]# yum -y install nginx

#开启nginx服务
[root@test1 ~]# systemctl start nginx

#修改配置文件;在22行下写upstream反向代理
[root@test1 ~]# vim /etc/nginx/nginx.conf
 22     access_log  /var/log/nginx/access.log  main;
 23         upstream tomcat {
 24         server   192.168.67.12:8080;
 25         server   192.168.67.13:8080;
 26         }
    #在49行下写
 48         # Load configuration files for the default server block.
 49         include /etc/nginx/default.d/*.conf;
 50         location ~* \.jsp$ {
 51         proxy_pass   http://tomcat;
 52         }

#检查配置文件
[root@test1 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
#重新加载配置文件
[root@test1 ~]# nginx -s reload

安装tomcat

(192.168.67.12、192.168.67.13)两者操作相同,下面只展示了tomcat1

#关闭防火墙和安全机制
[root@test2 ~]# systemctl stop firewalld
[root@test2 ~]# setenforce 0

#创建一个data目录
[root@test2 ~]# mkdir data
[root@test2 ~]# cd data/
[root@test2 data]# ls

#上传jdk和tomcat包
[root@test2 data]# rz -E
rz waiting to receive.
[root@test2 data]# rz -E
rz waiting to receive.
[root@test2 data]# ls
apache-tomcat-9.0.16.tar.gz  jdk-8u201-linux-x64.tar.gz

#解压安装jdk
[root@test2 data]# tar xvf jdk-8u201-linux-x64.tar.gz -C /usr/local

[root@test2 data]# cd /usr/local/
[root@test2 local]# ln -s jdk1.8.0_201/ jdk
[root@test2 local]# vim /etc/profile.d/jdk.sh
export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$PATH
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib/:$JRE_HOME/lib/

[root@test2 local]# . /etc/profile.d/jdk.sh 

[root@test2 local]# java -version
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)
解压安装tomcat
[root@test2 local]# cd 
[root@test2 ~]# cd data
#解压
[root@test2 data]# tar zxvf apache-tomcat-9.0.16.tar.gz
[root@test2 data]# ls
apache-tomcat-9.0.16         jdk-8u201-linux-x64.tar.gz
apache-tomcat-9.0.16.tar.gz
[root@test2 data]# cp -r apache-tomcat-9.0.16 /usr/local/tomcat
#创建tomcat用户
[root@test2 data]# useradd -s /sbin/nologin tomcat
[root@test2 data]# cd /usr/local/
[root@test2 local]# ls
bin  games    jdk           lib    libexec  share  tomcat
etc  include  jdk1.8.0_201  lib64  sbin     src
[root@test2 local]# chown tomcat:tomcat tomcat/ -R
[root@test2 local]# cat > /usr/lib/systemd/system/tomcat.service <<EOF
> [Unit]
> Description=Tomcat
> After=syslog.target netwaork.target
> 
> [Service]
> Type=forking
> ExecStart=/usr/local/tomcat/bin/startup.sh
> ExecStop=/usr/local/tomcat/bin/shutdown.sh
> RestartSec=3
> PrivateTmp=true
> User=tomcat
> Group=tomcat
> 
> [Install]
> WantedBy=muti-user.target
> 
> EOF

#刷新配置文件;启动tomcat
[root@test2 local]# systemctl daemon-reload 
[root@test2 local]# systemctl start tomcat.service 
[root@test2 local]# systemctl status tomcat.service 

[root@test2 local]# ls
bin  games    jdk           lib    libexec  share  tomcat
etc  include  jdk1.8.0_201  lib64  sbin     src
[root@test2 webapps]# cd tomcat/webapps/ROOT/
[root@test2 ROOT]# ls
asf-logo-wide.svg  favicon.ico        tomcat.png
bg-button.png      index.jsp          tomcat-power.gif
bg-middle.png      RELEASE-NOTES.txt  tomcat.svg
bg-nav.png         tomcat.css         WEB-INF
bg-upper.png       tomcat.gif

[root@test2 ROOT]# mv index.jsp index.jsp.bak
[root@test2 ROOT]# rz -E
rz waiting to receive.
[root@test2 ROOT]# ls
asf-logo-wide.svg  favicon.ico        tomcat.gif
bg-button.png      index.jsp          tomcat.png
bg-middle.png      index.jsp.bak      tomcat-power.gif
bg-nav.png         RELEASE-NOTES.txt  tomcat.svg
bg-upper.png       tomcat.css         WEB-INF

[root@test2 ROOT]# cat index.jsp
<%@ page import="java.util.*" %>
<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>tomcat test</title>
</head>
<body>
<div>On <%=request.getServerName() %></div>
<div><%=request.getLocalAddr() + ":" + request.getLocalPort() %></div>
<div>SessionID = <span style="color:blue"><%=session.getId() %></span></div>
<%=new Date()%>
</body>
</html>

浏览器访问:

刷新浏览器可以看到sid一直在变化

sid变化的原因:

固定同一客户机的SID
[root@test1 ~]# vim /etc/nginx/nginx.conf
#添加第24行
 22     access_log  /var/log/nginx/access.log  main;
 23         upstream tomcat {
 24         hash     $remote_addr;
 25         server   192.168.67.12:8080;
 26         server   192.168.67.13:8080;
 27         }

#检查配置文件
[root@test1 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
#重新加载配置文件
[root@test1 ~]# nginx -s reload

可以看到SID不再改变,但同一客户机的请求也不会再被轮循

搭配共享服务

官网网址:Apache Tomcat 9 (9.0.87) - Clustering/Session Replication How-To

注意先删除上面固定SID的代码

[root@test2 ROOT]# cd /usr/local/tomcat
[root@test2 tomcat]# vim conf/server.xml
#在163行,</Host>上面  添加
        <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.0.4"
                        port="45564"
                        frequency="500"
                        dropTime="3000"/>
            <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                      address="auto"    #这里最好将auto改为本机地址
                      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.MessageDispatchInterceptor"/>
          </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>

#若要添加上面的内容,之后一定要添加下面的内容
[root@test2 ROOT]# pwd
/usr/local/tomcat/webapps/ROOT
[root@test2 ROOT]# cd WEB-INF/
[root@test2 WEB-INF]# ls
web.xml
[root@test2 WEB-INF]# vim web.xml 
#在29行  </description>下面 添加
 29 <distributable/>
浏览器访问:192.168.67.11/index.jsp

刷新可以看到SID不会改变,轮询正常

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值