我正在使用 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);
,还是不行