Linux学习十负载均衡带来tomcat的session不一致问题

Posted cac2020

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux学习十负载均衡带来tomcat的session不一致问题相关的知识,希望对你有一定的参考价值。

环境
  虚拟机:VMware 10
  Linux版本:CentOS-6.5-x86_64
  客户端:Xshell4
  FTP:Xftp4
  tomcat7
  jdk7

session不一致是指web服务器(tomcat等)出现的问题,所以需要针对web容器进行解决。

网络架构如下:


注意关闭11-13的防火墙:service iptables stop

一、使用内存数据库来缓存session
可以使用memcached或者redis

1、192.168.230.11安装memcached
(1)安装memcached
yum install memcached -y

(2)启动memcached
memcached -d -m 128m -p 11211 -l 192.168.230.11 -u root -P /tmp/
-d:后台启动服务
-m:缓存大小
-p:端口
-l:IP
-u:使用那个用户作为管理用户
-P:服务启动后进程文件存放目录

2、配置nginx

worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    log_format  main  \'$remote_addr - $remote_user [$time_local] "$request" \'
    access_log  logs/access.log  main;
    sendfile        on;
    keepalive_timeout  0;

    upstream tom {
        server 192.168.230.12:8080;
        server 192.168.230.13:8080;
    }
    server {
        listen       80;
        server_name  www.wjy.com;
        location / {
            root   html;
            index  index.html index.htm;
        }
        
        location /cat {
            proxy_pass http://tom/;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

 

3、192.168.230.12、192.168.230.13配置tomcat
(1)修改tomcat下的context.xml(/usr/local/software/apache-tomcat-7.0.61/conf/context.xml)
在<Context></Context> 里最后面加上下面

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:192.168.230.11:11211"
sticky="false"
lockingMode="auto"
sessionBackupAsync="false"
requestUriIgnorePattern=".*\\.(ico|png|gif|jpg|css|js)$"
sessionBackupTimeout="1000" 
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" />

 

(2)修改index.jsp(/usr/local/apache-tomcat-7.0.61/webapps/ROOT/index.jsp)
192.168.230.12:

from 192.168.230.12
<br/>
SessionId:<%=session.getid()%>

 

192.168.230.13:

from 192.168.230.13
<br/>
SessionId:<%=session.getid()%>

 

(3)上传memcached依赖jar(/usr/local/apache-tomcat-7.0.61/lib)

资源链接:

https://download.csdn.net/download/cac2020/10884650


二、tomcat所在集群节点时间必须一致
使用date "+%Y-%m-%d %H:%M:%S"来检查,时间相差很大仍然新生成session

[root@node1 sbin]# date "+%Y-%m-%d %H:%M:%S"
2018-12-29 00:46:03
[root@node1 sbin]# date -s "2018-12-28 16:49:00"
Fri Dec 28 16:49:00 CST 2018
[root@node1 sbin]# date "+%Y-%m-%d %H:%M:%S"
2018-12-28 16:49:06

 

验证:

 

参考:

memcached:
https://blog.csdn.net/qq_24829007/article/details/79393543
https://www.cnblogs.com/interdrp/p/4096466.html
https://blog.csdn.net/a857553315/article/details/80384365

 redis:

 https://blog.csdn.net/lajigao/article/details/79645057

https://blog.csdn.net/Jack__iT/article/details/80640941

https://github.com/jcoleman/tomcat-redis-session-manager

以上是关于Linux学习十负载均衡带来tomcat的session不一致问题的主要内容,如果未能解决你的问题,请参考以下文章

Linux学习10-CentOS搭建nginx负载均衡环境

[Linux]nginx tomcat做负载均衡

Nginx + Tomcat 负载均衡群集 内附源码包

linux下:nginx+tomcat实现负载均衡

Linux之部署Tomcat及其负载均衡

Linux记录-Nginx+Tomcat负载均衡配置