热门标签 | 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”;


推荐阅读
  • Centos下安装memcached+memcached教程
    本文介绍了在Centos下安装memcached和使用memcached的教程,详细解释了memcached的工作原理,包括缓存数据和对象、减少数据库读取次数、提高网站速度等。同时,还对memcached的快速和高效率进行了解释,与传统的文件型数据库相比,memcached作为一个内存型数据库,具有更高的读取速度。 ... [详细]
  • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
    本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
  • PHP组合工具以及开发所需的工具
    本文介绍了PHP开发中常用的组合工具和开发所需的工具。对于数据分析软件,包括Excel、hihidata、SPSS、SAS、MARLAB、Eview以及各种BI与报表工具等。同时还介绍了PHP开发所需的PHP MySQL Apache集成环境,包括推荐的AppServ等版本。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 本文介绍了关于apache、phpmyadmin、mysql、php、emacs、path等知识点,以及如何搭建php环境。文章提供了详细的安装步骤和所需软件列表,希望能帮助读者解决与LAMP相关的技术问题。 ... [详细]
  • Tomcat安装与配置教程及常见问题解决方法
    本文介绍了Tomcat的安装与配置教程,包括jdk版本的选择、域名解析、war文件的部署和访问、常见问题的解决方法等。其中涉及到的问题包括403问题、数据库连接问题、1130错误、2003错误、Java Runtime版本不兼容问题以及502错误等。最后还提到了项目的前后端连接代码的配置。通过本文的指导,读者可以顺利完成Tomcat的安装与配置,并解决常见的问题。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • PHP设置MySQL字符集的方法及使用mysqli_set_charset函数
    本文介绍了PHP设置MySQL字符集的方法,详细介绍了使用mysqli_set_charset函数来规定与数据库服务器进行数据传送时要使用的字符集。通过示例代码演示了如何设置默认客户端字符集。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • [翻译]微服务设计模式5. 服务发现服务端服务发现
    服务之间需要互相调用,在单体架构中,服务之间的互相调用直接通过编程语言层面的方法调用就搞定了。在传统的分布式应用的部署中,服务地 ... [详细]
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社区 版权所有