Memcached一致哈希&网络分区,如何解决?

时间:2013-10-28 14:28:36

标签: memcached consistency spymemcached consistent-hashing

我的理解是当在“一致散列”模式下使用memcached时,当节点关闭时,客户端将使用算法重新映射密钥。

考虑我有2个客户端(A,B)和两个服务器(C,D)

如果客户A认为服务器C已关闭,但B认为C仍然存在,该怎么办?

所以A会继续使用C& D,但B只会使用D.如何解决这种情况引起的数据不一致?

2 个答案:

答案 0 :(得分:1)

您必须确保服务器A和B看到相同的memcached实例状态。我认为当memcached实例(C& D)隐藏在代理(moxitwemproxy)后面时可以实现。代理将负责维护memcached实例的状态。应用程序服务器(A& B)应仅连接到代理服务器。

答案 1 :(得分:0)

我使用一个中央“可用性”服务器,它运行自己的memcached守护进程并提供一个名为“avail_servers”的密钥,它返回所有可用memcached服务器的数组。这一点不断刷新。

我的网络服务器首先连接到此中央服务器,从中获取可用服务器列表,然后使用它来存储/检索值。您可以编写一些额外的检查,以便如果您的“A”服务器仍然将“可用”列表中的服务器视为关闭,它将停止提供服务,直到问题得到解决。