为什么负载均衡后要共享session
上一节提到了负载均衡,可以通过nginx将请求分发到不同的tomcat上,但是负载均衡后就会存在一个问题,如果用户第一次访问的是服务器1,但是第二次访问的时候被分配给服务器2,那么就显示他没有登录,用户体验就会很差。
方法一:ip_hash
ip_hash即就是通过标记IP地址,如果请求来自同一ip就会分发到同一个服务器上。但是该方案由两个弊端:
- 如果大量的请求来自同一个局域网,那么负载均衡就失去意义了。
- 如果其中的一个服务器宕机了,那么只能分配到另一个服务器了,此时还会出现上述的问题。
 实现如下:1 
 2
 3
 4
 5upstream tomcat_8111_82222{ 
 server 127.0.0.1:8111 weight=2;
 server 127.0.0.1:8222 weight=2;
 ip hash;
 }
方法二:redis+tomcat-sessoin-manager
第二种方案就是使用redis来存取session实现session共享。
步骤如下:
- 启动自己的本地的redis服务。
- 下载tomcat读取redis需要的jar包并进行配置。
 需要用到jar包:jedis-2.5.2.jar, 
 commons-pool2-2.0.jar,
 tomcat-redis-session-manager1.2.jar
将下载好的jar包放到tomcat的lib目录。
然后修改tomcat的context.xml文件。1
2
3
4
5
6<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />  
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"  
 host="127.0.0.1"  
 port="6379"  
 database="0"  
 maxInactiveInterval="60" /> 


