同事!
我正在运行带有memcache(2.2.6)客户端库(http://pecl.php.net/package/memcache)的php 5.3(5.3.8)来处理memcached服务器.我的目标是为会话引擎提供故障转移解决方案,即:
我期望的是,如果其中一个memcached服务器关闭,php将尝试利用池中的第二台服务器[将成功连接并变得快乐],但是当池中的第一个memcached服务器关闭时,我正在接收以下错误:
Session start failed. Original message: session_start(): Server 10.0.10.111 (tcp 11211) failed with: Connection refused (111)
Run Code Online (Sandbox Code Playgroud)
而相关的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
Run Code Online (Sandbox Code Playgroud)
和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
Run Code Online (Sandbox Code Playgroud)
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.
Run Code Online (Sandbox Code Playgroud)
换句话说,不是按顺序查询所有列出的服务器,而是在尝试连接队列中的第一个服务器失败后崩溃.最后我意识到有3.0.x客户端库可用,但它对我来说看起来不太可靠,因为它仍处于测试版.
请建议如何使用标准PHP,客户端lib和服务器获得所需的行为.
非常感谢!
最好的,尤金
我试图在PhantomJS之上构建一个非常简单的解决方案,但不知何故它在调用时崩溃了phantom.exit().例如,运行以下代码时:
var page = require('webpage').create();
page.onResourceRequested = function (request) {
console.log('Request ' + request.url);
phantom.exit();
};
page.open('http://www.google.com/');
Run Code Online (Sandbox Code Playgroud)
在Ubuntu(12.04.3 LTS)和CentOS(6.4)上发生了分段故障.如果我注释掉phantom.exit()它列出了请求的URL,那么它基本上按预期工作.然而,这phantom.exit()是我真正需要的东西,因为我想在某些情况下终止我的脚本(例如,尝试访问特定域).我觉得我的问题太明显了,但不知道发生了什么.