nginx+tomcat集群(六):Tomcat集群之间的session共享

前面我们实现了利用Nginx+Tomcat完成负载均衡的基本配置,但是这里有个问题,无法解决两台服务器之间的session共享问题。

如何解决这个问题,网上有很多资料可以参考:

  • 利用Nginx自带的ip_hash,根据用户ip自动分配到对应的服务器,保证会话不丢失。

优点:最简单,不用任何变动,只要改变下nginx.conf 的配置即可实现。

缺点:在重启服务后,等于将后台变成单例,那部分用户的会话还是会丢失,不能实现高可用;

           如果用户ip比较集中,访问也会集中到一台服务器,那么负载均衡就失去意义。

  • 利用Redis、memcached等缓存数据库实现会话的缓存

优点:性能高,可以实现高并发,大数据的系统支持;

           水平扩展较容易,性能也不会降低。

缺点:引入第三方模块,增加架构复杂性,甚至需要修改源代码。

  • 利用Tomcat集群自带的session共享模块。

优点:配置简单,不需要引入第三方模块,不用调整现有架构和代码。

缺点:不适合大规模集群架构,水平扩展存在性能瓶颈。

考虑到当前业务特点,业务量较小,我决定还是使用第三种方案(建议各位做好最后的压测)。


接下来就是配置,这里主要修改tomcat的server.xml和项目的web.xml文件。

一、修改tomcat1的server.xml

编辑文件找到 这个位置,在下面加入这段话,分别复制到tomcat1和tomcat2的server.xml里:这里要针对不同tomcat版本选择不同的配置文件。官网地址



	
	
		

		
		
		
			
		
		
		
	
	
	
	
	

二、接下来我们再配置web.xml

直接在我们的项目文件中的web.xml里添加这个标签,这是因为tomcat集群必须要要带上这个标签,否则不会生效。

nginx+tomcat集群(六):Tomcat集群之间的session共享_第1张图片

上面这个web.xml是tomcat自带的ROOT项目里的web.xml配置。然后我们可以访问地址验证下了:

验证方式:先在index.jsp加入下述代码

 <%=  request.getSession().getId()  %>
 

8081

nginx+tomcat集群(六):Tomcat集群之间的session共享_第2张图片

然后我们访问地址验证sessionId是否变化,没变化则是生效。

nginx+tomcat集群(六):Tomcat集群之间的session共享_第3张图片

 


欢迎各位提出问题,互相探讨,共同进步。

你可能感兴趣的:(nginx+tomcat集群(六):Tomcat集群之间的session共享)