三种角色
Leader
负责处理集群的写操作,并发起投票,只有超过半数的节点同意后 才会提交写请求
follower
处理读请求,响应结果。转发写请求到Leader,在选举leader过程中参与投票
observer
没有投票权的follower。主要书协助follower处理读请求。在读请求负载很高的时候才会处理<br>
两种模式
恢复模式
当服务启动或者领导崩溃后,zk进入恢复状态,选举leader, leader选出后,将完成leader和其他机器的数据同步,当大多数Server完成和leader的同步后,恢复模式结束
广播模式
一旦leader已经和多数的follower进行了状态同步后,进入广播模式。进入广播模式后,如果有新加入的机器,会自动从leader中同步数据。leader在接收客户端请求后,会生成事务提案广播给其他的机器,有超过半数以上的follower同意该提议后,再提交事务
leader选举算法
启动过程
1、每一个server发出一个投票给集群中其他的节点
2、收到各个服务器的投票后,判断该投票有效性,比如是否是本轮投票,是否是looking状态
3、处理投票,Pk别人的投票和自己的投票(取大原则)
4、统计是否超过半数的接收相同的选票
5、确认leader,改变服务器状态
6、添加新server,leader已经选举出来,只能以follower身份加入集群中
崩溃恢复过程
1、leader挂掉后,集群中其他follower会将状态从following状态变为looking状态,重新选举leader选举
2、同上启动过程
选举机制(3个核心原则)
1、在集群中只有超过半数以上的服务器启动,集群才能正常工作
2、在集群正常工作之前,myid小的服务器会给myid大的服务器进行投票,持续到集群正常工作,选出leader
3、选择leader之后,之前的服务器状态由looking 改变为following,以后的服务器都是following