• Session服务器之Session复制!


    全部运行在Tomcat下

    第一台主机:192.168.200.131  安装nginx

    修改hosts文件

    [root@localhost ~]# vim /etc/hosts

    192.168.200.131 nginx
    192.168.200.130 node1
    192.168.200.122 node2

     //将hosts文件发送给另外两台主机

    [root@nginx ~]# scp /etc/hosts 192.168.200.122:/etc                        

    [root@nginx ~]# scp /etc/hosts 192.168.200.130:/etc

    //关闭防火墙及安全机制

    [root@localhost ~]# iptables -F
    [root@localhost ~]# systemctl stop firewalld
    [root@localhost ~]# setenforce 0

    [root@localhost ~]# hostname nignx  
    [root@localhost ~]# bash                         //bash刷新
    [root@nignx ~]#vim /usr/local/nginx/conf/nginx.conf

    修改如下

    #gzip on; upstream tomcat_pool { //声明tomcat_pool,默认轮询 server
    192.168.200.130:8080 weight=1 max_fails=1 fail_timeout=10s;
    //server 192.168.200.130:8080(节点端口)
    //weight=1(权重)
    //max_fails=1(最大故障数)
    //fail_timeout=10s(故障超时)
    server 192.168.200.122:8080 weight=1 max_fails=1 fail_timeout=10s;
    }

    server {
         listen 80;
         server_name localhost;

        charset utf-8;

        access_log logs/host.access.log main;

    
    

    location / {
        root html;
        index index.html index.htm;
        proxy_set_header Host $http_host;          //此处要添加host头

      //如果反向代理层的nginx不重写请求头中的host字段,将会导致请求失败,报400错误

        proxy_pass http://tomcat_pool;             //做tomcat代理
    }

    
    

    [root@nginx ~]# nginx -t

    [root@nginx ~]# killall -HUP nginx

    测试:

    结论:131主机nginx做tomcat反向代理依旧可以访问tomcat页面

    轮询测试:介于122、130ip之间相互变化

    因为130、122主机都做了session.jsp服务,此时131主机也可以进入测试页面

     Session绑定测试使得在122或130任意主机之间一个保持ip不变:

    [root@nignx ~]#vim /usr/local/nginx/conf/nginx.conf

    upstream tomcat_pool { 
    ip_hash; //ip_hash表示绑定 server 192.168.200.130:8080 weight=1 max_fails=1 fail_timeout=10s;
     server 192.168.200.122:8080 weight=1 max_fails=1 fail_timeout=10s;
    }


    测试:

    结论:这种方式极不稳定一旦122的主机服务中断,那么131服务必定从120跳转到130,这样会影响线上服务

    解决方案一进行Session复制(在tomcat两台主机做nginx主机不用改变

    Session复制测试(131主机):

    可以利用IE浏览器测试,测试结果为session不变,node在变,ip也在变

    解决方案2:

    =================================================================================

    第二台主机:192.168.200.130    安装tomcat

    [root@localhost ~]# hostname node1
    [root@localhost ~]# bash
    [root@node1 ~]#

    建立session.jsp的测试

    [root@node1 ~]# vim /usr/local/tomcat8/webapps/ROOT/session.jsp

    Session ID:<%= session.getId() %><BR>
    SessionPort:<%= request.getServerPort() %>
    //第一条与第二条:开头都是直接在网页上输出
    //后面的函数都是会自动获取本机session的ID号,根据机器信息自动生成
    <% out.println("This tomcat server 192.168.200.130");%>

    启动tomcat

    [root@node1 ~]# /usr/local/tomcat8/bin/shutdown.sh 

    [root@node1~]# /usr/local/tomcat8/bin/startup.sh 

    测试:

    Session复制:

    [root@node1 ~]# /usr/local/tomcat8/bin/shutdown.sh 

    [root@node1 ~]# /usr/local/tomcat8/bin/startup.sh 

    [root@node1 ~]# netstat -anpt | grep -E "8080|4000"    //有4000端口表示复制成功,没有4000端口表示复制失败,测试失败

    Session复制测试:

    Session复制测试结果应该为session不变,node在变,ip也在变(图为教师图)

    本次实验失败

    ===============================================================================

    第三台主机:192.168.200.122    安装tomcat

    [root@localhost ~]# hostname node2
    [root@localhost ~]# bash
    [root@node2 ~]#

    建立session.jsp的测试

    [root@node2 ~]# vim /usr/local/tomcat8/webapps/ROOT/session.jsp

    Session ID:<%= session.getId() %><BR>
    SessionPort:<%= request.getServerPort() %>
    //第一条与第二条:开头都是直接在网页上输出
    //后面的函数都是会自动获取本机session的ID号,根据机器信息自动生成
    <% out.println("This tomcat server 192.168.200.122");%>

    启动tomcat

    [root@node2~]# /usr/local/tomcat8/bin/shutdown.sh 

    [root@node2 ~]# /usr/local/tomcat8/bin/startup.sh 

     测试:

    Session复制:

    [root@node2~]# /usr/local/tomcat8/bin/shutdown.sh 

    [root@node2 ~]# /usr/local/tomcat8/bin/startup.sh 

    [root@node2~]# netstat -anpt | grep -E "8080|4000"            //有4000端口表示复制成功没有4000端口表示失败

    Session复制测试结果应该为session不变,node在变,ip也在变(图为教师图)

    本次实验失败

  • 相关阅读:
    指向老域名的反链丢失问题
    oracle express介绍
    VB6:通过ADO访问Oracle存储过程返回的结果集
    Oracle学习笔记:理解oracle的编程接口oo4o的对象模型
    Oracle学习笔记:oracle的编程接口
    VB6:编写一个分析sqlserver存储过程执行语句"execute procedurename par1,par2,......."语法是否正确的函数
    惊喜!使用Regcure修复注册表错误,Oracle客户端可以使用了
    最新30佳精美的名片设计作品欣赏
    28个经过重新设计的著名博客案例
    向设计师推荐20款漂亮的免费英文字体
  • 原文地址:https://www.cnblogs.com/CMX_Shmily/p/11580984.html
Copyright © 2020-2023  润新知