zoukankan      html  css  js  c++  java
  • Session解决方案

    环境描述:

    IP地址             主机名              软件包列表

    192.168.200.111      nginx             nginx

    192.168.200.112      node1            JDKTomcat

    192.168.200.113      node2            JDKTomcat

    安装前准备配置

    关闭防火墙,linux安全机制

    配置所有机器:

    192.168.200.111 nginx
    192.168.200.112 node1
    192.168.200.113 node2

    Nginx 服务器配置:

    配置主机名:

    [root@localhost ~]#  hostname  nginx

    [root@localhost ~]#  bash

    修改主配置文件

    添加

    upstream tomcat_pool {
    server 192.168.200.112:8080 weight=1 max_fails=1 fail_timeout=10s;
    server 192.168.200.113:8080 weight=1 max_fails=1 fail_timeout=10s;
    }

    location / {
    root html;
    index index.html index.htm;
    proxy_pass http://tomcat_pool;
    proxy_set_header Host $http_host;
    }

    Tomcat一服务器配置

    hostname   node1

    bash

    Tomcat二服务器配置

    hostname  node2

    bash

    结束

    建立session.jsp 的测试页面

    tomcat1服务器

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

    Session ID:<%= session.getId()%><BR>
    SessionPort:<%=request.getServerPort()%>
    <%out.println("This tomcat server 192.168.200.112");%>

    tomcat2服务器之修改IP地址 113

    重新启动Tomcat

    测试

     

    解决方案一:Session绑定

     到浏览器访问Sessoin ID改变IP地址不改变即成功

    解决方案二:Session复制

    去掉nginx 原来的  IP_HASH

    修改Tomcat配置文件

    [root@node1 ~]# vim /usr/local/tomcat8/conf/server.xml

     134行添加以上内容,140行去掉注释即可

    [root@node1 ~]# vim /usr/local/tomcat8/webapps/ROOT/WEB-INF/web.xml

     最后一行添加上面这个代码

    重启TOMCAT服务即可

    查看

    [root@node2 ~]# netstat -lnpt |grep -E "8080|4000"
    tcp6 0 0 :::8080 :::* LISTEN 9008/java
    tcp6 0 0 192.168.200.113:4000 :::* LISTEN 9008/java

    出现4000端口和8080端口就成功

    访问192.168.200.111/session.jsp出现两种情况

     

     Session  ID不变 IP地址改变和node改变 代表成功

    (PS如果服务起不来输入  添加组播地址  route add -net 224.0.0.0  netmask 240.0.0.0 dev ens32 {注这个ens32是你的网卡名称可以改变})

    方法二。用TOMCAT官方代码,方法一中改主配置文件的其中一步,去掉注释其实是野路子,真正的方法是在那个注释下面添加官方代码

    解决方案三:Session服务器之Memcached

    回复到最开始的状态进行配置!!!!

    把这两台Tomcat 即当成TOMCAT 服务器,又当成Memcached服务器 (懒省事,现实中不是这样)

    两台机器同样配置

    [root@node1 ~]# yum -y install libevent memcached

    [root@node1 ~]# memcached -u root -m 512M -n 10 -f 2 -d -vvv -c 512

    -h        #查看帮助信息

    -p         #指定memcached 监听的端口号默认11211

    -l        #memcached服务器的ip地址

    -u      #memcached 程序运行时使用的用户身份必须是root用户

    -m      #指定使用本机的多少物理内存数据默认64M

    -c       #memcached服务的最大链接数

    -vvv   #显示详细信息

    -n       #chunk  size  的最小空间是多少单位字节

    -f          #chunk  size 大小增长的倍数默认1.25倍

    -d       #在后台启动

    [root@node1 ~]# netstat -anpt |grep 11211 (他的端口是11211)

    测试[root@node1 ~]# yum -y install telnet

    [root@node1 ~]# telnet 192.168.200.112 11211

    set username  0 0 8   (写入)

    zhangsan        (用户名)

    get username    (显示用户名)

    >30 sending key username
    >30 END
    30: going from conn_parse_cmd to conn_mwrite
    30: going from conn_mwrite to conn_new_cmd
    30: going from conn_new_cmd to conn_waiting
    30: going from conn_waiting to conn_read
    VALUE username 0 8
    zhangsan
    END

    quit   (退出)

    让Tomcat  通过msm 连接到Memcached

     由于这个memcached版本低,只支持TOMCAT7 所以 安装TOMCAT7来实验

    [root@node1 ~]# mkdir session

    [root@node1 ~]# cd session/

    上传所需要的jar包

     [root@node1 session]# cp *.jar /usr/local/tomcat7/lib/

    [root@node1 ~]# vim /usr/local/tomcat7/conf/context.xml 

     最后一行添加这四段

    <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
    memcachedNodes="memA:192.168.200.112:11211 memB:192.168.200.113:11211"
    requestUrilgnorePattern=".*(ico|png|gif|jpg|css|js)$"
    transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"/>

    两个服务器都填一样的

    重启服务

    查看有没有11211端口

    测试

     

    root@node2 ~]# killall -9 memcached 关掉113的memcached在测试

     成功

    解决方案四:Session服务器之Redis

     回复到初始状态

    随便找一个tomcat来做

    [root@node1 ~]# tar xf redis-3.2.5.tar.gz -C /usr/src/
    [root@node1 ~]# cd /usr/src/redis-3.2.5/
    [root@node1 redis-3.2.5]# make

    如果报TCL错误 发现少了tcl报错,则安装tcl

    wget  http://downloads.sourceforge.net/tcl/tcl8.5.9-src.tar.gz

    cd /tcl8.5.9-src/unix

    ./configure

    make &&make install

    结束

    [root@node1 redis-3.2.5]# mkdir -p /usr/local/redis/{bin,etc,var}
    [root@node1 redis-3.2.5]# cd src/

    [root@node1 src]# cp redis-benchmark redis-check-aof redis-cli redis-server  redis-check-rdb  /usr/local/redis/bin/

    [root@node1 src]# cp ../redis.conf /usr/local/redis/etc
    [root@node1 src]# vim /usr/local/redis/etc/redis.conf

    61  bind 0.0.0.0

    128    daemonize yes 

    [root@node1 redis-3.2.5]# /usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf  #开启服务

    想要关闭服务killall -9 redis-server

    [root@node1 redis-3.2.5]# netstat -anpt |grep redis
    tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 36452/redis-server

    ###查看6379端口 是否开启

    以下为TOMcat一和二要做的事

    mkdir redis-session

    把物理机的redis包移到该目录下

    然后cp *.jar /usr/local/tomcat7/lib/

    [root@node1 ~]# vim /usr/local/tomcat7/conf/context.xml

    <Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve"/>
    <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
    host="192.168.200.112"
    port="6379"
    database="0"
    maxInactiveInterval="60"/>

    就算是tomcat2 也用112

    重启服务

    测试

     

     成功

  • 相关阅读:
    10-SAP PI开发手册-ERP发布服务供外围系统调用(RFC类型)
    出口增强:已知SMOD查CMOD
    SAP开发系统中开发和配置客户端请求号变更
    ABAP接口之Http发送json报文
    ABAP 常见系统表
    .net程序员转战android第三篇---登录模块之静态登录
    .net程序员转战android第二篇---牛刀小试
    .net程序员转战android第一篇---环境部署
    将一个字符串转变成2元素的数组
    字节小程序客服推送消息
  • 原文地址:https://www.cnblogs.com/maoyanqing/p/11581027.html
Copyright © 2011-2022 走看看