会话使用PHP Memcache对memcached进行故障切换

同事!

我使用memcache(2.2.6)客户端库(http://pecl.php.net/package/memcache)运行php 5.3(5.3.8)来处理memcached服务器.
我的目标是为会话引擎提供故障切换解决方案,即:

>只支持本地php会话(没有自定义处理程序)
>池中的几个memcached服务器

我期望的是,如果一个memcached服务器关闭,php将尝试利用池中的第二个服务器[将成功连接并变得快乐],但是当池中的第一个memcached服务器关闭时,我正在接收以下错误:

Session start failed. Original message: session_start(): Server 10.0.10.111 (tcp 11211) failed with: Connection refused (111)

而相关的php设置是:

session.save_handler memcache
session.save_path tcp://10.0.10.111:11211?persistent=1&weight=1&timeout=1&retry_interval=10,tcp://10.0.10.110:11211?persistent=1&weight=1&timeout=1&retry_interval=10

和memcache设置(虽然我认为它接近标准)是:

Directive   Local Value
memcache.allow_failover 1
memcache.chunk_size 8192
memcache.default_port   11211
memcache.default_timeout_ms 1000
memcache.hash_function  crc32
memcache.hash_strategy  standard
memcache.max_failover_attempts  20

Memcached仍然运行在第二台服务器上,可以从WEB服务器完全访问:

telnet 10.0.10.110  11211
Trying 10.0.10.110...
Connected to 10.0.10.110 (10.0.10.110).
Escape character is '^]'.
get aaa
END
quit
Connection closed by foreign host.

所以换句话说,不是按顺序查询所列出的所有服务器,而是尝试连接队列中的第一个服务器不成功.最后我意识到有3.0.x客户端库的版本可用,但是它仍然是beta版本,对我来说看起来不太可靠.

请指导如何使用标准PHP,客户端库和服务器获得所需的行为.

非常感谢!

最好,
尤金

使用Memcached扩展名.请注意,PHP有两个memcache插件.一个叫Memcache,另一个叫Memcached.是的,这很混乱,但无论如何也是如此.

Memcache插件支持您使用的复杂URL,协议标识符(tcp)和参数(持久性等),而Memcached插件支持连接池.

您在上述评论(http://www.php.net/manual/en/memcached.sessions.php)中提到的文档是关于Memcached扩展,而不是关于Memcache.

更新:有趣的阅读:http://www.jb51.cc/article/p-fbqnxspg-btw.html

相关文章

文章浏览阅读8.4k次,点赞8次,收藏7次。SourceCodester Onl...
文章浏览阅读3.4k次,点赞46次,收藏51次。本文为大家介绍在...
文章浏览阅读1.1k次。- php是最优秀, 最原生的模板语言, 替代...
文章浏览阅读1.1k次,点赞18次,收藏15次。整理K8s网络相关笔...
文章浏览阅读1.2k次,点赞22次,收藏19次。此网络模型提供了...
文章浏览阅读1.1k次,点赞14次,收藏19次。当我们谈论网络安...