web集群怎么共享同步session(memcache)

在做了web集群后,你肯定会首先考虑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 -m 1024 -c 3000 -u uenucom -p 12000 -P ./memcached.pid

/usr/local/bin/memcached -d -m 1024 -c 3000 -u uenucom -p 13000 -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

Session Supportenabled

Registered save handlersfiles user sqlite memcache

Registered serializer handlersphp php_binary

紧接着下面是

session.save_pathtcp://127.0.0.1:13000,tcp://127.0.0.1:12000

4,做个简单测试

a),准备文件session.php

 代码如下 复制代码

<?php

 session_start(); 

$_SESSION['username'] = “abcabc”;  echo session_id();

  ?> 

b),显示session内容文件

 代码如下 复制代码

<?php

 $mem = new Memcache; 

$mem->addServer(“127.0.0.1″,12000)or die (“Could not add server 12000″); 

$mem->addServer(“127.0.0.1″,13000)or die (“Could not add server 13000″); 

$val = $mem->get(‘qp0mrob2ovcqle3u4lbr4obsa5′);  

 //echo session_id(); 

echo $val; 

?> 

 

c),结果是username|s:6:”abcabc”;

时间: 2024-12-26 08:01:29

web集群怎么共享同步session(memcache)的相关文章

关于集群分布式如何同步session和文件资源的上传下载?

问题描述 关于集群分布式如何同步session和文件资源的上传下载? 问题如标题?最近项目上线 没事就想到这个问题?希望各位能够解决小弟的困惑 解决方案 一,利用数据库同步session 1,用一个低端电脑建个数据库专门存放web服务器的session,或者,把这个专门的数据库建在文件服务器上,用户访问web服务器时,会去这个专门的数据库check一下session的情况,以达到session同步的目的. 2,这种方法是把存放session的表和其他数据库表放在一起,如果mysql也做了集群了话

采用memcache在web集群中实现session的同步会话_php技巧

使用memcache来同步session是还是不错的,当然也可以通过redis来保存session,可以php开启并将Session存储到Redis缓存,下面是设置利用memcache在web集群中同步会话session的实现过程: 1.模拟web集群 我启动了二个memcached进程,分别模拟二台服务器 /usr/local/bin/memcached -d -m 20 -u zhangy -p 12000 -P ./memcached.pid /usr/local/bin/memcache

websphere集群能共享session,是否也支持共享application呢?如果能怎么配置?

问题描述 websphere集群能共享session,是否也支持共享application呢?如果能怎么配置? websphere集群能共享session,是否也支持共享application呢?如果能怎么配置?

redis-怎么实现spring Security实现集群间共享session???

问题描述 怎么实现spring Security实现集群间共享session??? 2C spring security中,怎么把共享的session存入到redis中去? protected void configure(HttpSecurity http) throws Exception { http .sessionManagement() .maximumSessions(32) .sessionRegistry(sessionRegistry); 这里面会话注册表sessionReg

高性能linux web集群搭建详细步骤 可达每秒百万请求

本文教程比较详细,可以说是手把手,所以如果你有这个需求而无从下手,请放点耐心阅读 如何生成每秒百万级别的 HTTP 请求? 负载生成工具(Load-Generating Tools) 在进行负责测试时要牢记一件重要的事:你能在 Linux 上建立多少个 socket 连接.这个限制是硬编码在内核里的,最典型的就是临时 W 端口的限制.(在某种程度上)你可以在 /etc/sysctl.conf 里扩展它.但是基本上,一台 Linux 机器只能同时打开大约 64,000 个 socket .因此在负

关于WEB集群中文件服务器的讨论

原文地址: http://blog.itpub.net/29806344/viewspace-1364778/ 在WEB集群中一般都要上传和删除图片.小规模的时候,图片放在本地,再通过同步方式来保持一致. 常见的文件服务器:samba+web,ftp+web,nfs+web,rsync单向同步,分布式存储  samba+web,ftp+web这2种需要改程序代码,用的不多:rsync单向同步在小环境中用:nfs+web在中型环境用的最多:大型环境,海量文件用的是分布式存储,比如hadoop等.

web集群服务的负载均衡方案选择与实现

web 集群系统,是由一群同时运行同一个web应用的服务器组成的集群系统,在外界看来,就像是一个服务器一样.为了均衡集群服务器的负载,达到优化系统性能的目的,集群服务器将众多的访问请求,分散到系统中的不同节点进行处理.从而实现了更高的有效性和稳定性,而这也正是基于Web的企业应用所必须具备的特性. 高可靠性可以看作为系统的一种冗余设定.对于一个特定的请求,如果所申请的服务器不能进行处理的话,那么其他的服务器能不能对之进行有效的处理呢?对于一个高效的系统,如果一个Web服务器失败的话,其他的服务器

was 集群时,如何处理session共享和文件共享问题

问题描述 身为菜鸟的我初始was,弄个集群不知如何处理session共享,和文件共享问题,求高手赐教,感谢! 解决方案 解决方案二:这个应该去百度,很难讲清楚.

weblogc 集群环境下 关于session的存储问题

问题描述 我的web应用时部署在weblogic上的,我的weblogic是工作在集群环境下的,数据库用的oracle,最近我的dba向我提了这样的问题要我解决:WehavedetectedalotofactivityonSANPRODdatabaseinstancesincethismorningDuetotheactivitythearchivelogshavebeenfillingupextremelyfast,8GBofarchivelogsweregeneratedaloneforth