这里写自定义目录标题
Zookeeper概述
- 协调分布式环境;Zookeeper相当于文件文件系统+通知机制,存储服务器信息,并将变化通知给客户端以便其做出反应
Zookeeper特点
- 一个leader,多个follower
- 集群中只要半数以上服务器存货,就可启动集群
- zookeeper集群中所有服务器数据始终保持一致
监听原理
- –1. 主线程main中创建Zookeeper客户端时会创建sedThread和eventThread两个线程(sedThread:发送请求线程;eventThread监听事件的线程)
- –2. 通过sedThread将注册的监听事件发送给Zookeeper
- –3. Zookeeper将收到的监听事件添加到监听列表中
- –4. 当监听的数据或路径发生变化,Zookeeper就会将信息返回给eventThread线程
- –5. eventThread线程内部就会调用相应的回调函数
选举机制
以5个节点的集群为例:
五个节点依次启动:
- 节点1启动,发起一次选举,并投自己一票,此时启动的节点数未达集群半数以上,故节点1保持looking状态
- 节点2启动,发起一次选择,投自己一票;并与节点一交换信息发现2大(判断标准:比较两节点的zxid,zxid一样的情况下比较两节点的myid),此时节点1将选票信息改为2,节点2持2票,但此时启动的节点数未达集群半数以上,故节点1、2仍保持looking状态
- 节点3启动,发起一次选举,并投自己一票,并与节点1、2交换信息发现3大,此时1、2节点都将选票信息改为3。3号节点持3票,超过集群半数以上,故3号节点称为leader(leading状态),1、2节点为follower(following状态)
- 节点4启动,发起一次选举,并投自己一票,并与其他节点交换信息发现服务器3有3票,自己一票,此时1,2不是looking状态,不会更改选票信息,所以少数服从多数,4将选票信息改为3,变为follower
- 5节点启动后同4过程一样
五个节点一起启动:
- 节点5将当选leader,因为5得myid最大
写数据流程
- – 服务器收到客户端请求后,若自己不是leader,就会将请求转交给Leader
- –leader收到后将该请求广播给各个server
- –各server收到后将该请求插入自己得待写队列,并回复leader
- –当回复成功的server数量超过半数以上时,leader就会发送提交信息
- –各server收到后就会将待写队列中的任务真正写入
- –与客户端交互的服务器就会回复客户端写入成功
注:当个别server回复给leader的是不同意写入,但是还收到leader的提交信息时,server就会自杀并从其他server同步数据并写入