我在“c”中使用libmemcached来写入数据白色MEMCACHED_DISTRIBUTION_CONSISTENT_KETAMA用法。所有密钥都沿着所有集群节点很好地分布,但是当我关闭其中一个节点时,密钥不会被迁移。在Google上搜索并不清楚如何设置libmemcached来自动执行此操作。任何人都有这方面的经验吗?
答案 0 :(得分:1)
我认为您必须使用:http://docs.libmemcached.org/memcached_behavior.html#MEMCACHED_BEHAVIOR_REMOVE_FAILED_SERVERS
如果您不允许libmemcached删除失败的服务器,它们会卡在列表中,因此密钥不会重新分发。
请注意,在MEMCACHED_BEHAVIOR_DEAD_TIMEOUT(请参阅1,2)秒后,将再次测试死服务器。因此,如果它再次出现,它将被带回完整的服务器列表。
答案 1 :(得分:0)
如果memcached服务器出现故障,Libmemcached不会在内部处理密钥迁移。当libmemcached尝试检索存储在故障服务器中的密钥时,在这种情况下将存在缓存未命中。
如果我们使用MEMCACHED_DISTRIBUTION_CONSISTENT_KETAMA,它将确保缓存未命中最小,因为密钥是分布式的,并且不需要完全重新散列。
解决方案: 您可以跨多个节点复制密钥,这有助于您在服务器发生故障时检索(密钥,值)对。但请注意,它不是一个强烈一致的解决方案。存在陈旧数据的可能性。
EVICT已失败的服务器,以便将密钥散列到新位置,并将其从群集中删除。