Memcached lib故障转移,如memcache lib

时间:2012-12-03 14:20:01

标签: php memcached

我正在使用php memcached(不是内存缓存),但我遇到了有关故障转移的问题。

例如,我有两个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"

但是当我停止服务器2时:

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);但无效

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

你缺少一个选择:

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

否则«set()»调用将导致«服务器失败并且在定时重试期间被禁用»,但由于服务器未从列表中删除,因此它将在同一服务器上的每个set()失败

请注意,使用此配置时,如果在错误的服务器上设置(),它将被删除并且数据在正常服务器上正确设置()(错误服务器的密钥分布在所有剩余的服务器上)。