一、结合 Redis 进行 Session 共享配置
1,Redis 安装
首先我们需要一个 Redis服务来作为 Session服务器,Redis的安装可以参考我之前的文章:
2,项目配置
(1)编辑 pom.xml 文件,添加 Redis和 Session依赖:
除了 Redis依赖之外,这里还要提供spring-session-data-redis 依赖,Spring Session 可以做到透明化地替换掉应用的 Session容器。
org.springframework.boot
spring-boot-starter-data-redis
io.lettuce
lettuce-core
redis.clients
jedis
org.springframework.session
spring-session-data-redis
(2)接着在 application.properties中配置 Redis连接信息:
# 基本连接信息配置spring.redis.database=0spring.redis.host=192.168.60.133spring.redis.port=6379spring.redis.password=123# 连接池信息配置spring.redis.jedis.pool.max-active=8spring.redis.jedis.pool.max-idle=8spring.redis.jedis.pool.max-wait=-1msspring.redis.jedis.pool.min-idle=0
3,创建测试接口 创建一个 Contoller用来执行测试操作,里面提供了两个方法:一个 save接口用来向 Session中存储数据,还有一个 get接口用来从 Session中获取数据。
为方便演示,这里注入了项目启动的端口号server.port,主要是为了区分到底是哪个服务器提供的服务。
虽然这里还是操作的 HttpSession,但是实际上 HttpSession容器已经被透明替换,真正的 Session此时存储在 Redis服务器上。
@RestController
public class HelloController {
@Value("${server.port}")
String port;
@GetMapping("/save/{name}")
public String saveName(@PathVariable("name")String name, HttpSession session) {
session.setAttribute("name", name);
return port;
}
@GetMapping("/get")
public String getName(HttpSession session) {
Object s =session.getAttribute("name");
return port + ":" + session.getAttribute("name").toString();
}
}
4,运行项目
(1)最后将项目打成 jar包上传到 CentOS上,然后执行如下两条命令启动2 个项目(使用不同端口):
nohup表示不挂断程序运行,即当终端窗口关闭后,程序依然在后台运行,最后的& 表示让程序在后台运行。
nohup java -jar demo-0.0.1-SNAPSHOT.jar --server.port=8080 &
nohup java -jar demo-0.0.1-SNAPSHOT.jar --server.port=8081 &
(2)如果上面执行后可能会显示“nohup: 忽略输入并把输出追加到"nohup.out"”,我们直接回车即可。
5,开始测试
(1)首先我们访问 8080这个项目的 /save 接口存放一个 session:
(2)接着访问 8081项目的 /get 接口获取 session,可以发现虽然它们是不同的项目,但是 session是共享的。
二、使用 Nginx 实现负载均衡
1,安装运行
(1)首先下载 Nginx源码并解压:
wget https://nginx.org/download/nginx-1.17.0.tar.gz
tar -zxvf nginx-1.17.0.tar.gz
(2)然后进入解压目录中执行编译安装:
cd nginx-1.17.0
./configure
make
make install
(3)安装成功后,找到 Nginx安装目录,执行 sbin目录下的 nginx文件启动 nginx,命令如下:
/usr/local/nginx/sbin/nginx
(4)启动后默认端口是 80,我们可以使用浏览器直接访问:
2,修改配置文件
(1)接下来进入 Nginx安装目录修改配置文件:
vi /usr/local/nginx/conf/nginx.conf
(2)对 nginx.conf 文件进行编辑,编辑内容如下:
修改说明:
首先配置上游服务器,即两个 real server,两个 real server 的权重都是1,意味着请求将平均分配到两个real server上。
然后在 server中配置拦截规则,将拦截到的请求转发到定义好的real server 上。
upstream hangge.com {
server 192.168.60.133:8080 weight=1;
server 192.168.60.133:8081 weight=1;
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://hangge.com;
proxy_redirect default;
}
(3)配置完成后,执行如下命令重启 Nginx:
/usr/local/nginx/sbin/nginx -s reload
3,请求分发测试
(1)首先调用/save接口存储数据。下图可以看到虽然调用的端口是 80,但实际请求被 Nginx服务器转发到 8081这个服务上:
(2)接着调用/get接口获取数据,可以看到这次请求被分发到 8080这个服务上。同时也可以发现,它们的 session是共享的。