【问题标题】:libmemcached fail over of a cluster's node集群节点的 libmemcached 故障转移
【发布时间】:2012-04-05 13:22:17
【问题描述】:

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

【问题讨论】:

  • 当您说已迁移时,您的意思是密钥上的任何新sets 都失败了吗?
  • 是的,关闭节点上的新密钥集无法在新服务器上设置。

标签: c++ c memcached libmemcached


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-03-19
      • 2014-06-14
      • 1970-01-01
      • 2011-05-28
      • 2010-10-21
      • 1970-01-01
      • 2011-05-21
      • 1970-01-01
      相关资源
      最近更新 更多