Zookeeper是一个树状结构,维护一个小型的数据节点Znode。
数据以keyvalue的方式存在,目录是数据的key。
所有的数据访问都必须以绝对路径的方式显示。
Znode是层次结构,每个Znode都有一个唯一的路径标识
临时节点:创建临时节点,会话结束之后临时节点会被自动删除。
持久节点:节点会一直存在,直到显示删除。主要用于存储配置信息和状态信息等。
序列节点:节点在创建的时候可以设置一个单调递增的序列号,用于实现分布式队列等场景。
例子:
临时节点:
zookeeper启动之后会生成临时节点,持久节点和序列节点,临时节点的主要作用就是让zookeeper和备用的NameNode对主NameNode做一个监听,因为临时节点只在一次会话中有效,所以当主NameNode宕机之后临时节点也就跟着删除了,zookeeper和备用的NameNode监听到主NameNode宕机之后会进行重新选主。
序列节点:
当主NameNode因为网络波动造成临时宕机,备用节点经过选举之后成为主节点,这种情况下就容易产生脑裂问题。如何解决脑裂问题?隔离。如何隔离?这里就要用到序列节点,序列节点内维护了一个单调递增的序列号,假如备用节点在没有成为主之前他的序列号为1,当他成为主之后序列号户单挑递增1,也就是说他成为主之后他的序列号变成了2,那QJM,DataNode全部更新为2,当原来的主恢复之后,他的序列号还是为1,这就形成了隔离。