1. zookeeper有哪些应用场景?
-
数据发布订阅(配置中心),需要提供地方获取数据,同时如果数据更新了,还需要收到通知。
-
命名服务,即当某个服务还没有开发完毕的时候,就可以对其进行命名,其他需要调用该服务的开发也不会受到影响。
-
master选举,当master节点挂了,需要重新选举,可以使用zookeeper(或者其他工具也可以);有两种方式可以选举master:1)通过在zokeeper上面争抢创建master这个临时节点,谁创建成功了谁就是master;2)通过维护servers这个节点的信息,把所有服务器信息保存到这里,创建顺序临时节点,选取最小的节点用来当作master节点。需要单独创建一个守护进程来一直进行选举。
-
集群管理,实时动态检测集群的加入和离开(需要操作)
-
分布式队列,直接使用zookeeper就可以实现无界的分布式队列,如果要实现有界的分布式队列,则需要用到分布式锁;每个生产者放上去数据的时候需要先获取锁,判断一下是否超了,然后再进行放数据。注意,此时的数据节点不能是临时节点。
-
分布式锁,第一种方式适用于并发量小的时候,因为产生惊群效应;第二种方式适用于并发量大的时候,只需要watch前一个子节点的状态,这样唤醒的进程就只会有一个。
2. zookeeper如何搭建集群?
- initLimit代表加入一个新的节点的时候,如果该节点不能在规定的initLimit完成数据复制,则会被移除;在选举leader的时候也会有该限制,即选举的新leader如果离所有的节点太远,在initLimit时间内无法完成数据复制,则会重新选举。
-
syncLimit是指非leader节点会向leader节点发起请求,leader节点需要在syncLimit时间内回复。
-
zookeeper需要2G内存,对于磁盘不需要很多要求。
3. 如何保证集群数据的一致性?
- 读取数据可以去任意从节点zookeeper读取
-
但是如果是写入数据,则需要通过leader节点来进行。
-
ZAB保证最终一致性,即各个机器更新速度有快有慢,但是通过单调递增事务ID,保证有序性,最终能够读取一致的效果。
4. leader崩溃的情况下,如何进行下一次选举?
答:leader崩溃的情况下,该集群暂时无法使用,需要进行下一次选举。下一次选举的时候,只要leader尚未commit出去的事务都会被忽略,只有已经被commit的事务才会计入计算。选出新的leader之后,会进行数据同步,当半数的节点(包括leader自己)都已经恢复使用之后,则可以开始对外提供服务。
5. 选举算法有哪些?
- 因为竞选比较耗时间,所以可以设置某些节点为observing的状态,只让limited number节点来参与竞选。
-
如果只有三台机器进行选举,三台依次启动,此时一定是第二台当leader。
6. zookeeper保证了CAP的哪些特性?
- C,一致性,保证了
- A,可用性,在重新分配leader的时候无法可用,牺牲了可用性
- P,分区冗余性,保证了