我的理解是,当在“一致哈希”模式下使用 memcached 时,当节点关闭时,客户端将使用算法重新映射密钥。
考虑我有 2 个客户端(A,B)和两个服务器(C,D)
如果客户端 A 认为服务器 C 已关闭,但 B 认为 C 还活着怎么办?
所以A会继续使用C&D,而B只会使用D。如何解决这种情况下出现的数据不一致?
我的理解是,当在“一致哈希”模式下使用 memcached 时,当节点关闭时,客户端将使用算法重新映射密钥。
考虑我有 2 个客户端(A,B)和两个服务器(C,D)
如果客户端 A 认为服务器 C 已关闭,但 B 认为 C 还活着怎么办?
所以A会继续使用C&D,而B只会使用D。如何解决这种情况下出现的数据不一致?
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.
我使用一个中央“可用性”服务器,它运行自己的 memcached 守护进程并提供一个名为“avail_servers”的键,它返回所有可用 memcached 服务器的数组。这是不断刷新的。
我的网络服务器首先连接到这个中央服务器,从中获取可用服务器的列表,然后使用它来存储/检索值。您可以编写一些额外的检查,以便如果您的“A”服务器仍然看到“可用”列表中的服务器关闭,它会停止提供服务,直到问题得到解决。