zoukankan      html  css  js  c++  java
  • CentOS 7 nginx+tomcat9 session处理方案之session保持

    Session保持(会话保持)是我们见到最多的名词之一,通过会话保持,负载均衡进行请求分发的时候保证每个客户端固定的访问到后端的同一台应用服务器。会话保持方案在所有的负载均衡都有对应的实现。而且这是在负载均衡这一层就可以解决Session问题

    Nginx 做负载均衡的Session保持

    Nginx : 192.168.94.11(nginx)

    node1 : 192.168.94.22(tomcat)

    node2 : 192.168.94.33(tomcat)

    关闭SElinx和防火墙

    安装nginx

    [root@nginx ~]# wget http://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.14.0-1.el7_4.ngx.x86_64.rpm
    [root@nginx ~]# yum -y install pcre-devel zlib-devel openssl-devel
    [root@nginx ~]# rpm -i nginx-1.14.0-1.el7_4.ngx.x86_64.rpm
    [root@nginx ~]# vim /etc/nginx/nginx.conf    # 修改配置文件 添加以下内容
    
        upstream tomcat {
        ip_hash;
            server 192.168.94.22:8080;
            server 192.168.94.33:8080;
                        
        }   
    
        server {
            listen 80; 
                server_name 192.168.94.11:80;                                              
                    location / { 
                       proxy_pass http://tomcat;
                       proxy_set_header X-Real-IP $remote_addr;
                                            
                    }   
    [root@nginx ~]# systemctl restart nginx

    CentOS 7 配置Tomcat  有Tomcat的安装方法

    配置tomcat

    编写测试页面

    [root@node1 ~]# vim /usr/local/tomcat/webapps/ROOT/s.jsp
    Session ID:<%= session.getId() %><BR>          # 显示session ID                                       
    SessionPort:<%= request.getServerPort() %>   # 显示端口
    <% out.println("This tomcat server 192.168.94.22");%>    # IP自己修改
    
    [root@node2 ~]# vim /usr/local/tomcat/webapps/ROOT/s.jsp
    Session ID:<%= session.getId() %><BR>                                                        
    SessionPort:<%= request.getServerPort() %>
    <% out.println("This tomcat server 192.168.94.33");%>
    [root@node1 ~]# /usr/local/tomcat/bin/startup.sh 
    Using CATALINA_BASE:   /usr/local/tomcat
    Using CATALINA_HOME:   /usr/local/tomcat
    Using CATALINA_TMPDIR: /usr/local/tomcat/temp
    Using JRE_HOME:        /usr/local/jdk10
    Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
    Tomcat started.
    [root@node2 ~]# /usr/local/tomcat/bin/startup.sh 
    Using CATALINA_BASE:   /usr/local/tomcat
    Using CATALINA_HOME:   /usr/local/tomcat
    Using CATALINA_TMPDIR: /usr/local/tomcat/temp
    Using JRE_HOME:        /usr/local/jdk10
    Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
    Tomcat started.

    测试

    浏览器访问测试 http://192.168.94.22:8080/s.jsp 刷新后 session ID 未发生变化 

     

    浏览器访问测试 http://192.168.94.33:8080/s.jsp 刷新后 session ID 未发生变化 

     

    浏览器访问测试 http://192.168.94.11/s.jsp 刷新后 session ID 未发生变化 

     

     停止node2

    [root@node2 ~]# /usr/local/tomcat/bin/shutdown.sh 
    Using CATALINA_BASE:   /usr/local/tomcat
    Using CATALINA_HOME:   /usr/local/tomcat
    Using CATALINA_TMPDIR: /usr/local/tomcat/temp
    Using JRE_HOME:        /usr/local/jdk10
    Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
    NOTE: Picked up JDK_JAVA_OPTIONS:  --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED

    访问192.168.94.11/s.jsp  分配到node1 刷新后服务器未发生变化

    会话保持的缺点:

    会话保持看似解决了Session同步的问题,但是却带来的一些其它方面的问题:

    负载不均衡了:由于使用了Session保持,很显然就无法保证负载绝对的均衡

    没有彻底解决问题:如果后端有服务器宕机,那么这台服务器的Session丢失,被分配到这台服务请求的用户还是需要重新登录

    --求知若饥 虚心若愚
  • 相关阅读:
    Django中使用Celery实现异步任务队列
    使用Pyenv + pipenv来管理python版本和虚拟环境
    Django设置DEBUG=False后静态文件无法加载
    翕的来历
    Dubbo:基本原理机制
    数据库事务特性及隔离机制再到spring事务管理
    通过rocketmq思考一下mq的设计取舍
    redis的一些特性
    redis的快速机制与数据类型
    Zookeeper选举算法原理
  • 原文地址:https://www.cnblogs.com/bigdevilking/p/9393770.html
Copyright © 2011-2022 走看看