本文将详细解释如何在Linux分布式环境中处理会话。文章内容质量较高,本站将与大家分享,以供参考。希望大家看完这篇文章后对相关知识有一定的了解。
什么是Linux系统
Linux是一个类似Unix的操作系统,可以自由使用和自由传播。它是一个基于POSIX的多用户、多任务、多线程、多CPU的操作系统。Linux可以运行主要的UNIX工具软件、应用程序和网络协议。
第一种:粘性session
原理:粘性会话是指将用户锁定在某个服务器,例如,当用户第一次请求时,负载均衡器将用户的请求转发给A服务器,如果负载均衡器设置了粘性会话,那么用户的每个请求都会转发给A服务器,这相当于将用户和A服务器粘在一起。这就是粘性会话机制。
优点:很简单,不需要在会话中做任何处理。
缺点:缺乏容错能力。如果当前服务器失败,用户被转移到第二个服务器,他的会话信息将无效。
适用场景:的失败对客户的影响较小;服务器的失败是一个低概率事件。
实现方式:以nginx为例,在上游模块配置ip_hash属性可以实现粘性会话。
?
一个
2
三
四
五
六
上游mycluster{
#这里添加的是上面开始的两只雄猫服务器
ip _ hash#粘性会话
服务器192.168.22.229:8080权重=1;
服务器192.168.22.230:8080权重=1;
}
第二种:服务器session复制
如果原理:任何一个服务器上的会话发生改变(添加、删除或修改),该节点将序列化该会话的所有内容,然后将其广播给所有其他节点,而不管其他服务器是否需要会话,以确保会话的同步。
优点:是容错的,服务器之间的会话可以实时响应。
缺点:会对网络负载造成一定的压力,如果会话数量多,可能会造成网络拥塞,降低服务器的性能
实现方式:
设置tomcat,server.xml启用tomcat集群功能
Address:只需填写原生ip,设置端口号,防止端口冲突。
向应用程序添加信息:通知应用程序它当前处于集群环境中,并且支持分布式
将选项可分发/添加到web.xml
第三种:session共享机制
使用分布式缓存方案,如memcached和redis,但要求memcached或redis是一个集群。
使用会话共享有两种机制,如下所示:
粘性session处理方式
原理:不同的tomcat指定访问不同的主memcached。多个memcached之间的信息是同步的,可以从主机备份到从机,并且高度可用。当用户访问时,他首先在tomcat中创建一个会话,然后复制该会话并将其放入相应的memcahed中。Memcache只起备份作用,读写都在tomcat上。当tomcat挂机时,集群定位用户对备用tomcat的访问,然后根据存储在cookie中的sessionid找到会话。如果找不到,它会转到相应的memcached会话,并在找到后将其复制到备用tomcat。
进行处理的方法">
② 非粘性session处理方式
原理:memcached做主从复制,写入session都往从memcached服务上写,读取都从主memcached读取,tomcat本身不存储session
优点:可容错,session实时响应。
实现方式:用开源的msm插件解决tomcat之间的session共享:memcached_session_manager(msm)
a. 复制相关jar包到tomcat/lib 目录下
javamemcached客户端:spymemcached.jarmsm项目相关的jar包:1.核心包,memcached-session-manager-{version}.jar2.tomcat版本对应的jar包:memcached-session-manager-tc{tomcat-version}-{version}.jar序列化工具包:可选kryo,javolution,xstream等,不设置时使用jdk默认序列化。
b. 配置context.xml ,加入处理session的manager
粘性模式配置:
非粘性配置:
第四种:session持久化到数据库
原理:就不用多说了吧,拿出一个数据库,专门用来存储session信息。保证session的持久化。
优点:服务器出现问题,session不会丢失
缺点:如果网站的访问量很大,把session存储到数据库中,会对数据库造成很大压力,还需要增加额外的开销维护数据库。
第五种terracotta实现session复制
原理:terracotta的基本原理是对于集群间共享的数据,当在一个节点发生变化的时候,terracotta只把变化的部分发送给terracotta服务器,然后由服务器把它转发给真正需要这个数据的节点。可以看成是对第二种方案的优化。
优点:这样对网络的压力就非常小,各个节点也不必浪费cpu时间和内存进行大量的序列化操作。把这种集群间数据共享的机制应用在session同步上,既避免了对数据库的依赖,又能达到负载均衡和灾难恢复的效果。
原文链接:http://blog.csdn.net/u010028869/article/details/50773174ref=myread
关于在Linux分布式环境中对session进行处理的方法就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。