前面讲了如何配置Windows Server 2003网络负载平衡系统,那么在web架构中配置好Server群集后,我们肯定会考虑session共享和同步的问题。试想下,同一个IP访问负载平衡系统中的同一个网页会被分配到不同的服务器上,而如果session不同步,那么对于同一个登录用户,就会出现一会是登录状态一会又不是登录状态的问题。
下面就这个问题给出了三种解决思路,供大家参考:
一、利用数据库同步session
在做多服务器session同步时我没有用这种方法,如果非要用这种方法的话,我想过二种方法:
1、用一个低端电脑建个数据库专门存放web服务器的session,或者,把这个专门的数据库建在文件服务器上,用户访问web服务器时,会去这个专门的数据库check一下session的情况,以达到session同步的目的。
2、这种方法是把存放session的表和其他数据库表放在一起,如果mysql也做了集群了话,每个mysql节点都要有这张表,并且这张session表的数据表要实时同步。
说明:用数据库来同步session,会加大数据库的负担,数据库本来就是容易产生瓶颈的地方,如果把session还放到数据库里面,无疑是雪上加霜。上面的二种方法,第一点方法较好,把放session的表独立开来,减轻了真正数据库的负担
二、利用cookie同步session
session是文件的形势存放在服务器端的,cookie是文件的形势存在客户端的,怎么实现同步呢?方法很简单,就是把用户访问页面产生的 session放到cookie里面,就是以cookie为中转站。你访问web服务器A,产生了session把它放到cookie里面了,你访问被分配到web服务器B,这个时候,web服务器B先判断服务器有没有这个session,如果没有,在去看看客户端的cookie里面有没有这个 session,如果也没有,说明session真的不存,如果cookie里面有,就把cookie里面的sessoin同步到web服务器B,这样就可以实现session的同步了。
说明:这种方法实现起来简单,方便,也不会加大数据库的负担,但是如果客户端把cookie禁掉了的话,那么session就无从同步了,这样会给网站带来损失;cookie的安全性不高,虽然它已经加了密,但是还是可以伪造的。
三、利用memcache同步session
memcache可以做分布式,如果没有这功能,他也不能用来做session同步。他可以把web服务器中的内存组合起来,成为一个”内存池”,不管是哪个服务器产生的sessoin都可以放到这个”内存池”中,其他的都可以使用。
优点:以这种方式来同步session,不会加大数据库的负担,并且安全性比用cookie大大的提高,把session放到内存里面,比从文件中读取要快很多。
缺点:memcache把内存分成很多种规格的存储块,有块就有大小,这种方式也就决定了,memcache不能完全利用内存,会产生内存碎片,如果存储块不足,还会产生内存溢出。
四、总结
上面三种方法都是可行的
第一种方法,最影响系统速度的那种,不推荐使用;
第二种方法,效果不错,不过安全隐患一样的存在;
第三种方法,个人觉得第三种方法是最好的,推荐大家使用。
五、web集群时利用memcache来同步session
觉得用memcache来同步session是最好的,下面是我的设置过程
1、模拟web集群
我启动了二个memcached进程,分别模拟二台服务器
/usr/local/bin/memcached-d-m1024-c3000-uuenucom-p12000-P./memcached.pid
/usr/local/bin/memcached-d-m1024-c3000-uuenucom-p13000-P./mem.pid
2、修改php的配置
vi/usr/local/php/lib/php.ini
session.save_handler=“memcache”
memcache.hash_strategy=“consistent”
session.save_path=“tcp://127.0.0.1:13000?weight=10,tcp://127.0.0.1:12000″
说明:第一行,session的储存方式是memcache;第二行,memcache的hash算法是consistent;第三行,session储存的位置;
3、重启apache
查看phpinfo
session
SessionSupportenabled
Registeredsavehandlersfilesusersqlitememcache
Registeredserializerhandlersphpphp_binary
紧接着下面是
session.save_pathtcp://127.0.0.1:13000,tcp://127.0.0.1:12000
4、做个简单测试
a)准备文件session.php
PHP代码
<?php
session_start();
$_SESSION['username']=“abcabc”;echosession_id();
?>
b)显示session内容文件
PHP代码
<?php
$mem=newMemcache;
$mem->addServer(“127.0.0.1″,12000)ordie(“Couldnotaddserver12000″);
$mem->addServer(“127.0.0.1″,13000)ordie(“Couldnotaddserver13000″);
$val=$mem->get(‘qp0mrob2ovcqle3u4lbr4obsa5′);
//echosession_id();
echo$val;
?>
c)结果是username|s:6:”abcabc”;
转载:
http://blog.itpub.net/27042095/viewspace-1218269/
分享到:
相关推荐
"PHP实现多服务器session共享之memcache共享"的主题着重于如何在多台服务器之间有效地存储和同步用户的session数据,以确保用户在不同服务器间的会话状态能够保持一致。本文将深入探讨这一主题,并围绕相关知识点...
通过使用memcache作为session的中央存储,可以在Tomcat8集群中实现用户状态的无缝切换,提升应用的稳定性和用户体验。正确配置和使用相关jar包,结合适当的优化策略,可以进一步提高系统的整体性能。
标题中的“tomcat7 通过memcache 实现 session共享依赖包”指的是在Tomcat7服务器中,使用Memcache作为缓存系统来实现跨应用或跨服务器的session共享。这是一个技术解决方案,通常在分布式环境中,当有多个Tomcat...
Java开发中的Memcached原理及实现主要涉及分布式缓存系统、内存管理和网络通信等多个技术领域。Memcached是一款高性能、分布式内存对象缓存系统,用于减轻数据库负载,提高网站或应用程序的响应速度。在Java环境中,...
本篇文章将围绕"Java Memcache使用例子"这一主题,详细介绍如何在Java中使用Memcached。 首先,确保您已经在本地正确安装了Memcached。通常,Memcached可以在Linux、macOS和Windows等操作系统上运行。你可以通过...
在Java Web开发中,使用Memcache进行session共享是一个常见的优化策略,尤其是在多服务器环境中,可以确保用户在不同服务器间切换时session数据的一致性。 **Memcache与Session共享的概念:** 1. **Memcache**:它...
描述中提到,“用于tomcat6 使用memcache 实现session共享的jar包”,这表明这些jar文件是为Tomcat6设计的插件或库,目的是通过Memcache这个内存缓存系统来存储和管理Session数据。Memcache是一个高性能、分布式的...
标题中的“session共享之memcache Redis”指的是在Web开发中如何使用memcache和Redis来实现会话(session)数据的跨服务器共享。会话管理是Web应用中的关键部分,它允许用户在不同页面间保持状态,例如登录信息、...
tomcat kryo memcache session序列化 msm-memcached-session-manager-1.8.2
虽然memcache提供了一种简单的方法来处理session同步,但在大型系统中,你可能还需要考虑其他解决方案,比如使用更强大的分布式存储系统(如Redis)或采用基于token的身份验证机制,以应对更大的负载和复杂的需求。
接下来是Tomcat6,这是一个广泛使用的Java Servlet容器,用于运行Java Web应用程序。在集群环境中,每个Tomcat实例都是一个独立的节点,各自处理一部分请求。然而,问题在于,当用户在集群中的不同节点之间跳转时,...
本文主要介绍使用Memcache实现Web集群中session同步的方法。 首先,Memcache是一个高性能的分布式内存对象缓存系统,常用于减少数据库负载,提高访问速度,它非常适合用来存储session数据。在Web集群中使用Memcache...
通过memcache实现tomcat7的session共享,目前生产环境用的不多了,但自己某个小需求用到,版本冲突好几次,分享给大家,这3个包复制到tomcat的 lib目录下 还有两个包需要 maven引入自己的项目中 <!-- memcache ...
使用memcache存储session数据时,注意数据的加密和安全传输。虽然memcache本身不提供加密,但可以在应用程序层进行数据加密,防止敏感数据泄露。 6. **性能监控和优化**: 在实际运行中,需要定期检查memcache...
为了解决这个问题,我们可以利用memcache(或其升级版memcached)来实现session的存储和共享,从而达到session跨服务器跨域的目的。本文将详细介绍如何基于memcache实现PHP的session方法重写。 首先,memcache是一...
5. **连接Memcache**:使用Java客户端连接到Memcache服务器,需要指定服务器的IP地址和端口号。例如,使用spymemcached,可以创建一个MemcachedClient实例: ```java MemcachedClient client = new Memcached...
标题 "Memcache Session Manager Tomcat8.5.6" 指的是在Tomcat 8.5.6版本中使用Memcache作为会话管理器的一种配置。这种配置旨在提高Web应用在集群环境下的性能和可扩展性,通过将用户的会话数据存储在分布式缓存...
【Memcache原理及实现】 Memcache,全称Memcached,是一种高性能的分布式内存对象缓存系统,主要用于减轻数据库的负载。它将数据存储在内存中,以键值对的形式提供快速访问,尤其适用于高并发场景。Memcache最初由...
同时,“附带两个测试的例子”表明提供了验证安装和功能的示例文件,一个是连接测试,用于检查 PHP 脚本是否能成功连接到 memcache 服务器;另一个是功能测试,用于检验 memcache 扩展的各种操作,如添加、获取、...