我的理解是在「一致哈希」模式下使用memcached時,當一個節點關閉時,客戶端將用算法重新映射密鑰。Memcached一致性哈希&網絡分區,如何解決?
考慮我有2個客戶端(A,B)和兩個服務器(C,d)
如果客戶A認爲服務器C是下跌,而B認爲C還活着?
所以A會繼續使用C & D,但B只會用D.如何解決這種情況下產生的數據不一致?
我的理解是在「一致哈希」模式下使用memcached時,當一個節點關閉時,客戶端將用算法重新映射密鑰。Memcached一致性哈希&網絡分區,如何解決?
考慮我有2個客戶端(A,B)和兩個服務器(C,d)
如果客戶A認爲服務器C是下跌,而B認爲C還活着?
所以A會繼續使用C & D,但B只會用D.如何解決這種情況下產生的數據不一致?
我使用一箇中央「可用性」服務器,它運行自己的memcached守護進程,並提供一個名爲「avail_servers」的密鑰,該密鑰返回所有可用的memcached服務器的數組。這是不斷刷新。
我的web服務器首先連接到這個中央服務器,從中獲取可用服務器的列表,然後用它來存儲/檢索值。您可以編寫一些額外的檢查,以便如果您的「A」服務器仍然將「可用」列表中的服務器視爲關閉,它將停止提供服務,直到問題解決。
好,但這樣做,你已經引入了單點故障。那麼你是如何解決這個問題的? –
你可以使用類似Zookeeper的東西,而不是一個集中的服務器來保持活着的服務器的映射。所有服務器將不得不定期檢查以維持其「租賃」。 – Dimos