我们正在从1个Web服务器设置转移到两个Web服务器设置,我需要开始在两个负载平衡机器之间共享 PHP会话.我们已经安装了 memcached(并且已经启动),所以我很高兴我可以通过更改PHP.ini文件中的3行( session.save_handler和 session.save_path)来完成新服务器之间的共享会话:

我换了:

session.save_handler = files

有:

session.save_handler = memcache

然后在主Web服务器上,我将session.save_path设置为指向localhost:

session.save_path="tcp://localhost:11211"

在slave webserver上我将session.save_path设置为指向master:

session.save_path="tcp://192.168.0.1:11211"

完成工作,我测试了它,它的工作原理.但…

显然使用memcache意味着会话在RAM中并且如果机器重新启动或者memcache守护程序崩溃将丢失 – 我有点担心这一点但我更担心两个Web服务器之间的网络流量(特别是我们扩大规模)因为每当有人负载平衡到从属web服务器时,他们的会话将从主网络服务器通过网络获取.我想知道是否可以定义两个save_path,以便机器在使用网络之前查看自己的会话存储.例如:

主:

session.save_path="tcp://localhost:11211,tcp://192.168.0.2:11211"

奴隶:

session.save_path="tcp://localhost:11211,tcp://192.168.0.1:11211"

这会成功地跨服务器共享会话并帮助提高性能吗?即50%的时间节省网络流量.或者这种技术仅用于故障转移(例如,当一个memcache守护程序无法访问时)?

注意:我并没有特别询问有关memcache复制的内容 – 更多关于PHP内存缓存客户端是否可以在池中的每个memcache守护程序内达到峰值,如果找到一个会话则返回会话,如果找不到会话则仅创建一个新会话在所有商店.在我写这篇文章的时候,我在想我是从PHP那里问了一下,哈哈…

假设:没有粘性会话,循环负载平衡,LAMP服务器.

免责声明:如果没有进行大量的测试并且从合格的人那里得到第二意见,你会生气地听我说 – 我是这个游戏的新手.

这个问题中提出的效率改进想法是行不通的.我犯的主要错误是认为memcached存储在池中定义的顺序决定了某种优先级.不是这种情况.定义一个memached守护程序池时(例如,使用session.save_path =“tcp://192.168.0.1:11211,tcp://192.168.0.2:11211”),您无法知道将使用哪个存储.数据是均匀分布的,这意味着项目可能存储在第一个项目中,或者它可能是最后一个项目(或者如果memcache客户端配置为复制,则可能两者都有 – 请注意它是处理复制的客户端,memcached服务器执行复制不要自己做).无论哪种方式都意味着使用localhost作为池中的第一个将不会提高性能 – 有50%的机会击中任一商店.

做了一些测试和研究之后我得出结论,你可以使用memcache在服务器之间共享会话但是你可能不想这样 – 它似乎不受欢迎,因为它不像使用共享那样扩展它的数据库不够强大.我很感激这方面的反馈,所以我可以了解更多……

Ignore the following unless you have a PHP app:

提示1:如果要使用memcache在两台服务器之间共享会话:

确保您回答“是”以“启用memcache会话处理程序支持?”安装PHP memcache客户端并在/etc/PHP.d/memcache.ini文件中添加以下内容时:

session.save_handler = memcache

在网络服务器1(IP:192.168.0.1)上:

session.save_path="tcp://192.168.0.1:11211"

在网络服务器2上(IP:192.168.0.2):

session.save_path="tcp://192.168.0.1:11211"

技巧2:如果要使用内存缓存在两台服务器之间共享会话并具有故障转移支持:

将以下内容添加到/etc/PHP.d/memcache.ini文件中:

memcache.hash_strategy = consistent
memcache.allow_failover = 1

在网络服务器1(IP:192.168.0.1)上:

session.save_path="tcp://192.168.0.1:11211,tcp://192.168.0.2:11211"

在网络服务器2上(IP:192.168.0.2):

session.save_path="tcp://192.168.0.1:11211,tcp://192.168.0.2:11211"

笔记:

>这突出了我在原始问题中犯的另一个错误 – 我没有在所有服务器上使用相同的session.save_path.
>在这种情况下,“故障转移”意味着如果一个memcache守护程序失败,PHP memcache客户端将开始使用另一个.即任何在商店中遇到失败会话的人都将被注销.它不是透明的故障转移.

技巧3:如果要使用内存缓存共享会话并具有透明的故障转移支持:

与提示2相同,但您需要将以下内容添加到/etc/PHP.d/memcache.ini文件中:

memcache.session_redundancy=2

笔记:

>这使得PHP memcache客户端将会话写入2台服务器.您获得冗余(如RAID-1),以便将写入发送到n个镜像,并在镜像上重试失败的get.这意味着用户在一个memcache守护程序失败的情况下不会松开会话.
>镜像写入是并行完成的(使用非阻塞IO),因此速度性能不应随着镜像数量的增加而下降.但是,如果您的memcache镜像分布在不同的计算机上,网络流量将会增加.例如,不再有50%的机会使用localhost并避免网络访问.

>显然,写入复制的延迟可能导致检索旧数据而不是缓存未命中.问题是这对您的申请是否重要?你多久写一次会话数据?

> memcache.session_redundancy用于会话冗余,但还有一个memcache.redundancy ini选项,如果您希望它具有不同级别的冗余,则可以由程序代码使用.
>您需要PHP memcache客户端的最新版本(目前仍处于测试阶段) – Version 3.0.3 from pecl为我工作.

php – 可以使用memcache守护程序池来更有效地共享会话吗?的更多相关文章

  1. HTML5 Web缓存和运用程序缓存(cookie,session)

    这篇文章主要介绍了HTML5 Web缓存和运用程序缓存(cookie,session),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. iOS Swift上弃用后Twitter.sharedInstance().session()?. userName的替代方案

    解决方法如果您仍在寻找解决方案,请参阅以下内容:

  3. 使用Fabric SDK iOS访问Twitter用户时间线

    我试图在这个问题上挣扎两天.我正在使用FabricSDK和Rest工具包,试图为Twitter使用不同的RestAPIWeb服务.我可以使用具有authTokenSecret,authToken和其他值的会话对象的TWTRLogInButton成功登录.当我尝试获取用户时间线时,我总是得到失败的响应,作为:{“errors”:[{“code”:215,“message”:“BadAuthentic

  4. ios – 如何从Apple Watch调用iPhone上定义的方法

    有没有办法从Watchkit扩展中调用iPhone上的类中定义的方法?根据我的理解,目前在Watchkit和iPhone之间进行本地通信的方法之一是使用NSUserDefaults,但还有其他方法吗?

  5. 当iOS应用程序进入后台时,TCP和UDP(与多播)连接会发生什么

    我创建了几个实验:设置1:我创建了一个TCPSender应用程序和一个TCPReceiver应用程序.在本次实验中,我在iOS设备上启动了TCPSender,在另一台iOS设备上启动了TCPReceiver.然后两者都经过验证已建立连接并发送和接收数据.然后我将TCPReceiver应用程序置于后台.TCPSender应用程序指示连接丢失和崩溃(是的,我打算这样).设置2:我创建了一个UDPSen

  6. ios – 尝试向我们分配IP而不是localhost或home时,NSURLSession失败

    我有一台本地运行的服务器(我的IP是192.168.0.98),并且已经尝试使用一些网络代码来访问它.最初这是通过AFNetworking完成的,但我现在用这样的NSURLSession完成了它:然后我用这3个URL运行它:>http://localhost:8080/api–>作品.>http://127.0.0.1:8080/api–>作品.>http://192.168.0.98:8080/

  7. ios – 如何将视频从AVAssetExportSession保存到相机胶卷?

    在此先感谢您的帮助.解决方法只需使用session.outputURL=…

  8. ios – 使用AVCaptureSession sessionPreset = AVCaptureSessionPresetPhoto拉伸捕获的照片

    解决方法所以我解决了我的问题.这是我现在使用的代码,它工作正常:…重要的输出imagaView:一些额外的信息:相机图层必须是全屏,并且outputimageView也必须是.我希望这些对某些人来说也是有用的信息.

  9. 我可以在iOS中自定义Twitter工具包的登录按钮吗?

    我已经下载了Twitter工具包框架并添加了用Twitter登录的代码.但是,我不希望登录按钮看起来像那样.我想要一个用于登录的自定义按钮.我能这样做吗?我只想使用这个框架,因为这也适用于iOS系统帐户.解决方法根据document:在按下按钮中添加代码:Objective-C的迅速

  10. ios – AVCaptureSession条形码扫描

    解决方法以下是我所拥有的项目代码示例,可以帮助您走上正确的轨道

随机推荐

  1. PHP个人网站架设连环讲(一)

    先下一个OmnihttpdProffesinalV2.06,装上就有PHP4beta3可以用了。PHP4给我们带来一个简单的方法,就是使用SESSION(会话)级变量。但是如果不是PHP4又该怎么办?我们可以假设某人在15分钟以内对你的网页的请求都不属于一个新的人次,这样你可以做个计数的过程存在INC里,在每一个页面引用,访客第一次进入时将访问时间送到cookie里。以后每个页面被访问时都检查cookie上次访问时间值。

  2. PHP函数学习之PHP函数点评

    PHP函数使用说明,应用举例,精简点评,希望对您学习php有所帮助

  3. ecshop2.7.3 在php5.4下的各种错误问题处理

    将方法内的函数,分拆为2个部分。这个和gd库没有一点关系,是ecshop程序的问题。会出现这种问题,不外乎就是当前会员的session或者程序对cookie的处理存在漏洞。进过本地测试,includes\modules\integrates\ecshop.php这个整合自身会员的类中没有重写integrate.php中的check_cookie()方法导致,验证cookie时返回的username为空,丢失了登录状态,在ecshop.php中重写了此方法就可以了。把他加到ecshop.php的最后面去就可

  4. NT IIS下用ODBC连接数据库

    $connection=intodbc_connect建立数据库连接,$query_string="查询记录的条件"如:$query_string="select*fromtable"用$cur=intodbc_exec检索数据库,将记录集放入$cur变量中。再用while{$var1=odbc_result;$var2=odbc_result;...}读取odbc_exec()返回的数据集$cur。最后是odbc_close关闭数据库的连接。odbc_result()函数是取当前记录的指定字段值。

  5. PHP使用JpGraph绘制折线图操作示例【附源码下载】

    这篇文章主要介绍了PHP使用JpGraph绘制折线图操作,结合实例形式分析了php使用JpGraph的相关操作技巧与注意事项,并附带源码供读者下载参考,需要的朋友可以参考下

  6. zen_cart实现支付前生成订单的方法

    这篇文章主要介绍了zen_cart实现支付前生成订单的方法,结合实例形式详细分析了zen_cart支付前生成订单的具体步骤与相关实现技巧,需要的朋友可以参考下

  7. Thinkphp5框架实现获取数据库数据到视图的方法

    这篇文章主要介绍了Thinkphp5框架实现获取数据库数据到视图的方法,涉及thinkPHP5数据库配置、读取、模型操作及视图调用相关操作技巧,需要的朋友可以参考下

  8. PHP+jquery+CSS制作头像登录窗(仿QQ登陆)

    本篇文章介绍了PHP结合jQ和CSS制作头像登录窗(仿QQ登陆),实现了类似QQ的登陆界面,很有参考价值,有需要的朋友可以了解一下。

  9. 基于win2003虚拟机中apache服务器的访问

    下面小编就为大家带来一篇基于win2003虚拟机中apache服务器的访问。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  10. Yii2中组件的注册与创建方法

    这篇文章主要介绍了Yii2之组件的注册与创建的实现方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下

返回
顶部