【发布时间】:2015-11-02 21:50:38
【问题描述】:
简单设置:
- 1 个节点运行 twemproxy (vcache:22122)
- 2 个运行 memcached (vcache-1, vcache-2) 的节点都在监听 11211
我有以下 twemproxy 配置:
default:
auto_eject_hosts: true
distribution: ketama
hash: fnv1a_64
listen: 0.0.0.0:22122
server_failure_limit: 1
server_retry_timeout: 600000 # 600sec, 10m
timeout: 100
servers:
- vcache-1:11211:1
- vcache-2:11211:1
twemproxy 节点可以解析所有主机名。作为测试的一部分,我删除了 vcache-2。理论上,每次尝试与 vcache:22122 交互时,twemproxy 都会联系池中的服务器以促进尝试。但是,如果其中一个缓存节点关闭,则 twemproxy 应该将其从池中“自动弹出”,因此后续请求不会失败。
由应用层来确定使用 vcache:22122 的接口尝试失败是否是由于基础架构问题,如果是,请重试。但是我发现在重试时,正在使用相同的失败服务器,因此后续尝试不会传递给已知良好的缓存节点(在本例中为 vcache-1),它们仍被传递给弹出的缓存节点(vcache -2)。
这是尝试重试的 php 代码 sn-p:
....
// $this is a Memcached object with vcache:22122 in the server list
$retryCount = 0;
do {
$status = $this->set($key, $value, $expiry);
if (Memcached::RES_SUCCESS === $this->getResultCode()) {
return true;
}
} while (++$retryCount < 3);
return false;
-- 更新--
在 Github 上打开的问题链接以获取更多信息:Issue #427
【问题讨论】:
标签: php caching memcached twemproxy