0

私は php memcached (memcache ではない) を使用していますが、フェイルオーバーに問題があります。

たとえば、memcached の 2 つのサーバーがありましたが、サーバーの 1 つがクラッシュしたときに、memcached が 1 つだけで動作し続けることを望みます。

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);ましたが、動作しません

4

2 に答える 2

1

オプション$m->setOption(Memcached::OPT_LIBKETAMA_COMPATIBLE, true);はそれを可能にします:)

于 2012-12-03T14:30:04.980 に答える