【问题标题】:Memcached lib failover like memcache libMemcached lib 故障转移,如 memcache lib
【发布时间】:2012-12-03 14:20:00
【问题描述】:

我正在使用 php memcached(不是 memcache),但我遇到了故障转移问题。

例如,我有两台 memcached 服务器,但当其中一台服务器崩溃时,我希望 memcached 继续运行只有一台。

使用 lib memcache 可以工作,但不能使用 memcached。 我试过类似的东西

<?php

$m = new Memcached();
$m->setOption(Memcached::OPT_DISTRIBUTION, Memcached::DISTRIBUTION_CONSISTENT);

$m->addServer('server1', 11211);
$m->addServer('server2', 11211);

var_dump($m->set('1234','test'));
var_dump($m->get('1234'));

$m->flush();

$m = new Memcache();

$m->addServer('server1', 11211);
$m->addServer('server2', 11211);

var_dump($m->set('1234','test'));
var_dump($m->get('1234'));

$m->flush();

?>

当两个 memcached 都启动时:

bool(true)
string(4) "test"
bool(true)
string(4) "test"

但是当我停止 server2 时:

bool(false)
bool(false)

Notice: MemcachePool::set(): Server server2 (tcp 11211, udp 0) failed with: Connection refused (111) in /root/memcached.php on line 22

Call Stack:
    0.0013     637584   1. {main}() /root/memcached.php:0
    0.0220     653104   2. MemcachePool->set() /root/memcached.php:22

bool(true)
string(4) "test"

在 memcached 上,IO 被直接阻塞并返回 false,而在 memcache 上,有一个通知,但 IO 工作。

PS:我试过setOption(Memcached::OPT_DISTRIBUTION,Memcached::DISTRIBUTION_CONSISTENT);但是不行

【问题讨论】:

    标签: php memcached


    【解决方案1】:

    选项$m-&gt;setOption(Memcached::OPT_LIBKETAMA_COMPATIBLE, true); 允许:)

    【讨论】:

    • 这似乎有效,但我不完全确定为什么,us2.php.net/manual/en/memcached.constants.php。 “如果您想使用一致的哈希,强烈建议启用此选项,并且可能会在以后的版本中默认启用。”
    【解决方案2】:

    你缺少一个选项:

    $m->setOption(Memcached::OPT_DISTRIBUTION,Memcached::DISTRIBUTION_CONSISTENT);
    $m->setOption(Memcached::OPT_REMOVE_FAILED_SERVERS, true);
    

    否则,«set()» 调用将导致 «SERVER HAS FAILED AND IS DISABLED UNTIL TIMED RETRY»,但由于服务器未从列表中删除,同一服务器上的每个 set() 都会失败.

    请注意,使用此配置,当您在坏服务器上 set() 时,它会被删除,并且数据会在好服务器上正确 set()(坏服务器的密钥分布在所有剩余的服务器上)。

    【讨论】:

      猜你喜欢
      • 2012-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多