1.需求:

请教个问题:
我用lvs的rr模式,(考虑过 ipvsadm -p,但是这样就失去了负载均衡的意义感觉),后端有10台web,用一台memcached专门用于存储session文件,但是现在问题是,客户端请求第一次被轮训到 web A服务器,A可以获取到本次回话的session ID,从而可以从memcached里通过sessionID获取到这次回话的session ID,而第二次请求轮训到B服务器,因为第一次请求没经过web B,他不知道session ID啊,所以他从memcached中获取不到session ID。这就是现在遇到的问题。做了基于cookie的sessionID,但是考虑到客户端会禁用cookie,所以又难办了。 有啥办法呢?
谁能帮忙解答下.

2.解决方案:

  a.中小企业方案:

  把所有应用服务器sesson会话统一放到memcached里,web读取都读共享memcached,就保持一致了。php程序,php.ini里配,当然了,lvs -p,nginx ip_hash等等也是部分网友实现的思路。

  企业集群共享会话实现架构图如下:

  

  b.门户网站方案:

  基于client cookie的sessionID是门户网站经常采用的,效率高,安全性一般,另外cookie的数量很有限,如果不够,可以通过多值cookie解决,例如淘宝就是这么干的。
  企业集群clinet会话实现架构图如下:
  
3.大规模网站sesson会话共享思路及实践配置
可以直接用memcached来作PHP的session.save_handler解决sesson共享问题

. 安装memcached服务端软件
略,见老男孩培训相关视频教程或谷歌搜下安装。
注意:memcached用libevent来作事件驱动,所以要先安装libevent。 . 安装memcache客户端件
略,见老男孩培训相关视频教程或谷歌搜下安装。 . 真正配置的开始
修改配置文件,在php.ini中全局设置: web集群session共享存储设置:
默认php.ini中session的类型和配置路径:
#session.save_handler = files
#session.save_path = "/tmp"
修改成如下配置:
session.save_handler = memcache
session.save_path = "tcp://10.0.0.18:11211"
提示:
)10.0.0.18: 为memcached数据库缓存的IP及端口。
)上述适合LNMP,LAMP环境。
)memcached服务器也可以是多台通过hash调度。 、用memcached来存储session特点:
优点:
)读写速度上会比普通files时快很多。
)可以解决多个服务器共用session的难题。
缺点:
)session数据都保存在memory中,持久化方面有所欠缺,但对session数据来说不是问题。
)单点,部署多台,也无法数据同步。通过hash算法分配依然有sesson丢失的问题。 、大规模企业解决思路:
)可以用其他的持久化系统存储sessons,例如:redis,ttserver,替代memcached。
)高性能高并发场景,cookies效率比session要好很多,因此,大网站都会用cookies解决会话共享问题。
)有初级运维网友通过牺牲LB的负载均衡的策略实现,例如:lvs -p,nginx ip_hash等,这些不是好的方法。

大规模网站sesson会话保持思路及实践配置的更多相关文章

  1. 腾讯技术分享:微信小程序音视频与WebRTC互通的技术思路和实践

    1.概述 本文来自腾讯视频云终端技术总监rexchang(常青)技术分享,内容分别介绍了微信小程序视音视频和WebRTC的技术特征.差异等,并针对两者的技术差异分享和总结了微信小程序视音视频和WebR ...

  2. ELK 性能(4) — 大规模 Elasticsearch 集群性能的最佳实践

    ELK 性能(4) - 大规模 Elasticsearch 集群性能的最佳实践 介绍 集群规模 集群数:6 整体集群规模: 300 Elasticsearch 实例 141 物理服务器 4200 CP ...

  3. vivo大规模 Kubernetes 集群自动化运维实践

    作者:vivo 互联网服务器团队-Zhang Rong 一.背景 随着vivo业务迁移到K8s的增长,我们需要将K8s部署到多个数据中心.如何高效.可靠的在数据中心管理多个大规模的K8s集群是我们面临 ...

  4. PHP网站在Linux服务器上面的安全配置

    本文详细总结了PHP网站在Linux服务器上面的安全配置,包含PHP安全.mysql数据库安全.web服务器安全.木马查杀和防范等,很好很强大很安全. PHP安全配置 1. 确保运行php的用户为一般 ...

  5. IOS屏幕旋转思路和实践

    这段时间同事在做一个直播项目,项目有个需求:一个界面需要手动设置屏幕的方向,设置好之后方向不能变化.完成这个需求花了特别大的精力,归因是网上关于屏幕旋转的知识比较凌乱,解决问题花费不少时间,最后决定把 ...

  6. 京东前端:PhantomJS 和NodeJS在网站前端监控平台的最佳实践

    1. 为什么需要一个前端监控系统 通常在一个大型的 Web 项目中有很多监控系统,比如后端的服务 API 监控,接口存活.调用.延迟等监控,这些一般都用来监控后台接口数据层面的信息.而且对于大型网站系 ...

  7. laravel开发大型电商网站之异常设计思路分析

    令人讨厌的异常 提起异常,大家都很反感,当信心满满的写完一段代码,刷新页面发现上面写着大大的 Exception 是最心烦的时候了.模块给领导演示的时候,如果报了异常,也是最让人崩溃的时候了. 在一般 ...

  8. iframe截取网站部分内容实现思路及代码

    使用iframe可以截取网站的部分内容,主要配合width.height.overflow等属性来实现的,具体示例如下,需要的朋友不要错过. <div style="width:630 ...

  9. 【安装Ecshop2.7.2网站(LAMP环境)】--实践

    LAMP : Linux + Apache + Mysql + PHPEcshop2.7.2 注意:在输入命令过程中,学会用tab键补全命令,不要对着照抄,很容易出错. 前置:A:先设置虚拟机中的CD ...

随机推荐

  1. js学习笔记30----对象

    面向对象 对象:是一个整体,对外提供一些操作.JavaScript的所有数据都可以被视为对象.简单说,所谓对象,就是一种无序的数据集合,由若干个“键值对”(key-value)构成. 比如说: var ...

  2. SQL错误代码弹出提示信息类

    截获SQL错误代码弹出提示信息类 Code:public class DBErrorCode{    /// <summary>    /// 根据错误代码弹出错误提示    /// &l ...

  3. HTML坦克大战学习01

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <t ...

  4. MFC CreateWindow介绍

    CreateWindow 该函数创建一个重叠式窗口.弹出式窗口或子窗口.它指定窗口类,窗口标题,窗口风格,以及窗口的初始位置及大小(可选的).函数也指该窗口的父窗口或所属窗口(如果存在的话),及窗口的 ...

  5. 第二百九十八节,python操作redis缓存-Set集合类型,可以理解为不能有重复元素的列表

    python操作redis缓存-Set集合类型,可以理解为不能有重复元素的列表 sadd(name,values)name对应的集合中添加元素 #!/usr/bin/env python # -*- ...

  6. c++ list sort

      1.  bool operator < (S & b) {      return ID < b.ID;     } struct S { std::string firstn ...

  7. dos 关机

    1.直接调用关机命令 shutdown -s -t 600 (你说的10分钟换算成秒就是600喽,不过这个关机命令不大好,因为始终有个关机倒计时框框显示的) 2.利用at命令调用,在指定时间关机 at ...

  8. 使用存储过程将Oracle数据批量导出为多个csv文件

    数据库有如下表结构: user_info (   user_id           NUMBER primary key,   user_name     VARCHAR2(200) NOT NUL ...

  9. OCX控件打包成CAB并实现数字签名过程

      OCX打包CAB并签名过程 一.打包cab 制作cab文件时需要将所有的相关文件都包含进去,可以通过Depends(VC自带的)检查需要的文件.使用inf文件将这些东西都写进去. 1.制作inf文 ...

  10. easyUI实现(alert)提示框自动关闭的实例代码

    function alert_autoClose(title,msg,icon){  var interval;  var time=1000;  var x=2;  //设置时间2s $.messa ...