zookeeper应用:
You can use it off-the-shelf to implement consensus, group management, leader election, and presence protocols. And you can build on it for your own, specific needs.
集群节点为什么建议奇数个?
只有超过一半的节点正常,集群才正常,才可以对外服务。
所以,1个节点可以;2个节点,死一个集群就不能用了,所以和一个是一样的;
三个节点,四个节点死一个可以用,死两个不能用,所以和三个是一样的。
所以,需要配置奇数个节点。
zookeeper如何选举?投票结果超过一半立马成为leader,其余的自动成为follower
假如有三个节点
- 启动集群时:
1、集群启动时,发送投票,自己选举自己为leader,只有一台可选举,但是没有超过半数,进入looking状态;
2、第二台启动,发送投票,自己选举自己为leader,与第一台交换信息,会进行比较epoch、zxid(新启动这两个值都相等),然后比较myid,选举出myid大的那个,此时一定会有一个节点票数超过2,会产生leader
3、第三个一定是follower
- 集群运行时,发现leader死了进行重新选举,每个节点都发起一轮投票,此时每个节点投票的方式就是先比较epoch、再比较zxid、最后比较myid
znode注册事件模式:
/***
* CreateMode value determines how the znode is created on ZooKeeper.
*/
public enum CreateMode {
/**
* The znode will not be automatically deleted upon client's disconnect.
*/
PERSISTENT (0, false, false),
/**
* The znode will not be automatically deleted upon client's disconnect,
* and its name will be appended with a monotonically increasing number.
*/
PERSISTENT_SEQUENTIAL (2, false, true),
/**
* The znode will be deleted upon the client's disconnect.
*/
EPHEMERAL (1, tru