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