当php + memcache PECL扩展'松散'它的一个memcache会话服务器


What exactly happens with new session creation when php + memcache PECL extension 'looses' one of its memcache session servers?

快速注意,我不是在谈论现有的会话,我知道,如果memcache服务器脱机,它们将丢失


想象以下情况:

PHP

)

b) PECL memcache扩展(http://pecl.php.net/package/memcache)

c) PECL memcache设置为会话处理程序

d)多个memcache服务器设置通过会话来完成此操作。Save_path = "tcp:....., tcp :.....";

e)一个memcache服务器宕机(服务器重启、守护进程停止等)。因此,在这一点上,我们仍然至少有一个有效的,工作的memcache服务器。

上述内容如何影响新会话的创建?

我已经在http://www.php.net/manual/en/memcache.ini.php上看了一下memcache手册,手册有点薄。

虽然它说与http://www.php.net/manual/en/memcache.addserver.php中列出的参数相同,但

我们已经尝试关闭我们的memcached服务器之一进行测试,我们的php日志开始填充'无法写入会话数据,请检查您的....'。

当前我们的会话。Save_path ini设置看起来像:

session.save_path = "tcp://xxx.xxx.xxx.xxx:z?persistent=1, tcp://yyy.yyy.yyy.yyy:z?persistent=1";

总结一下:

1)当其中一个会话处理程序发生故障时会发生什么?

2)是否有一种方法来配置这个扩展,以透明地尝试一个"其他"memcache服务器列出,如果尝试一个失败?还是自动完成?

3)在memcache运行时配置手册页@ php.net我看到一个设置"memcache。Allow_failover",默认为true (on),这也适用于会话处理吗?或者只有"在php"调用memcache?

谢谢你。


进一步说明,我们使用的是3.0.6版本的扩展,位于http://pecl.php.net/package/memcache.

似乎3.0中的故障转移。X坏了。我已经尝试了几个小时来解决这个问题,会话故障转移只在稳定分支(2.2.x)上工作。我试了3.0.5,3.0.4,都失败了。

当使用3.0.6时,它静默失败并且不返回任何错误。当使用3.0.4或3.0.5时,它会出现分段错误,并且不返回任何内容。

所以我建议使用你自己的自定义会话处理程序封装和使用memcache存储会话。在那里,您可以实现自己的故障转移机制。