负载均衡中session共享的4种解决方案
来源:互联网 发布:微信淘客用什么软件 编辑:程序博客网 时间:2024/05/16 18:24
负载均衡时访问页面会把请求分发到不同的服务器,session是存在服务器端,如果首次访问被分发到A服务器,那么session就会被存到A服务器,再次访问时负载均衡会分发到B服务器那么第一次访问的session信息就会获取不到之前的session信息。从而导致数据的不一致。
解决方案有以下几种:
方案一(nginx或者haproxy做的负载均衡):
用Nginx 做的负载均衡可以添加ip_hash这个配置,
用haproxy做的负载均衡可以用 balance source这个配置。
从而使同一个ip的请求发到同一台服务器。
方案二 利用数据库同步session:
这种方案不可取,这样会加大数据库的访问压力。
方案三 利用cookie同步session数据原理图如下:
代码如下:
A服务器:
session_start();
if(isset($_SESSION['username'])){
echo 'ok you can go next';
}else if(isset($_COOKIE['username'])){
echo 'session is not in this server but cookie is exist';
$_SESSION['username']=$_COOKIE['username'];
}else{
echo 'cookie and session does\'t in this server';
$_SESSION['username']='lampol';
setCookie('username','lampol',time()+30*24*60*60);
}
echo '
';
echo 'this is A server';
var_dump($_SESSION);
B服务器:
echo 'this is B server';
然后开始访问:
第一次访问发到B服务器 没有session和cookie数据 然后会存到session和本地cookie
刷新第二次访问分发到A服务器 session不存在但是cookie再本地存在 此时会把本地的cookie同步到B服务器中
缺点 如果禁用cookie那就完蛋了。
方案四 memcache或者redis存session(以memcache为例)
安装memcache及客户端和服务端,然后
ini_set("session.save_handler", "memcache");
ini_set("session.save_path", "192.168.1.142:11211");
//以上配置可以再php.ini中配置
这样就把session信息存到了memache中 (redis同理)
然后在运行
$mem = new Memcache;
$mem->connect('192.168.1.142',11211);
$id=session_id();
echo $mem->get($id);
本人自认为这种方案还是比较可取的。当然了到底用哪种方案,大家可以结合实际进行选择。
0 0
- 负载均衡中session共享的4种解决方案
- 负载均衡中session共享的4种解决方案
- 负载均衡服务器session共享的解决方案
- 负载均衡服务器session共享的解决方案
- 负载均衡服务器Session共享的解决方案(转)
- nginx负载均衡session共享解决方案
- nginx负载均衡session共享解决方案
- nginx负载均衡session共享解决方案
- nginx负载均衡session共享解决方案
- 负载均衡 session 共享
- 负载均衡 session解决方案
- 负载均衡-session共享的三种处理方法
- nginx和tomcat负载均衡后session无法共享的解决方案
- ### 实现nginx的负载均衡【负载分配方式】+【session共享】
- Django负载均衡session共享
- 负载均衡中的session共享
- 负载均衡-cookie/session解决方案
- 了解负载均衡 会话保持 session同步 session同步、共享的3种解决方法
- 识别pc和手机版跳转不同的页面
- Excel选择某单元格整行变色是这样做的
- TextControl
- jQuery二级下拉菜单 下拉箭头翻转动画
- Myeclipse 使用Git检出/提交项目
- 负载均衡中session共享的4种解决方案
- spring注解方式 idea报could not autowire,eclipse却没有问题
- jajhnksjnkj
- 在分类中动态声明成员变量的方法(runtime)(转载)
- 做产品与做项目的区别
- Android 中记事本动态添加行
- J2EE系列之Struts2学习笔记(六)---struts2处理传入多个数目不定的JavaBean对象
- Eclipse显示空格,换行符
- BZOJ 3747: [POI2015]Kinoman