分布式选举
集群:两个或两个以上的服务器组建而成
数据库集群-->读写功能
管理集群-->管理、故障恢复等功能
主节点,在一个分布式集群中负责对其他节点的协调和管理。主节点的存在,就可以保证其他节点的有序运行,以及数据库集群中的写入数据在每个节点上的一致性
分布式选举算法:基于序号选举的算法(比如Bully算法)、多数派算法(比如,Raft算法、ZAB算法)
Bully算法:在所有活着的节点中,选取ID最大的节点作为主节点
Election消息,用于发起选举;Alive消息,对Election消息的应答;Victory消息,竞选成功的主节点向其他节点发送的宣誓主权的消息
优点:选举速度快、算法复杂度低、简单易实现
缺点:需要每个节点有全局的节点信息,因此额外信息存储较多;其次,任意一个比当前主节点ID大的新节点或节点故障后恢复加入集群的时候,都可能会触发重新选举,成为新的主节点,如果该节点频繁退出、加入集群,就会导致频繁切主。
Raft算法:少数服从多数
集群节点的角色:Leader,主节点,同一时刻只有一个Leader,负责协调和管理其他节点;Candidate,候选者,每一个节点都可以成为Candidate,节点在该角色下才可以被选为新的Leader;Follower,Leader的跟随着,不可以发起选举
etcd的集群管理器etcds,是一个高可用、强一致性的服务发现存储仓库,就是采用了Raft算法来实现选主和一致性的
优点:选举速度快、算法复杂度低、易于实现
缺点:要求系统内每个节点都可以相互通信,且需要获得过半的投票数才能选主成功,因此通信量大
该算法选举稳定性比Bully算法好,因为当有新节点加入或节点故障恢复后,会触发选主,但不一定会真正切主,除非新节点或故障后恢复的节点获得投票数过半,才会导致切主
ZAB算法:优先级民主投票
相较于Raft算法的投票机制,ZAB算法增加了通过节点ID和数据ID作为参考进行选主,节点ID和数据ID越大,表示数据越新,优先成为主。相比较于Raft算法,ZAB算法尽可能保证数据的最新性
Leader,主节点;Follower,跟随者节点;Observer,观察者,无投票权
Looking状态:选举状态。
Leading状态:
Following状态:
Observing状态:
优点:性能高,对系统无特殊要求,采用广播方式发送信息,容易出现广播风暴;选举时间相对较长。稳定性好。