SpringBoot2.x+Redis+nginx实现session共享和负载均衡
程序员文章站
2022-07-21 18:07:08
SpringBoot2.x+Redis+nginx实现session共享和负载均衡 ......
1.创建springboot项目添加依赖
<dependency> <groupid>org.springframework.session</groupid> <artifactid>spring-session-data-redis</artifactid> </dependency> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-data-redis</artifactid> </dependency>
2.完整pomxml文件
<?xml version="1.0" encoding="utf-8"?> <project xmlns="http://maven.apache.org/pom/4.0.0" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://maven.apache.org/pom/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelversion>4.0.0</modelversion> <parent> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-parent</artifactid> <version>2.1.7.release</version> <relativepath/> <!-- lookup parent from repository --> </parent> <groupid>com.sunny.spring.boot</groupid> <artifactid>springboot-demo</artifactid> <version>0.0.1-snapshot</version> <name>springboot-demo</name> <description>demo project for spring boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter</artifactid> </dependency> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-web</artifactid> </dependency> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-test</artifactid> <scope>test</scope> </dependency> <!--session相关--> <dependency> <groupid>org.springframework.session</groupid> <artifactid>spring-session-data-redis</artifactid> </dependency> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-data-redis</artifactid> </dependency> </dependencies> <build> <plugins> <plugin> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-maven-plugin</artifactid> </plugin> </plugins> </build> </project>
3.application.yml配置
redis连接信息需要修改为自己的
spring: session: store-type: redis #session的存储方式 redis: host: 192.168.31.170 port: 6379 password: admin@1009
4.创建controller获取session信息
package com.sunny.spring.boot.controller; import org.slf4j.logger; import org.slf4j.loggerfactory; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.bind.annotation.restcontroller; import javax.servlet.http.httpservletrequest; /** * @classname: sessioncontroller * @description: session操作 * @author: sunt * @date: 2019/8/26 14:53 * @version 1.0 **/ @requestmapping("/session") @restcontroller public class sessioncontroller { /** * 获取session信息 * @param request * @return */ @requestmapping("/getseesion") public string getseesion(httpservletrequest request) { string sessionid = request.getsession().getid(); int serverport = request.getserverport(); system.out.println("当前请求session:" + sessionid); return "请求服务器端口号:" + serverport + ",当前服务器的seionid:" + sessionid; } }
5.启动redis服务
6.启动项目并访问
启动如果报如下错误信息,需要检查redis连接信息是否配置准确
本地访问:http://127.0.0.1:8080/session/getseesion 可以获取到sessionid说明项目可以正常启动和访问,接下来需要配置nginx部署多个应用程序实现负载均衡
7.nginx负载均衡配置
编辑nginx.conf配置文件,需要做如下配置即可
- 在http节点配置所需负载的应用地址
#配置负载地址 upstream session-redis { server 127.0.0.1:18081 weight=1; #weight是权重的意思,值越大分配访问的概率越大 server 127.0.0.1:18082 weight=3; server 127.0.0.1:18083 weight=2; }
- 在server节点下的location配置访问地址
proxy_pass http://session-redis;
注意:session-redis必须要与上一步upstream后面的名称保持一致,这个名称无要求自己随意指定
- 校验nginx配置文件是否准确并重新加载nginx配置信息
./sbin/nginx -t ./sbin/nginx -s reload
8.部署多个应用程序
按照nginx负载均衡配置,同一个应用程序以18081,18082,18083端口部署三份,并为各自端口分别指定输出日志到server1.log、server2.log、server3.log
nohup java -jar springboot-demo-0.0.1-snapshot.jar --server.port=18081 > server1.log &
nohup java -jar springboot-demo-0.0.1-snapshot.jar --server.port=18082 > server2.log &
nohup java -jar springboot-demo-0.0.1-snapshot.jar --server.port=18083 > server3.log &
9.测试
浏览器访问默认nginx的80端口,如果可以正常转发到各个应用程序并且访问到每个应用程序的session会话一致说明配置负载和session共享搭建成功
这里本来打算录制个gif操作图,但是录制了好几次都太大只能保存一部分,有好的gif录制麻烦评论区推荐一波,这里就截图展示
通过浏览器访问获取session请求:http://192.168.31.170/session/getseesion不断刷新,可以看到sever*.log随机输出日志,但是访问到serve1的频率最低(1次),说明我们配置的权重也生效
页面访问展示
日志文件截图展示
10.查看redis缓存session信息
上一篇: linux总结之find搜索文件(times 3)
下一篇: 嘴巴上火起泡怎么办,你有这些常识吗
推荐阅读
-
PHP实现负载均衡下的session共用功能
-
详解利用nginx和docker实现一个简易的负载均衡
-
PHP简单实现HTTP和HTTPS跨域共享session解决办法
-
Nginx与Tomcat实现动静态分离和负载均衡
-
nginx+tomcat实现负载均衡,使用redis session共享
-
Nginx+Tomcat8+Memcached实现负载均衡及session共享
-
Apache实现Web Server负载均衡详解(不考虑Session版)
-
nginx实现负载均衡和动静分离
-
lvs+keepalive实现双主模式(采用DR),同时实现TCP和UDP检测实现非web端的负载均衡,同时实现跨网段的通讯
-
PHP通过session id 实现session共享和登录验证的代码