Zookeeper的一些问题

八、请简述ZooKeeper的选举机制?
全新集群选举:
假设目前有5台服务器,每台服务器均没有数据,它们的编号分别是1,2,3,4,5,按编号依次启动,它们的选举过程如下:
服务器1启动,给自己投票,然后发投票信息,由于其它机器还没有启动所以它收不到反馈信息,服务器1的状态一直属于Looking。
服务器2启动,给自己投票,同时与之前启动的服务器1交换结果,由于服务器2的编号大所以服务器2胜出,但此时投票数没有大于半数,所以两个服务器的状态依然是LOOKING。
服务器3启动,给自己投票,同时与之前启动的服务器1,2交换信息,由于服务器3的编号最大所以服务器3胜出,此时投票数正好大于半数,所以服务器3成为Leader,服务器1,2成为Follower。
服务器4启动,给自己投票,同时与之前启动的服务器1,2,3交换信息,尽管服务器4的编号大,但之前服务器3已经胜出,所以服务器4只能成为Follower。
服务器5启动,后面的逻辑同服务器4成为Follower。

非全新集群选举				
	对于运行正常的zookeeper集群,中途有机器down掉,需要重新选举时,选举过程就需要加入数据ID、服务器ID和逻辑时钟。
	(数据ID、服务器ID和逻辑时钟含义说明)
	数据ID:数据新的version就大,数据每次更新都会更新version。
	服务器ID:就是我们配置的myid中的值,每个机器一个。
	逻辑时钟:这个值从0开始递增,每次选举对应一个值。 如果在同一次选举中,这个值是一致的。
	选举的标准为:
		1.逻辑时钟小的选举结果被忽略,重新投票;
		2.统一逻辑时钟后,数据id大的胜出,当选leader;
		3.数据id相同的情况下,服务器id大的胜出,当选leader;

九、请简述zookeeper监听原理是什么?
1)首先要有一个main()线程
2)在main线程中创建Zookeeper客户端,这时就会创建两个线程,一个负责网络连接通信(connet),一个负责监听(listener)
3)通过connect线程将注册的监听事件发送给Zookeeper
4)在Zookeeper的注册监听器列表中将注册的监听事件添加到列表中
5)Zookeeper监听到有数据或路径变化,就会将这个消息发送给listener线程
6)listener线程内部调用process()方法

十、请简述zookeeper数据的写流程?
1)Client向ZooKeeper的Server1 写数据,发送一个写请求
2)如果Server1不是Leader,那么Server1会把接受到的这个事务请求进一步转发给Leader。
Leader会将写请求广播给各个Server,各个Server写成功后,会向Leader发送成功信息
3)当Leader收到半数以上(大多数) Server数据写成功的信息,说明该数据写成功了。Leader会告诉server1数据写成功了.
4)Server1会进一步通知 Client 数据写成功了,就认为整个写操作成功

十一、ZooKeeper的部署方式有哪几种?集群中的角色有哪些?集群最少需要几台机器?
1)部署方式:单机模式、集群模式
2)集群的角色:Leader、Follower、Observer
Leader:Zookeeper集群工作的核心,处理事务请求的唯一调度和处理者,保证集群事务处理的顺序性,并且是集群内各个服务器的总调度者。 事务说明:对于creat,setData,delete等有写操作的请求,则需要统一转发给leader处理。leader需要决定编号、执行操作,这个过程称为一个事务
Follower:处理客户端非事务(读操作)请求,转发事务请求给Leader,参与集群Leader选举投票
Observer:对于访问量比较大的集群,可以新增观察者角色,处理客户端非事务(读操作)请求,转发事务请求给Leader,不参与集群Leader选举投票

3)集群最少需要机器数:3     (2n+1台)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值