Nginx负载均衡问题

通过负载均衡nginx,我们可以把请求分发到不同的 Tomcat 来缓解服务器的压力,但是这里存在一个问题: 当同一个用户第一次访问tomcat_8111 并且登录成功, 而第二次访问却被分配到了tomcat_8222, 这里并没有记录他的登陆状态,那么就会呈现未登录状态了,严重伤害了用户体验。

解决办法1:ip_hash一个ip对应同一个tomcat

通过ip地址标记用户,如果多次请求都是从同一个ip来的,那么就都分配到同一个tomcat.
这样就不会出现session问题了. 处理手段也很简单,如图所示在upstream最后加上ip_hash就行了。

不过这种方案并不完美,当如下几种情况发生时就有问题:
1. 大量请求来之某个局域网,那么相当于就没有负载均衡了
2. 如果tomcat_8111 挂了,那么此时nginx只能把请求交给tomcat_8222,但是这里却没有记录session,用户体验依然受影响。

upstream tomcat_8111_8222{

server 127.0.0.1:8111 backup;

server 127.0.0.1:8222 weight=2;

ip_hash;

}

解决办法2: redis+tomcat-sessoin-manager利用redis存放session

既然第一种解决办法有问题,那么就采用第二种解决办法:用Redis来存取session.
Redis是什么呢?说简单点就是个独立的Hashmap,用来存放键值对的。
这样当tomcat1需要保存session值的时候,就可以把它放在Redis上,需要取的时候,也从Redis上取。
那么考虑这个情景:
1. 用户提交账号密码的行为被分配在了tomcat8111上,登陆信息被存放在redis里。
2. 当用户第二次访问的时候,被分配到了tomcat8222上
3. 那么此时tomcat8222就会从redis去获取相关信息,一看有对应信息,那么就会呈现登陆状态。

这样就规避了解决办法一: ip_hash里会出现的两种问题了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jyyy410

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值