為什么zoo-keeper 的節點必須是奇數個, 或者分布式存儲的節點必須是奇數個
- 系統要求節點獲得大多數支持時才可以更新數據,當集群腦裂時, 如果小集群的節點數相等,那么都沒有大多數的支持,也就無法提供服務。
- 當集群恢復時,必須以大多數的小集群去覆蓋少數的小集群, 如果平分了集群,則無法恢復數據
分布式存儲的目標和不可能三角CAP
CAP很多人都知道,圖片也很清除了。這里不多說
分布式的算法 Raft 簡介
Raft 涉及的階段
- 選舉: 每個集群都要有領導節點。選舉等待超時后, 節點向其它節點拉票, 得到majority票的節點成為領導節點
- 二段提交: 領導節點接受更新請求,並保存到binlog, 然后同步binlog 到其它節點, 同步成功之后。領導節點提交,然后通知其它節點提交
- 心跳超時: 領導節點定時向所有節點發送心跳,收到心跳后,重置心跳超時,如果心跳超時,則節點會發起新的選舉
Raft 的流程
1 -> 2 -> 3 -> 1 循環