web集群时session同步的3种方法


在做了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不能完全利用内存,会产生内存碎片,如果存储块不足,还会产生内存溢出。

四,总结

上面三种方法都是可行的

第一种方法,最影响系统速度的那种,不推荐使用;

第二种方法,效果不错,不过安全隐患一样的存在;

第三种方法,个人觉得第三种方法是最好的,推荐大家使用

五,  利用memcache来同步session


1,模拟web集群

我启动了二个memcached进程,分别模拟二台服务器

/usr/local/bin/memcached -d -m 20 -u zhangy -p 12000 -P ./memcached.pid
/usr/local/bin/memcached -d -m 20 -u zhangy -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 Support enabled
Registered save handlers files user sqlite memcache
Registered serializer handlers php php_binary

紧接着下面是

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

4,做个简单测试

a),准备文件session.php

1 <?php  2 session_start();  3 $_SESSION['username'] = "abcabc";  4 echo session_id();  5 ?>  

b),显示session内容文件

1 <?php  2 $mem = new Memcache;  3 $mem->addServer("127.0.0.1",12000)or die ("Could not add server 12000");  4 $mem->addServer("127.0.0.1",13000)or die ("Could not add server 13000");  5 $val = $mem->get('qp0mrob2ovcqle3u4lbr4obsa5');    //echo session_id();  6 echo $val;  7 ?>  

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

5,关于memcache的api

网上有很多关于memcache的api,你也可以自己写一个,php.net里面memcache的方法说的很清楚,并且例子很多,做起来很快。我是把thinkphp里面的有关于cache的类库拿出来,整合到自己的代码中。这个类库中不光包括memcahce,还有其他的一些cache。网上有关memcache的api思想差不多,大同小异,思想差不多,我觉得都是拿过来,山寨一下就是个新的。自己去找一下吧。

原作者:海底苍鹰
原地址:http://blog.51yip.com/server/922.html

转载于:https://www.cnblogs.com/lullabyus/archive/2012/03/12/2392330.html

[转载]web集群时利用memcache来同步session相关推荐

  1. web集群时session同步的3种方法

    web集群时session同步的3种方法 在做了web集群后,你肯定会首先考虑session同步问题,因为通过负载均衡后,同一个IP访问同一个页面会被分配到不同的服务器上,如果session不同步的话 ...

  2. Apache shiro集群实现 (六)分布式集群系统下的高可用session解决方案---Session共享

    Apache shiro集群实现 (一) shiro入门介绍 Apache shiro集群实现 (二) shiro 的INI配置 Apache shiro集群实现 (三)shiro身份认证(Shiro ...

  3. vSphere Web Client 添加主机进VSAN集群时“SAN 主机移至目标群集: vSAN 群集的 UUID 不匹配”报错

    vSphere Web Client 添加主机进VSAN集群时,报"无法将 vSAN 主机移至目标群集: vSAN 群集的 UUID 不匹配 (主机: 5223a6c9-cf94-f978- ...

  4. WEB集群与各种负载均衡简介 (资源)

    2019独角兽企业重金招聘Python工程师标准>>>                                负载均衡构架图      集群(Cluster):是一组独立的计 ...

  5. Nginx+Keepalived+Tomcat之动静分离的web集群

                 为小公司提供大概一天持续在100万/日之间访问的高性能.高可用.高并发访问及动静分离的web集群方案 Nginx+Keepalived            高可用.反向代理 ...

  6. RHCS+Conga+GFS+cLVM共享存储的高可用性web集群

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://sohudrgon.blog.51cto.com/3088108/1599984 ...

  7. 跟老男孩学Linux运维:Web集群实战(运维人员必备书籍)

    号外,号外! 1.<跟老男孩学习Linux运维:核心命令案例精讲> 紧张编写中,已过半. 2.<老男孩的MySQL私房菜>即将出版, 紧张编写中,已过2/3. 3.<跟老 ...

  8. corosync+pacemaker+crmsh的高可用web集群的实现

    网络规划: node1:eth0:172.16.31.10/16 node2: eth0: 172.16.31.11/16 nfs:   eth0: 172.16.31.12/15 注: nfs在提供 ...

  9. SaltStck 搭建Web集群运用示例 (一)

    saltstack是一个非常强大的管理工具,使用saltstack会做到标准化的管理,下面就以一个简单的示例来更加具体的了解一下saltstack的功能特性. 使用saltstack来搭建一个简单的w ...

最新文章

  1. 使用smack对tigase进行压力测试
  2. python找与7相关的数_Python3.7 列表中有关增删改查的语句和函数
  3. php cannot load service mmap.,php swoole 安装失败
  4. php mysql jquery ajax 查询数据库三级联动
  5. jq获取input选取的文件名_tushare获取交易数据并可视化分析
  6. 采用递归求第n位数【C#】
  7. Qt|C/C++植物大战僵尸修改器(用户版)
  8. Linux文件系统变成只读的解决方法
  9. 什么是互联网思维?给你最全面的解释
  10. CoType: Joint Extraction of Typed Entities and Relations with Knowledge Bases阅读笔记
  11. 倒立摆 adams matlab,基于adams和matlab的一级倒立摆联合仿真
  12. 如何用计算机算分组数据方差,『分组数据如何Excel计算标准差』Excel表格求分组数据的方差...
  13. Android Intent定义选择器打开相机和相册
  14. 网络诈骗有哪些防范措施
  15. Windows11亮度调节滑块不见了怎么办
  16. mysql5.7卸载服务_Mysql5.7.28安装配置、卸载—CentOS7.6生产环境下的微服务部署(四)...
  17. IntelliJ IDEA 绝对好用快捷键
  18. C++ 泛型编程 map(统计人数)
  19. python spring框架_Spring Python
  20. 单峰数组求第k大算法

热门文章

  1. 【图神经网络研究精华】图卷积网络作者Thomas Kipf博士论文公布
  2. 2019-2020 Google研究资助奖(Faculty Research Award)获奖出炉!185人上榜
  3. NumPy 手写所有主流 ML 模型,由普林斯顿博士后 David Bourgin打造的史上最强机器学习基石项目!...
  4. SAP 零售行业相关的博客
  5. 如何看待亚马逊 AI 李沐团队大批人员离职?
  6. “黑科技”要会用才行,探讨人工智能如何落地
  7. 看!那全球最伟大的人工智能女性科学家们!
  8. SAP 预制发票报错 -Material 20000000 D119223073 in valuation area VNSM has inconsistant ML data- 之对策
  9. 人工智能成热点,斯坦福华人女教授提出这观点,研究院因她成立!
  10. 机器学习Basics-第十一期-循环神经网络RNN