• Linux系统——Session ID(负载均衡如何保持会话)


    目录

    一、实验环境搭建

    二、部署Nginx代理服务器配置

    三、部署后端真是服务器Tomcat配置

    四、配置Tomcat的Session ID会话保持

    五、测试


    此次实验是Tomcat后端服务器如何做Session ID会话保持

    一、实验环境搭建

    1. [root@localhost ~]#systemctl stop firewalld
    2. [root@localhost ~]#setenforce 0
    3. setenforce: SELinux is disabled
    4. [root@localhost ~]#yum install epel-release.noarch -y
    5. #安装epel额外源
    6. [root@localhost ~]#yum install nginx -y
    7. #yum安装Nginx 作为代理服务器
    8. [root@localhost ~]#systemctl start nginx
    9. [root@localhost ~]#systemctl status nginx
    10. ● nginx.service - The nginx HTTP and reverse proxy server
    11. Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
    12. Active: active (running) since 六 2024-03-16 10:21:23 CST; 5s ago
    13. Process: 2055 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
    14. Process: 2051 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
    15. Process: 2049 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
    16. Main PID: 2058 (nginx)
    17. CGroup: /system.slice/nginx.service
    18. ├─2058 nginx: master process /usr/sbin/nginx
    19. ├─2059 nginx: worker process
    20. └─2060 nginx: worker process
    21. 3月 16 10:21:23 localhost.localdomain systemd[1]: Starting The nginx HTTP ...
    22. 3月 16 10:21:23 localhost.localdomain nginx[2051]: nginx: the configuratio...
    23. 3月 16 10:21:23 localhost.localdomain nginx[2051]: nginx: configuration fi...
    24. 3月 16 10:21:23 localhost.localdomain systemd[1]: Started The nginx HTTP a...
    25. Hint: Some lines were ellipsized, use -l to show in full.
    1. [root@node2 ~]#systemctl stop firewalld
    2. [root@node2 ~]#setenforce 0
    3. [root@node2 ~]#rz -E
    4. rz waiting to receive.
    5. [root@node2 ~]#rz -E
    6. rz waiting to receive.
    7. [root@node2 ~]#ls
    8. anaconda-ks.cfg Downloads Pictures
    9. apache-tomcat-9.0.16.tar.gz initial-setup-ks.cfg Public
    10. Desktop jdk-8u291-linux-x64.tar.gz Templates
    11. Documents Music Videos
    12. [root@node2 ~]#tar xf jdk-8u291-linux-x64.tar.gz -C /usr/local/
    13. [root@node2 ~]#cd /usr/local/
    14. [root@node2 local]#ls
    15. bin etc games include jdk1.8.0_291 lib lib64 libexec sbin share src
    16. [root@node2 local]#ln -s jdk1.8.0_291/ jdk
    17. [root@node2 local]#vim /etc/profile.d/jdk.sh
    18. [root@node2 local]#cat /etc/profile.d/jdk.sh
    19. export JAVA_HOME=/usr/local/jdk
    20. export CLASSPATH=$JAVA_HOME/lib/:$JRE_HOME/lib/
    21. export PATH=$JAVA_HOME/bin:$PATH
    22. export JRE_HOME=$JAVA_HOME/jre
    23. [root@node2 local]#. /etc/profile.d/jdk.sh
    24. [root@node2 local]#java -version
    25. java version "1.8.0_291"
    26. Java(TM) SE Runtime Environment (build 1.8.0_291-b10)
    27. Java HotSpot(TM) 64-Bit Server VM (build 25.291-b10, mixed mode)
    1. [root@node3 ~]#systemctl stop firewalld
    2. [root@node3 ~]#setenforce 0
    3. [root@node3 ~]#rz -E
    4. rz waiting to receive.
    5. [root@node3 ~]#rz -E
    6. rz waiting to receive.
    7. [root@node3 ~]#ls
    8. anaconda-ks.cfg jdk-8u291-linux-x64.tar.gz 视频 下载
    9. apache-tomcat-9.0.16.tar.gz 公共 图片 音乐
    10. initial-setup-ks.cfg 模板 文档 桌面
    11. [root@node3 ~]#tar xf jdk-8u291-linux-x64.tar.gz -C /usr/local/
    12. [root@node3 ~]#cd /usr/local/
    13. [root@node3 local]#ls
    14. bin etc games include jdk1.8.0_291 lib lib64 libexec sbin share src
    15. [root@node3 local]#ln -s jdk1.8.0_291/ jdk
    16. [root@node3 local]#vim /etc/profile.d/jdk.sh
    17. [root@node3 local]#cat /etc/profile.d/jdk.sh
    18. export JAVA_HOME=/usr/local/jdk
    19. export CLASSPATH=$JAVA_HOME/lib/:$JRE_HOME/lib/
    20. export PATH=$JAVA_HOME/bin:$PATH
    21. export JRE_HOME=$JAVA_HOME/jre
    22. [root@node3 local]#. /etc/profile.d/jdk.sh
    23. [root@node3 local]#java -version
    24. java version "1.8.0_291"
    25. Java(TM) SE Runtime Environment (build 1.8.0_291-b10)
    26. Java HotSpot(TM) 64-Bit Server VM (build 25.291-b10, mixed mode)

    二、部署Nginx代理服务器配置

    1. [root@localhost ~]#vim /etc/nginx/nginx.conf
    2. [root@localhost ~]#sed -n '23,26p' /etc/nginx/nginx.conf
    3. upstream tomcat {
    4. server 192.168.241.22:8080;
    5. server 192.168.241.23:8080;
    6. }
    7. [root@localhost ~]#sed -n '50,52p' /etc/nginx/nginx.conf
    8. location ~* \.jsp$ {
    9. proxy_pass http://tomcat;
    10. }
    11. [root@localhost ~]#nginx -t
    12. nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    13. nginx: configuration file /etc/nginx/nginx.conf test is successful
    14. [root@localhost ~]#nginx -s reload

    三、部署后端真是服务器Tomcat配置

    1. [root@node2 local]#cd
    2. [root@node2 ~]#ls
    3. anaconda-ks.cfg Downloads Pictures
    4. apache-tomcat-9.0.16.tar.gz initial-setup-ks.cfg Public
    5. Desktop jdk-8u291-linux-x64.tar.gz Templates
    6. Documents Music Videos
    7. [root@node2 ~]#tar xf apache-tomcat-9.0.16.tar.gz -C /usr/local/
    8. [root@node2 ~]#cd /usr/local/
    9. [root@node2 local]#ls
    10. apache-tomcat-9.0.16 etc include jdk1.8.0_291 lib64 sbin src
    11. bin games jdk lib libexec share
    12. [root@node2 local]#ln -s apache-tomcat-9.0.16/ tomcat
    13. [root@node2 local]#ls
    14. apache-tomcat-9.0.16 etc include jdk1.8.0_291 lib64 sbin src
    15. bin games jdk lib libexec share tomcat
    16. [root@node2 local]#cd tomcat/
    17. [root@node2 tomcat]#useradd -s /sbin/nologin tomcat
    18. [root@node2 tomcat]#chown tomcat:tomcat tomcat/ -R
    19. chown: cannot access ‘tomcat/’: No such file or directory
    20. [root@node2 tomcat]#chown tomcat:tomcat -R
    21. chown: missing operand after ‘tomcat:tomcat’
    22. Try 'chown --help' for more information.
    23. [root@node2 tomcat]#cd ..
    24. [root@node2 local]#chown tomcat:tomcat tomcat/ -R
    25. [root@node2 local]#cat > /usr/lib/systemd/system/tomcat.service <
    26. > [Unit]
    27. > Description=Tomcat
    28. > After=syslog.target network.target
    29. >
    30. > [Service]
    31. > Type=forking
    32. > ExecStart=/usr/local/tomcat/bin/startup.sh
    33. > ExecStop=/usr/local/tomcat/bin/shutdown.sh
    34. > RestartSec=3
    35. > PrivateTmp=true
    36. > User=tomcat
    37. > Group=tomcat
    38. >
    39. > [Install]
    40. > WantedBy=multi-user.target
    41. >
    42. > EOF
    43. [root@node2 local]#cd tomcat/webapps/ROOT/
    44. [root@node2 ROOT]#ls
    45. asf-logo-wide.svg bg-upper.png tomcat.css tomcat.svg
    46. bg-button.png favicon.ico tomcat.gif WEB-INF
    47. bg-middle.png index.jsp tomcat.png
    48. bg-nav.png RELEASE-NOTES.txt tomcat-power.gif
    49. [root@node2 ROOT]#mv index.jsp index.jsp.bak
    50. [root@node2 ROOT]#rz -E
    51. rz waiting to receive.
    52. [root@node2 ROOT]#ls
    53. asf-logo-wide.svg bg-upper.png RELEASE-NOTES.txt tomcat-power.gif
    54. bg-button.png favicon.ico tomcat.css tomcat.svg
    55. bg-middle.png index.jsp tomcat.gif WEB-INF
    56. bg-nav.png index.jsp.bak tomcat.png
    57. [root@node2 ROOT]#cat index.jsp
    58. <%@ page import="java.util.*" %>
    59. "en">
    60. <head>
    61.   "UTF-8">
    62.   tomcat <span class="hljs-built_in">test</span>
    63. On <%=request.getServerName() %>
    64. <%=request.getLocalAddr() + ":" + request.getLocalPort() %>
    65. SessionID = "color:blue"><%=session.getId() %>
    66. <%=new Date()%>
    67. [root@node2 ROOT]#systemctl start tomcat
    1. [root@node3 local]#cd
    2. [root@node3 ~]#ls
    3. anaconda-ks.cfg jdk-8u291-linux-x64.tar.gz 视频 下载
    4. apache-tomcat-9.0.16.tar.gz 公共 图片 音乐
    5. initial-setup-ks.cfg 模板 文档 桌面
    6. [root@node3 ~]#tar xf apache-tomcat-9.0.16.tar.gz -C /usr/local/
    7. [root@node3 ~]#cd /usr/local/
    8. [root@node3 local]#ls
    9. apache-tomcat-9.0.16 etc include jdk1.8.0_291 lib64 sbin src
    10. bin games jdk lib libexec share
    11. [root@node3 local]#ln -s apache-tomcat-9.0.16/ tomcat
    12. [root@node3 local]#ls
    13. apache-tomcat-9.0.16 etc include jdk1.8.0_291 lib64 sbin src
    14. bin games jdk lib libexec share tomcat
    15. [root@node3 local]#cd tomcat/
    16. [root@node3 tomcat]#useradd -s /sbin/nologin tomcat
    17. [root@node3 tomcat]#chown tomcat:tomcat tomcat/ -R
    18. chown: 无法访问"tomcat/": 没有那个文件或目录
    19. [root@node3 tomcat]#chown tomcat:tomcat -R
    20. chown: "tomcat:tomcat" 后缺少操作数
    21. Try 'chown --help' for more information.
    22. [root@node3 tomcat]#cd ..
    23. [root@node3 local]#chown tomcat:tomcat tomcat/ -R
    24. [root@node3 local]#cat > /usr/lib/systemd/system/tomcat.service <
    25. > [Unit]
    26. > Description=Tomcat
    27. > After=syslog.target network.target
    28. >
    29. > [Service]
    30. > Type=forking
    31. > ExecStart=/usr/local/tomcat/bin/startup.sh
    32. > ExecStop=/usr/local/tomcat/bin/shutdown.sh
    33. > RestartSec=3
    34. > PrivateTmp=true
    35. > User=tomcat
    36. > Group=tomcat
    37. >
    38. > [Install]
    39. > WantedBy=multi-user.target
    40. >
    41. > EOF
    42. [root@node3 local]#cd tomcat/webapps/ROOT/
    43. [root@node3 ROOT]#ls
    44. asf-logo-wide.svg bg-upper.png tomcat.css tomcat.svg
    45. bg-button.png favicon.ico tomcat.gif WEB-INF
    46. bg-middle.png index.jsp tomcat.png
    47. bg-nav.png RELEASE-NOTES.txt tomcat-power.gif
    48. [root@node3 ROOT]#mv index.jsp index.jsp.bak
    49. [root@node3 ROOT]#rz -E
    50. rz waiting to receive.
    51. [root@node3 ROOT]#cat index.jsp
    52. <%@ page import="java.util.*" %>
    53. "en">
    54. <head>
    55.   "UTF-8">
    56.   tomcat <span class="hljs-built_in">test</span>
    57. On <%=request.getServerName() %>
    58. <%=request.getLocalAddr() + ":" + request.getLocalPort() %>
    59. SessionID = "color:blue"><%=session.getId() %>
    60. <%=new Date()%>
    61. [root@node3 ROOT]#systemctl start tomcat

    实际生产环境不允许Session ID不断变动的。

    • 客户第一次访问被调度到后端真实服务器Tomcat1上,由于是第一次访问,客户度的Cookie缓存会记录,不会有SessionID,Tomcat1服务器会生成新的Session ID传输给客户端,客户端会将这个新的Session ID记录下来;
    • 当第二次访问的时候,Nginx代理服务器又可能将服务请求调度到后端真实服务器Tomcat2上,Tomcat2服务器是没有客户端传输来的Session ID1的,Tomcat2服务器认为客户端要生成新的SessionID,于是Tomcat2服务器将新的Session ID2传输给客户端,客户端会更新Session ID,将刚刚的SessionID更改为SessionID2;
    • 当第三次访问的时候,客户端带着SessionID2去Nginx代理服务器,Nginx代理服务器可能将客户端又调度到Tomcat1服务器上,Tomcat1服务器并没有SessionID2,于是又将新生成的SessionID3传输给客户端,这样会有很不好的客户端体验,所以我们可以根据修改Tomcat配置文件来进行会话保持 

    四、配置Tomcat的Session ID会话保持

    Tomcat会话保持官方说明https://tomcat.apache.org/tomcat-9.0-doc/cluster-howto.html

    1. [root@node2 ROOT]#vim /usr/local/tomcat/conf/server.xml
    2. [root@node2 ROOT]#sed -n '163,201p' /usr/local/tomcat/conf/server.xml
    3. "org.apache.catalina.ha.tcp.SimpleTcpCluster"
    4. channelSendOptions="8">
    5. "org.apache.catalina.ha.session.DeltaManager"
    6. expireSessionsOnShutdown="false"
    7. notifyListenersOnReplication="true"/>
    8. "org.apache.catalina.tribes.group.GroupChannel">
    9. "org.apache.catalina.tribes.membership.McastService"
    10. address="228.0.0.4"
    11. port="45564"
    12. frequency="500"
    13. dropTime="3000"/>
    14. "org.apache.catalina.tribes.transport.nio.NioReceiver"
    15. address="192.168.241.22"
    16. port="4000"
    17. autoBind="100"
    18. selectorTimeout="5000"
    19. maxThreads="6"/>
    20. "org.apache.catalina.tribes.transport.ReplicationTransmitter">
    21. "org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
    22. "org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
    23. "org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor"/>
    24. "org.apache.catalina.ha.tcp.ReplicationValve"
    25. filter=""/>
    26. "org.apache.catalina.ha.session.JvmRouteBinderValve"/>
    27. "org.apache.catalina.ha.deploy.FarmWarDeployer"
    28. tempDir="/tmp/war-temp/"
    29. deployDir="/tmp/war-deploy/"
    30. watchDir="/tmp/war-listen/"
    31. watchEnabled="false"/>
    32. "org.apache.catalina.ha.session.ClusterSessionListener"/>
    1. [root@node3 ROOT]#vim /usr/local/tomcat/conf/server.xml
    2. [root@node3 ROOT]#sed -n '163,201p' /usr/local/tomcat/conf/server.xml
    3. "org.apache.catalina.ha.tcp.SimpleTcpCluster"
    4. channelSendOptions="8">
    5. "org.apache.catalina.ha.session.DeltaManager"
    6. expireSessionsOnShutdown="false"
    7. notifyListenersOnReplication="true"/>
    8. "org.apache.catalina.tribes.group.GroupChannel">
    9. "org.apache.catalina.tribes.membership.McastService"
    10. address="228.0.0.4"
    11. port="45564"
    12. frequency="500"
    13. dropTime="3000"/>
    14. "org.apache.catalina.tribes.transport.nio.NioReceiver"
    15. address="192.168.241.23"
    16. port="4000"
    17. autoBind="100"
    18. selectorTimeout="5000"
    19. maxThreads="6"/>
    20. "org.apache.catalina.tribes.transport.ReplicationTransmitter">
    21. "org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
    22. "org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
    23. "org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor"/>
    24. "org.apache.catalina.ha.tcp.ReplicationValve"
    25. filter=""/>
    26. "org.apache.catalina.ha.session.JvmRouteBinderValve"/>
    27. "org.apache.catalina.ha.deploy.FarmWarDeployer"
    28. tempDir="/tmp/war-temp/"
    29. deployDir="/tmp/war-deploy/"
    30. watchDir="/tmp/war-listen/"
    31. watchEnabled="false"/>
    32. "org.apache.catalina.ha.session.ClusterSessionListener"/>
    1. [root@node2 ROOT]#vim /usr/local/tomcat/webapps/ROOT/WEB-INF/web.xml
    2. [root@node2 ROOT]#sed -n 29p /usr/local/tomcat/webapps/ROOT/WEB-INF/web.xml
    3. [root@node2 ROOT]#systemctl restart tomcat
    4. [root@node2 ROOT]#systemctl status tomcat.service
    5. ● tomcat.service - Tomcat
    6. Loaded: loaded (/usr/lib/systemd/system/tomcat.service; disabled; vendor preset: disabled)
    7. Active: active (running) since Fri 2024-03-15 22:42:31 EDT; 5s ago
    8. Process: 2566 ExecStop=/usr/local/tomcat/bin/shutdown.sh (code=exited, status=0/SUCCESS)
    9. Process: 2601 ExecStart=/usr/local/tomcat/bin/startup.sh (code=exited, status=0/SUCCESS)
    10. Main PID: 2617 (catalina.sh)
    11. CGroup: /system.slice/tomcat.service
    12. ├─2617 /bin/sh /usr/local/tomcat/bin/catalina.sh start
    13. └─2618 /usr/bin/java -Djava.util.logging.config.file=/usr/local/...
    14. Mar 15 22:42:31 node2.localdomain systemd[1]: Starting Tomcat...
    15. Mar 15 22:42:31 node2.localdomain systemd[1]: Started Tomcat.
    1. [root@node3 ROOT]#vim /usr/local/tomcat/webapps/ROOT/WEB-INF/web.xml
    2. [root@node3 ROOT]#sed -n 29p /usr/local/tomcat/webapps/ROOT/WEB-INF/web.xml
    3. [root@node3 ROOT]#systemctl restart tomcat
    4. [root@node3 ROOT]#systemctl status tomcat.service
    5. ● tomcat.service - Tomcat
    6. Loaded: loaded (/usr/lib/systemd/system/tomcat.service; disabled; vendor preset: disabled)
    7. Active: active (running) since 六 2024-03-16 18:42:30 CST; 5s ago
    8. Process: 2480 ExecStop=/usr/local/tomcat/bin/shutdown.sh (code=exited, status=0/SUCCESS)
    9. Process: 2518 ExecStart=/usr/local/tomcat/bin/startup.sh (code=exited, status=0/SUCCESS)
    10. Main PID: 2533 (catalina.sh)
    11. CGroup: /system.slice/tomcat.service
    12. ├─2533 /bin/sh /usr/local/tomcat/bin/catalina.sh start
    13. └─2534 /usr/bin/java -Djava.util.logging.config.file=/usr/local/...
    14. 3月 16 18:42:30 node3.node3 systemd[1]: Starting Tomcat...
    15. 3月 16 18:42:30 node3.node3 startup.sh[2518]: Using CATALINA_BASE: /usr...t
    16. 3月 16 18:42:30 node3.node3 startup.sh[2518]: Using CATALINA_HOME: /usr...t
    17. 3月 16 18:42:30 node3.node3 startup.sh[2518]: Using CATALINA_TMPDIR: /usr...p
    18. 3月 16 18:42:30 node3.node3 startup.sh[2518]: Using JRE_HOME: /usr
    19. 3月 16 18:42:30 node3.node3 startup.sh[2518]: Using CLASSPATH: /usr...r
    20. 3月 16 18:42:30 node3.node3 systemd[1]: Started Tomcat.
    21. Hint: Some lines were ellipsized, use -l to show in full.

    五、测试

    此时后端真实服务器Tomcat调优完成,SessionID会话保持完成,客户端体验绝佳!

  • 相关阅读:
    哈希(hash)——【C++实现】
    RuoYi 若依后台管理系统存在SQL注入漏洞CVE-2023-49371
    Spring复杂对象的3中创建方法
    视听杂志视听杂志社视听编辑部2022年第11期目录
    el-checkbox复选框如何修改尺寸大小
    Python安装Jnius库报错DLL load failed:找不到模块
    【原创】Ubuntu Pro RealTime linux(Ubuntu22.04 安装PREEMPT-RT实时内核/PREEMPT-RT/ubuntu官方PREEMPT-RT)
    使用米联客FPGA开发板进行光口开发时遇到的问题总结
    收单外包机构为何会被强制取消备案
    八大排序算法(C语言版)之插入排序
  • 原文地址:https://blog.csdn.net/G_D0120/article/details/136743827