4

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

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

如果客户端 A 认为服务器 C 已关闭,但 B 认为 C 还活着怎么办?

所以A会继续使用C&D,而B只会使用D。如何解决这种情况下出现的数据不一致?

4

2 回答 2

1

You have to make sure that servers A and B see the same state of memcached instances. I think that it can be achieved when memcached instances (C & D) will be hidden behind proxy (moxi or twemproxy). The proxy will be responsible for maintaining state of memcached instances. Application servers (A & B) should connect only to the proxy.

于 2013-10-29T12:17:24.690 回答
0

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

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

于 2013-11-01T22:56:31.170 回答