目录
三、ZooKeeper的部署方式有哪几种?集群中的角色有哪些?集群最少需要几台机器?
一、ZooKeeper的选举机制
集群中的每台机器都参与投票,通过交换选票得到每台机器的最终得票,
一旦出现得票数超过机器总数一半以上数量,当前机器即为leader。
1.举例说明1
场景:以5台机器为例,集群的机器顺时启动,当前集群中没有任何数据。
①. server1 启动,首先server1给自己投一票,然后看当前票数是否超过半数,结果没有超过,
这时候leader就没选出来,当前选举状态是locking状态。
②. server2 启动,首先server2先给自己投一票,因为当前集群已经有两台机器已启动,所以server1,server2会交换选票,交换后发现各自有一票,接下来比较myid 发现server2的myid值 > server2的myid值此时server2胜出,最后server2有两票。最后再看当前票数是否半,发现未过半,集群的选举状态保持locking状态。
③. server3启动, 首先自己投自己一票,server1和server2也会投自己一票,然后交换选票发现都一样,接着比较myid 最后server3胜出,此时server3就有3票,同时server3的票数超过半数。所以server3成为leader。
④. server4启动,发现当前集群已经有leader 它自己自动成为follower
⑤. server5启动,发现当前集群已经有leader 它自己自动成为follower
2. 举例说明2
场景:以5台机器为例,当前集群正在使用(有数据/没数据),leader突然宕机的情况。
当集群中的leader挂掉,集群会重新选出一个leader,此时首先会比较每一台机器的czxid,
czxid最大的被选为leader。极端情况,czxid都相等的情况,那么就会直接比较myid。
(czxid:表明最后文件同步时间,越往后越大)
二、ZooKeeper的监听原理
1、监听原理详解:
1)首先要有一个main()线程
2)在main线程中创建Zookeeper客户端,这时就会创建两个线程,一个负责网络连接通信( connet) ,一个负责监听( listener) 。
3)通过connect线程将注册的监听事件发送给Zookeeper。
4)在Zookeeper的注册监听器列表中将注册的监听事件添加到列表中。
5) Zookeeper监听到有数据或路径变化,就会将这个消息发送给listener线程。
6) listener线程内部调用了procesO0方法。
2、常见的监听
监听节点数据的变化 | 监听子节点增减的变化 |
get path [watch] | ls path [watch] |
三、ZooKeeper的部署方式有哪几种?集群中的角色有哪些?集群最少需要几台机器?
(1)部署方式单机模式、集群模式
(2)角色:Leader和Follower
(3)集群最少需要机器数:3
四、一般情况下ZK集群更推荐使用奇数台机器原因?
在ZK集群中 奇数台 和 偶数台(接近的台数) 机器的容错能力是一样的,所以在考虑资源节省的情况,我们推荐使用奇数台方案
五、ZK的写数据流程
1. 客户端会向ZK集群中的一台机器server1发送写数据的请求。
2. server1接收到请求后,马上会通知leader 有写数据的请求来了
3. leader拿到请求后,进行广播,让集群每一台机器都准备要写数据
4. 集群中的所有机机器接收到leader广播后都回应一下leader
5. leader再次进行广播 开始写数据,其他机器接收到广播后也开始写数据
6. 数据成功写入后,回应leader,最后由leader来做整个事务提交
7. 当数据成功写入后,有最初和客户端发生连接的 server1 回应客户端数据写入成功。
六、 ZooKeeper的常用命令
ls create get delete set