首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >memcached服务器故障切换

memcached服务器故障切换
EN

Stack Overflow用户
提问于 2011-05-04 05:00:18
回答 3查看 3K关注 0票数 0

我在pecl/memcached客户端遇到了一个奇怪的问题。在我的设置中,我有3个memcached服务器。当我停止(这是一个ec2实例)一个memcached服务器以模拟一个完全故障时,"get“操作需要4秒钟才能完成。如何强制它提前超时?

以下是一些代码片段:

代码语言:javascript
复制
$this->memcache = new Memcached;
$this->memcache->setOption(Memcached::OPT_DISTRIBUTION ,Memcached::DISTRIBUTION_CONSISTENT);
$this->memcache->setOption(Memcached::OPT_LIBKETAMA_COMPATIBLE ,TRUE);
...
foreach($CFG->data_memcache_servers as $server){
  if (!$this->memcache->addserver($server,11211)){
    throw new Exception('Unable to connect to memcache server');    
  }
}
...
$data = $this->memcache->get($key);
EN

回答 3

Stack Overflow用户

发布于 2011-07-09 02:45:51

我遇到了同样的问题,所有超时设置为50ms,在没有memcached的服务器上执行set() (或停止memcached ),执行set()或get()需要21秒。

这似乎是libmemcached中的一个bug,我们可以在这里看到:https://bugs.launchpad.net/libmemcached/+bug/778777 (和许多其他网站)

我在Debian上工作,libmemcached的版本是0.40,而bug似乎至少持续到0.49 (用于自动驱逐坏服务器)。

Debian不稳定的版本是0.44,它正确地响应了CONNECT_TIMEOUT的值。

票数 2
EN

Stack Overflow用户

发布于 2011-05-04 08:21:47

尝试此addserver语法

代码语言:javascript
复制
addserver($server, 11211, true, 10, 1, -1, false);
票数 0
EN

Stack Overflow用户

发布于 2011-07-27 22:07:38

PECL Memcached 2.0之前版本不支持addServer()中与故障转移/超时相关的参数。如果您坚持使用版本1.0.x (例如,Ubuntu 10.04 LTS中附带的版本),这是一种简单的方法,可以提供从单个主服务器到单个故障转移服务器的故障转移支持:

代码语言:javascript
复制
$m = new Memcached();
$m->addServer(MEMBASE_HOST, MEMBASE_PORT);

// Immediately check server connection
$m->get('onlinecheck_' . uniqid());

if (in_array($m->getResultCode(), array(Memcached::RES_ERRNO, Memcached::RES_UNKNOWN_READ_FAILURE)))
{
    // Main server not available - Failing over
    $m = new Memcached();
    $m->addServer(MEMBASE_FAILOVER_HOST, MEMBASE_FAILOVER_PORT);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5875666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档