springboot+spring session+redis+nginx实现session共享和负载均衡

环境

centos7、 jdk1.8、nginx、redis、springboot 1.5.8.RELEASE

session共享

  1. 添加spring session和redis依赖

    <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    <dependency>
     <groupId>org.springframework.session</groupId>
     <artifactId>spring-session</artifactId>
    </dependency>
  2. application.properties配置
# session 存入 redis
spring.session.store-type=redis

# redis config
spring.redis.database=0
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=123456
spring.redis.pool.max-active=8
spring.redis.pool.max-wait=20000
spring.redis.pool.max-idle=8
spring.redis.pool.min-idle=0
spring.redis.timeout=0

此处redis密码设置为123456

  1. 测试代码

    @RequestMapping("user")
    @RestController
    public class UserController {
    
        @GetMapping("getSessionId")
        public String getSessionId(HttpServletRequest request) {
            String sessionId = request.getSession().getId();
            System.out.println(sessionId);
            return sessionId;
        }
    }

    项目完整代码下载地址:[springboot-session-redis]: https://github.com/linj6/springboot-learn/tree/master/springboot-session-redis

?

负载均衡

nginx.conf配置

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    upstream springboot-session-redis {
        server 127.0.0.1:8081;
        server 127.0.0.1:8082;
        server 127.0.0.1:8083;
    }

    server {
        listen       80;
        server_name  localhost;

        location / {
            proxy_pass http://springboot-session-redis;
            proxy_set_header Host                $host;
            # 此配置使得服务端可以获取客户端真实ip
            proxy_set_header X-Real-IP           $remote_addr;
            proxy_set_header X-Forwarded-For     $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto   $scheme;
            proxy_redirect                       off;
        }
    }
}

测试

  1. 启动redis

    systemctl start redis
  2. 启动三个应用服务

    使用maven打包成jar包后 ,在后台运行三个服务,端口分别为8081、8082、8083,日志分别输出到nohup.out、nohup2.out、nohup3.out

    nohup java -jar springboot-session-redis-0.0.1-SNAPSHOT.jar --server.port=8081 > nohup.out &
    nohup java -jar springboot-session-redis-0.0.1-SNAPSHOT.jar --server.port=8082 > nohup2.out &
    nohup java -jar springboot-session-redis-0.0.1-SNAPSHOT.jar --server.port=8083 > nohup3.out &
  3. 启动nginx
  4. 访问http://ip/user/getSessionId
    1. 页面显示sessionId的值

    ? nginx默认负载均衡策略是采用轮询,此处启动了三个服务,所以访问三次该网址,查看三个服务的日志,会发现每个服务处理了一次请求。

    如下图:

    nohup.out

    nohup2.out

    nohup3.out

    从上图可知三次输出的sessionId的值也是一样的,所以实现了session共享,也通过nginx实现了负载均衡。

  5. 查看redis存储的值

可以看到生成了三个与spring session相关的key

原文地址:https://www.cnblogs.com/zuidongfeng/p/10260897.html

时间: 2024-08-06 07:14:38

springboot+spring session+redis+nginx实现session共享和负载均衡的相关文章

Nginx + Memcached 实现Session共享的负载均衡

session共享 我们在做站点的试试,通常需要保存用户的一些基本信息,比如登录就会用到Session:当使用Nginx做负载均衡的时候,用户浏览站点的时候会被分配到不同的服务器上,此时如果登录后Session就在不同发服务器上,A记住了用户的登录状态,可是下一次用户请求被分配到B去了怎么办?不可能让用户再登陆一次.所以要实现session共享. 方法 1.ip_hash,这是Nginx的轮询方法,用户登录站点时,就会一直在这台服务器上就不存在Session的问题 优点:不需要采用任何处理: 缺

spring session+redis存储的session如何查看

**session问题:** (1)HttpSession是通过Servlet容器进行创建和管理的.在单机环境中,通过Http请求创建的Session信息是存储在Web服务器内存中的,如Tomcat.Jetty等. (2)现在很多的服务器都采用分布式集群的方式进行部署,用户在发起第一次请求时候访问了A站点,并在A站点的session中保存了登录信息,当用户第二次发起请求,通过负载均衡请求分配到B站点了,那么此时B站点能否获取用户保存的登录的信息呢?答案是不能的,因为Session是**存储在对应

Nginx的反相代理, 负载均衡

转自 http://freeloda.blog.51cto.com/2033581/1288553 大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Nginx之页面缓存 七.Nginx之URL重写 八.Nginx之读写分离 注,操作系统为 CentOS 6.4 x86_64 , Nginx 是版本是最新版的1.4.2,所以实验用到的软件请点击这里下载:http://yunpan.cn/QXIgqMmVmuZrm 一.前言 在前面的几

nginx如何做到TCP的负载均衡

TCP 的 负载均衡 这个片段描述了如何通过nginx plus进行负载均衡 在版本5中,nginx plus 能够代理和负载均衡通过TCP路径,TCP对于一些流行应用和服务是一个协议:LDAP.MYSQL.RTMP stream 模块 TCP 负载均衡被nginx的三个模块所实现,而且这些模块被嵌入在nginx plus中. 它们定义的命令是在stream配置块中: ngx_stream_core_module :定义基本的命令来激活这个TCP通信过程 ngx_stream_proxy_mod

实践NGINX的反向代理与负载均衡

实践NGINX的反向代理与负载均衡 安装nginx过程 [[email protected] opt]# yum install pcre-devel openssl-devel -y [[email protected] opt]# wget -q http://nginx.org/download/nginx-1.10.2.tar.gz [[email protected] opt]# useradd nginx -s /sbin/nologin -M [[email protected]

nginx+keepalived的高可用负载均衡集群构建

实验架构图: 实验环境 Nginx和Keepalived原理介绍 参考博客:http://467754239.blog.51cto.com/4878013/1541421 1.nginx Nginx进程基于于Master+Slave(worker)多进程模型,自身具有非常稳定的子进程管理功能.在Master进程分配模式下,Master进程永远不进行业务处理,只是进行任务分发, 从而达到Master进程的存活高可靠性,Slave(worker)进程所有的业务信号都 由主进程发出,Slave(wor

Nginx实现集群的负载均衡配置过程详解

Nginx实现集群的负载均衡配置过程详解 Nginx 的负载均衡功能,其实实际上和 nginx 的代理是同一个功能,只是把代理一台机器改为多台机器而已. Nginx 的负载均衡和 lvs 相比,nginx属于更高级的应用层,不牵扯到 ip 和内核的修改,它只是单纯地把用户的请求转发到后面的机器上.这就意味着,后端的 RS 不需要配置公网. 一.实验环境 Nginx 调度器 (public 172.16.254.200 privite 192.168.0.48)RS1只有内网IP (192.168

Nginx + Tomcat Windows下的负载均衡配置

一.为什么需要对Tomcat服务器做负载均衡?    Tomcat服务器作为一个Web服务器,其并发数在300-500之间,如果超过500的并发数会出现Tomcat不能响应新的请求的情况,严重影响网站的运行.同时如果访问量非常大的情况下,Tomcat的线程数会不断增加.因此会占据大量内存,严重时出现内存溢出的现象,这时需要重启Tomcat以释放内存,阻断了网站的运行.    所以对Tomcat做负载均衡便很有必要.目前可以和Tomcat做负载均衡的主流服务器是Apache,但是Nginx由于功能

Nginx、LVS及HAProxy负载均衡软件的优缺点详解

提升根据不同的阶段来使用不同的技术.具体的应用需求还得具体分析,如果是中小型的Web应用,比如日PV小于1000万,用Nginx就完全可以了:如果机器不少,可以用DNS轮询,LVS所耗费的机器还是比较多的:大型网站或重要的服务,且服务器比较多时,可以考虑用LVS. 一种是通过硬件来进行,常见的硬件有比较昂贵的F5和Array等商用的负载均衡器,它的优点就是有专业的维护团队来对这些服务进行维护.缺点就是花销太大,所以对于规模较小的网络服务来说暂时还没有需要使用:另外一种就是类似于Nginx/LVS