2

我在“c”中使用 libmemcached 来写入数据,使用 MEMACACHED_DISTRIBUTION_CONSISTENT_KETAMA。所有密钥都很好地分布在所有集群节点上,但是当我关闭其中一个节点时,密钥不会迁移。在谷歌上搜索并不清楚如何设置 libmemcached 自动执行此操作。有人有这方面的经验吗?

4

2 回答 2

1

我认为你必须使用:http ://docs.libmemcached.org/memcached_behavior.html#MEMCACHED_BEHAVIOR_REMOVE_FAILED_SERVERS

如果您不允许 libmemcached 删除失败的服务器,它们会卡在列表中,因此不会重新分配密钥。

请注意,死服务器将在 MEMCACHED_BEHAVIOR_DEAD_TIMEOUT(参见12)秒后再次进行测试。因此,如果它再次启动,它将被带回完整的服务器列表。

于 2013-12-14T14:54:38.053 回答
0

如果 memcached 服务器出现故障,Libmemcached 不会在内部处理密钥迁移。在这种情况下,当 libmemcached 尝试检索存储在故障服务器中的密钥时,将会出现缓存未命中。

如果我们使用 MEMACACHED_DISTRIBUTION_CONSISTENT_KETAMA,它只会确保缓存未命中率是最小的,因为密钥是分布式的,并且不需要完全重新散列。

解决方案:您可以跨多个节点复制密钥,这将帮助您在服务器发生故障时检索(密钥,值)对。但请注意,它不是一个高度一致的解决方案。存在陈旧数据的可能性。

EVICT 失败的服务器,以便将密钥散列到新位置并从集群中删除。

于 2017-10-26T20:28:47.517 回答