为什么zoo-keeper 的节点必须是奇数个, 或者分布式存储的节点必须是奇数个
- 系统要求节点获得大多数支持时才可以更新数据,当集群脑裂时, 如果小集群的节点数相等,那么都没有大多数的支持,也就无法提供服务。
- 当集群恢复时,必须以大多数的小集群去覆盖少数的小集群, 如果平分了集群,则无法恢复数据
分布式存储的目标和不可能三角CAP
CAP很多人都知道,图片也很清除了。这里不多说
分布式的算法 Raft 简介
Raft 涉及的阶段
- 选举: 每个集群都要有领导节点。选举等待超时后, 节点向其它节点拉票, 得到majority票的节点成为领导节点
- 二段提交: 领导节点接受更新请求,并保存到binlog, 然后同步binlog 到其它节点, 同步成功之后。领导节点提交,然后通知其它节点提交
- 心跳超时: 领导节点定时向所有节点发送心跳,收到心跳后,重置心跳超时,如果心跳超时,则节点会发起新的选举
Raft 的流程
1 -> 2 -> 3 -> 1 循环