場景有兩種:
1.異步復制
2. 主從切換
假設集群中發生網絡分區, 那么集群可能會分裂為兩方, 大多數(majority)的一方包含節點 A 、C 、A1 、B1 和 C1 , 而少數(minority)的一方則包含節點 B 和客戶端 Z1 。
在網絡分裂期間, 主節點 B 仍然會接受 Z1 發送的寫命令:
- 如果網絡分裂出現的時間很短, 那么集群會繼續正常運行;
- 但是, 如果網絡分裂出現的時間足夠長, 使得大多數一方將從節點 B1 設置為新的主節點, 並使用 B1 來代替原來的主節點 B , 那么 Z1 發送給主節點 B 的寫命令將丟失。
在網絡分區出現期間, 客戶端 Z1 可以向主節點 B 發送寫命令的最大時間是有限制的, 這一時間限制稱為節點超時時間(node timeout), 是 Redis 集群的一個重要的配置選項:
- 對於大多數一方來說, 如果一個主節點未能在節點超時時間所設定的時限內重新聯系上集群, 那么集群會將這個主節點視為下線, 並使用從節點來代替這個主節點繼續工作。
- 對於少數一方, 如果一個主節點未能在節點超時時間所設定的時限內重新聯系上集群, 那么它將停止處理寫命令, 並向客戶端報告錯誤。