您的位置 首页 php

负载均衡中session共享的4种解决方案

负载均衡时访问页面会把请求分发到不同的服务器,session是存在服务器端,如果首次访问被分发到A服务器,那么session就会被存到A服务器,再次访问时负载均衡会分发到B服务器那么第一次访问的session信息就会获取不到之前的session信息。从而导致数据的不一致。

解决方案有以下几种:

方案一( Nginx 或者 haproxy 做的负载均衡):

用Nginx 做的负载均衡可以添加ip_hash这个配置,

用haproxy做的负载均衡可以用 balance source这个配置。

从而使同一个ip的请求发到同一台服务器。

方案二 利用数据库同步session:

这种方案不可取,这样会加大数据库的访问压力。

方案三 利用 cookie 同步session数据原理图如下:

代码如下:

A服务器:

<?php

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 ‘</br>’;

echo ‘this is A server’;

echo ‘</br>’;

var_dump($_SESSION);

B服务器:

<?php

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 ‘</br>’;

echo ‘this is B server’;

echo ‘</br>’;

var_dump($_SESSION);

然后开始访问:

第一次访问发到B服务器 没有session和cookie数据 然后会存到session和本地cookie

刷新第二次访问分发到A服务器 session不存在但是cookie再本地存在 此时会把本地的cookie同步到B服务器中

缺点 如果禁用cookie那就完蛋了。

方案四 memcache或者 redis 存session(以memcache为例)

安装memcache及客户端和服务端,然后

<?php

ini_set(“session.save_handler”, “memcache”);

ini_set(“session.save_path”, “192.168.1.142:11211”);

//以上配置可以再php.ini中配置

session_start();

$_SESSION[‘username’]=’lampol’;

这样就把session信息存到了memache中 (redis同理)

然后在运行

<?php

ini_set(“session.save_handler”, “memcache”);

ini_set(“session.save_path”, “192.168.1.142:11211”);

session_start();

$mem = new Memcache;

$mem->connect(‘192.168.1.142’,11211);

$id=session_id();

echo $mem->get($id);

本人自认为这种方案还是比较可取的。当然了到底用哪种方案,大家可以结合实际进行选择。


文章来源:智云一二三科技

文章标题:负载均衡中session共享的4种解决方案

文章地址:https://www.zhihuclub.com/80217.shtml

关于作者: 智云科技

热门文章

网站地图