zookeeper学习总结第一篇:zookeeper功能简要

一、zookeeper功能描述       

       zookeeper是一个开源的、分布式的服务框架,是Hadoop的一个子项目。zookeeper被应用到很多分布式应用场景,如被广泛应用到Hadoop生态体系中为各种框架提供分布式协调服务。

但其实zookeeper的功能非常简单,主要包含以下两个功能:
1、替客户端保存数据;
2、为客户端提供数据的监听服务(如数据发生变化则通知客户端)

 

二、zookeeper应用场景

       zookeeper本身的功能简单但被广泛应用主要是因为我们可以利用其功能性质来简化分布式的应用开发,实现一些分布式的协调服务,例如,我们可以利用zookeeper实现以下的分布式协调服务:
1、统一名称服务

        利用zookeeper的数据存储结构和znode特点,可以为一些对象创建一个全局的唯一的path,这个path可以作为这个对象的名称,唯一地指向对象,一般用于标志集群中的机器、远程服务等。


2、发布/订阅系统、分布式配置管理中心

       发布/订阅系统与分布式配置管理中心实质上是同一个东西,都依赖于zookeeper的数据保存和监听功能。

  • 发布/订阅系统,发布者向zookeeper发布内容(即把要发布的信息写入znode);订阅者向zookeeper订阅内容(即获取znode上的信息),并且对订阅的内容进行监听(即向需要获取的znode节点注册监听器-watcher),一旦发布者更新了内容,就会触发watcher事件通知订阅者。
  • 分布式配置管理中心,在分布式集群中,可以将集群的配置信息注册到zookeeper上,并且每台服务器都对这些配置信息进行监听,当配置信息发生改变时,集群中的每一台服务器都可以及时动态地获取最新的配置。


3、分布式锁(分布式服务一起竞争共享资源时为服务分配资源锁)
4、集群节点状态协调(负载均衡/主从协调)

 

三、zookeeper集群

      zookeeper本身是一个分布式的应用,我们可以使用单节点模式,也可以使用分布式模式。但无论是哪一种模式,对于客户端而言,zookeeper都可以看做一个整体,或者说是一个黑匣子,客户端只需要连接zookeeper集群的其中一台机器,就等于是连接整个集群。
      在集群模式下,zookeeper的节点有三种类型:

  • leader server:特殊之处在于具有决定权,具有request processor;
  • follower server;
  • observer server(很少使用,在较简单的集群下一般不需要)

    在只有leader、follower server的情况下,集群中只有一个leader,剩下的都是follower。

    注:observer server与follower server 的区别就在于不参与leader的选举;


       zookeeper的集群模式配置不需要像hdfs那样配置指定name node,data node....,只需要配置集群有哪些服务器组成,然后zookeeper会动态选举哪台机器是leader,剩下的就是follower。
       leader和follower之间有心跳(可以配置心跳的时间间隔),通过每隔一段时间的心跳检测,leader和follower可以互相知道彼此是否存在,当follower发现leader挂掉时,follower会再次动态的选举一个leader(选举算法:paxos);当leader发现follower挂掉时,会更新一些关于集群服务的信息。
       另外,zookeeper集群中只要有半数以上节点活着,集群就可以正常提供服务,比如有5个节点的集群,最多可以挂掉两台机器,原因在于选举算法,因为选举算法需要某一台机器获取半数以上的票数才能当选leader(如果没有机器达到票数,则再次重新选举),因此当挂掉>=半数机器时,没有节点能被选举成leader,因此集群不能工作。
注:集群中服务器节点个数最好是奇数。

       基于zookeeper这样的工作机制,zookeeper集群具有高可用性和稳定性,也因此可以为其他的分布式应用提供可靠的服务。

 

四、zookeeper数据结构及znode

       zookeeper保存数据的结构类似于树结构,其中的每个数据节点叫znode,可以通过路径来访问指定的znode。znode具有一些以下特点:
(1)客户端可以对指定的znode进行监听,同时可以设置不同的监听类型(可以监听指定znode的状态/数据的变化,或者监听指定znode的子节点的变化),当znode发生变化时会触发监听器(watcher)通知客户端,并且监听器是一次性的,就是每注册一次监听器只会触发一次,因此要持久监听的话就要在每次监听器失效后重新注册一次。      
(2)每个znode维护着一些数据:数据(客户端存入的数据)、stat数据(ACL(访问权限)、时间戳以及版本号),这些数据量都很小,KB级别的。
(3)znode的数据每次更新后版本号(每更新一次+1)、时间等信息也会更新。
(4)znode还具有原子性操作的特点:写--全部替换,读--全部数据读取;也是就读操作将会读取节点相关所有数据,写操作也会修改节点相关所有数据。
(5)znode有临时节点和永久节点两种,临时节点指:当创建它的session一结束,该节点也会被zookeeper删除,永久节点就不会。另外临时节点和永久节点也分有序的无序的。即znode具有以下4种类型节点:

  • 临时节点(EPHEMERAL):临时创建的,会话结束节点自动被删除,也可以手动删除,临时节点不能拥有子节点
  • 临时顺序节点(EPHEMERAL_SEQUENTIAL):具有临时节点特征,但是它会在节点名称后自动添加一个序列号,如分布式锁中会用到该类型节点
  • 永久节点(PERSISTENT):创建后永久存在,除非主动删除。
  • 持永久顺序节点(PERSISTENT_SEQUENTIAL):该节点创建后持久存在,相对于持久节点它会在节点名称后面自动增加一个10位的数字序列号,这个计数对于此节点的父节点是唯一,此节点的父节点每添加一个新节点该序号+1,但如果这个序列号大于2^32-1就会溢出。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值