好吧,我已经得到了这个完全罕见的负载均衡PHP网站的独特场景。令人失望的是 - 它以前不是负载平衡的。现在我们开始发现问题了......负载均衡群集中的PHP会话 - 如何?
目前唯一的问题是PHP会话。当然,最初没有人想到这个问题,所以PHP会话配置保持其默认值。因此,两台服务器都拥有自己的小会话文件,而悲伤的是获取下一个请求的用户被抛出到另一台服务器,因为他没有在第一个服务器上创建的会话。
现在,我一直在阅读如何解决这种情况的PHP手册。在那里,我发现了session_set_save_handler()
的好功能。 (巧合的是,SO上的this topic)整洁。除了我将不得不在网站的所有页面中调用此函数。未来页面的开发人员也必须记得随时调用它。感觉有点笨拙,更不用说可能违反了一打最好的编码习惯。如果我只需要翻转一些全局配置选项和Voilà - 这些会话都会神奇地存储在数据库或内存缓存中或其他内容中,那将会更好。
有关如何做到这一点的任何想法?
补充:澄清 - 我希望这是一个标准的解决方案标准的情况。仅供参考 - 我有一个MySQL数据库可用。当然,必须有一些现成的代码可以解决这个问题吗?当然,我可以写我自己的会话保存的东西, Greg指出的
auto_prepend
选项似乎很有前途 - 但这会让人觉得重新发明轮子。 :P
添加2:负载平衡DNS基础。我不知道这是如何工作的,但我想这应该是像 this。
新增3: OK,我看到一个解决方案是使用
auto_prepend
选项在每个脚本插入到
session_set_save_handler()
打个电话,写我自己的DB留存,也许在调用
memcached
扔有更好的表现。很公平。
是否还有一些方法可以避免自己编码这一切?就像一些着名且经过充分测试的PHP插件一样?
增加了很多,很久以后:这是我到底去的方式:How to properly implement a custom session persister in PHP + MySQL?
而且,我只是手动包括会话处理器中的所有页面。
这不是正确的方法。问题是PHP会话,忘记数据库,我们正在谈论PHP。这个解决方案只是一个解决方法。 – Daniel 2011-12-14 13:37:16