session共享问题(二)----集群中的session共享问题


问题描述:

现在一般的公司在解决高并发,高访问量,一般都会采用集群/分布式环境。但这有会出现一个问题,如何分享session。在nginx的负载均衡下,用户user访问同一个页面2次,会分配到不同的服务器上A,B,如果没有解决session共享问题,那么就会出现在A服务器上登录过,第二次访问B服务器上的那个页面时又要登录的情况。


解决的方法:

1、粘性session

上面我们讲到在集群情况下,我们在通过nginx访问同一个页面多次,可能会访问不同服务器上的同一个页面,session不同步的问题会导致用户必须在同一个页面登录两次。

粘性session就是改变nginx负载均衡的策略。下面我们将简略的讲述nginx的几种策略。

  一、nginx的upstream目前支持负载均衡方式的分配
1、RR(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
例如:
upstream tomcats {
server 10.1.1.107:88  max_fails=3 fail_timeout=3s weight=9;
server 10.1.1.132:80  max_fails=3 fail_timeout=3s weight=9;
}

2、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
例如:
upstream tomcats {
ip_hash;
server 10.1.1.107:88;
server 10.1.1.132:80;
}

3、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。

4、url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。


所以我们可以采用ip_hash的策略使得一个用户ip只能一直访问特定的某一台服务器,所以之前的那种情况也就不会发生。


优点:不需要再session分享上做处理,因为本身就是只访问一台服务器

缺点:就是容错性很差!!如果当前访问的服务器发生故障,用户被转移到第二个服务器上时,他的session信息都将失效。

使用场景发生故障对客户产生的影响较小;服务器发生故障是低概率事件。


2、session复制

原理:任何一个服务器上的session发生改变(增删改),该节点会把这个 session的所有内容序列化,然后广播给所有其它节点,不管其他服务器需不需要session,以此来保证Session同步。

优点:可容错,各个服务器间session能够实时响应。

缺点:会对网络负荷造成一定压力,如果session量大的话可能会造成网络堵塞,拖慢服务器性能。

实现方式:在tomcat,server.xml开启集群session复制功能

具体看关于tomcat集群session复制(比较好)



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值