zookeeper(一)基本组成

心不动则不痛 提交于 2019-11-28 16:16:35

  (一)Zookeeper集群组成结构

     Zookeeper由leader(领导者)learner(学习者)组成,其中learner由follower(跟随者)和observer(观察者)组成。在一个zookeeper集群中,一般是一个leader节点,多个follower节点,observer节点可选。在一个正式的zookeeper环境中,一般由2n+1(奇数)台servers组成,主要是为了保证learder的选举能够得到大多数的支持,也就是说只要n+1台机器支持,那么就可以保证集群的可用性。

 (二)Zookeeper角色的作用

  1. 领导者(leader),负责进行投票的发起和决议,更新系统状态
  2. 学习者(learner),包括跟随者(follower)和观察者(observer)。
  3. Follower用于接受客户端请求并向客户端返回结果,在选主过程中参与投票
  4. Observer可以接受客户端请求,将写请求转发给leader,但observer不参加投票过程,只同步leader的状态,observer的目的是为了扩展系统,提高读取速度
  5. 客户端(client),请求发起方

(三)Zookeeper读写过程

 1. client端连接上zookeeper集群的任何一台机器就可以了
 2. 进行读操作的时候,直接从client连接的机器上读取数据即可(zookeeper保证数据的操作顺序一致性)
 3. 当进行写操作的时候,如果client端连接的机器是leader机器,那么由leader机器负责数据的写操作,以及数据的集群同步操作。如果连接的机器不是leader机器,那么由连接的机器将请求转发给leader机器,进行写操作。
总结:读操作可以发生在任何机器上,更新(写、删除等)操作只能发生在leader机器上。

(四)Zookeeper服务模型

    ZooKeeper拥有一个层次的命名空间,这个和分布式的文件系统非常相似。不同的是ZooKeeper命名空间中的Znode,兼具文件和目录两种特点。既像文件一样维护着数据、元信息、ACL、时间戳等数据结构,又像目录一样可以作为路径标识的一部分,并可以具有子znode。用户对znode具有增、删、改、查等操作(权限允许的情况下)。
    Znode具有原子性操作,每个znode的数据将被原子性地读写,读操作会读取与znode相关的所有数据,写操作会一次性替换所有数据。zookeeper的设计主要是用于管理调度数据,而不是用于常规的数据库和数据存储服务,每个znode的数据大小最大为1M,不过一般情况下,都只会有几KB。

                                                            Zookeeper服务模型图

  (五)Zookeeper ZNode属性

    1. state状态信息,在state状态信息中包含了版本号、时间戳等信息,当client操作的znode的状态信息和当前znode的状态信息不同的时候,操作就会失败。
    2. data数据,zookeeper中znode的数据操作是原子操作的。
    3. children子节点;用于表示当前ZNode的子节点列表。

(六)Zookeeper 机制/特性

    1. 会话:当客户端成功连接到Zookeeper服务器时,会创建一个会话(Session)。每个会话有一个有效时间,如果在有效时间内没有发生任何请求操作,那么这个会话会过期。一般通过ping请求保持会话不过期。    
    2. 监控(watch)机制,client可以在znode上设置watch(监视器),当节点的状态发生变化的时候,就会触发watch所对应的操作。当watch被触发的时候,zookeeper会向客户端发送且仅发送一条通知。
    3. zxid机制;每个致使zookeeper发现状态变化的动作都会携带一个zxid格式的时间戳,并且这个时间戳在集群中全局有序。通过zxid来决定操作的顺序。实现中zxid是一个64位的数字,其中高32位数字是epoch用来表示leader,每次一个新的leader产生都会有一个新的epoch;低32位数字是一个递增计数。

(七)Zookeeper ZNode state属性详细说明

Zookeeper ZNode state属性详细说明

(八)Zookeeper ZNode类型

    Zookeeper主要包括两类节点:临时节点和永久节点。临时节点的生命周期依赖于创建该节点的会话,当会话结束的时候,节点自动删除,当然也可以手动删除,另外临时节点不能有子节点。永久节点的生命周期不依赖于会话,只有当客户端显示删除的时候,才会被删除。默认情况下创建的都是永久节点,只有显示的给定命令的时候才创建临时节点。

(九)Zookeeper权限验证

    Zookeeper默认是没有开启权限验证的,也就是说可以被任何人访问到。zookeeper内置有四种scheme,分别为world, auth, digest, ip。其中默认就是world,表示任何人均可以操作。在给znode节点进行权限授予的时候采用格式为: scheme:user:auth,其中scheme为上述介绍的四种,user为用户描述信息,比如digest为username:password;ip为ip地址;auth为权限的缩写,分别为create(c), delete(d), read(r), write(w), admin(a)。

 

 

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!