【问题标题】:memcached server failovermemcached 服务器故障转移
【发布时间】:2011-05-03 21:00:17
【问题描述】:

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

这里有一些代码sn-ps:

$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);

【问题讨论】:

  • 数据只是一个垃圾对象。我想到了。需要使用 Memcached::OPT_CONNECT_TIMEOUT。看起来连接发生在“get”而不是 addserver()。
  • 是的,仅在需要时才建立连接(在 Memcache::get 调用中)

标签: php memcached amazon-ec2 pecl


【解决方案1】:

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

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

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

Debian 不稳定有 0.44,正确响应 CONNECT_TIMEOUT 值。

【讨论】:

    【解决方案2】:

    试试这个addserver 语法

    addserver($server, 11211, true, 10, 1, -1, false);
    

    【讨论】:

    • 谢谢 Bil,但我们使用的是 pecl/memcached 库,我们也可以试试 pecl/memcache。
    【解决方案3】:

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

    $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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-06
      • 1970-01-01
      • 1970-01-01
      • 2021-02-01
      • 1970-01-01
      • 2015-05-09
      相关资源
      最近更新 更多