热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

网络负载平衡系统使用memcache同步session的方法

前面讲了如何配置WindowsServer2003网络负载平衡系统,那么在web架构中配置好Server群集后,我们肯定会考虑session共享和同步的问题。试想下,同一个IP访问负载平衡系统中的同一个网页会被分配到不同的服务器上

 前面讲了如何配置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代码
  1.   session_start();  
  2.   $_SESSION['username']=“abcabc”;echosession_id();  
  3. ?>  

  b)显示session内容文件

PHP代码
  1.   $mem=newMemcache;  
  2.   $mem->addServer(“127.0.0.1″,12000)ordie(“Couldnotaddserver12000″);  
  3.   $mem->addServer(“127.0.0.1″,13000)ordie(“Couldnotaddserver13000″);  
  4.   $val=$mem->get(‘qp0mrob2ovcqle3u4lbr4obsa5′);  
  5.   //echosession_id();  
  6.   echo$val;  
  7. ?>  

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


推荐阅读
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • Docker的安全基准
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 优化联通光猫DNS服务器设置
    本文详细介绍了如何为联通光猫配置DNS服务器地址,以提高网络解析效率和访问体验。通过智能线路解析功能,域名解析可以根据访问者的IP来源和类型进行差异化处理,从而实现更优的网络性能。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 在计算机技术的学习道路上,51CTO学院以其专业性和专注度给我留下了深刻印象。从2012年接触计算机到2014年开始系统学习网络技术和安全领域,51CTO学院始终是我信赖的学习平台。 ... [详细]
  • 本文探讨了Hive中内部表和外部表的区别及其在HDFS上的路径映射,详细解释了两者的创建、加载及删除操作,并提供了查看表详细信息的方法。通过对比这两种表类型,帮助读者理解如何更好地管理和保护数据。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 在哈佛大学商学院举行的Cyberposium大会上,专家们深入探讨了开源软件的崛起及其对企业市场的影响。会议指出,开源软件不仅为企业提供了新的增长机会,还促进了软件质量的提升和创新。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • 网络攻防实战:从HTTP到HTTPS的演变
    本文通过一系列日记记录了从发现漏洞到逐步加强安全措施的过程,探讨了如何应对网络攻击并最终实现全面的安全防护。 ... [详细]
author-avatar
mobiledu2502917797
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有