【Session】Tomcat Session 集群

设备

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不会改变,轮询正常

相关推荐

  1. Zookeeper+Kafka

    2024-03-16 05:34:02       36 阅读
  2. Redis-主从、哨兵、

    2024-03-16 05:34:02       30 阅读
  3. zk--同步

    2024-03-16 05:34:02       28 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-16 05:34:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-16 05:34:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-16 05:34:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-16 05:34:02       20 阅读

热门阅读

  1. k8s系列-kubectl 命令快速参考

    2024-03-16 05:34:02       18 阅读
  2. K8S CNI

    K8S CNI

    2024-03-16 05:34:02      19 阅读
  3. k8s中 容器、pod服务、svc服务 这几个的区别

    2024-03-16 05:34:02       17 阅读
  4. k8s admin 用户生成token

    2024-03-16 05:34:02       19 阅读
  5. 安装k8s集群

    2024-03-16 05:34:02       18 阅读
  6. 24计算机考研调剂 | 太原科技大学

    2024-03-16 05:34:02       21 阅读
  7. 【MySQL】mysqladmin、mysqlshow、mysqlcheck都是干嘛的?

    2024-03-16 05:34:02       21 阅读
  8. 【CSS】前端开发中的常见CSS样式问题解决方案

    2024-03-16 05:34:02       20 阅读
  9. 【构建工具】PostCSS快速配置

    2024-03-16 05:34:02       20 阅读
  10. HTML-DAY1

    2024-03-16 05:34:02       16 阅读