【发布时间】:2017-07-28 20:24:17
【问题描述】:
我有一个烦人的问题,我似乎无法解决问题。问题是我的 PHP Memcached 客户端不断尝试写入死服务器。当我使用 $memcached->getStats() 检查服务器的统计信息时,它看起来像这样:
{
"server1:11211": {
"pid" : 15,
"uptime" : 600
...
},
"server2:11211": {
"pid" : -1,
"uptime" : 0
...
},
}
据我了解,这表明 server2 已死?但是当我尝试将数据写入集群时,它会一直尝试将一半的密钥写入这个死服务器。当两台服务器都处于活动状态时它工作得很好,但是一旦我杀死其中一个,它似乎不会影响密钥的分配方式。
我的 Memcached 实例如下所示:
protected static function getMemcached()
{
if(!self::$memcached)
{
self::$memcached = new Memcached();
self::$memcached->setOptions(array(
Memcached::OPT_CONNECT_TIMEOUT => 100,
Memcached::OPT_LIBKETAMA_COMPATIBLE => true,
Memcached::OPT_REMOVE_FAILED_SERVERS => true,
Memcached::OPT_SERVER_FAILURE_LIMIT => 2,
Memcached::OPT_RETRY_TIMEOUT => 1
));
// Prevent adding a server to the connection pool each request
if (!self::$memcached->getServerList())
{
// Add new connection
self::$memcached->addServers(self::getHosts());
}
}
return self::$memcached;
}
Memcached::OPT_REMOVE_FAILED_SERVERS => true 不是说如果服务器宕机了就应该从服务器池中移除吗?我没有正确理解这一点吗?当我尝试从 PHP 客户端 ping 死服务器时,会导致未知主机错误。在使用addServers() 将它们添加到池之前,是否需要检查每个服务器的状态?
此外,每个写入请求都有一个成功的getResultMessage()。
非常感谢您对此的一些意见,
【问题讨论】:
标签: php caching memcached distributed