网站开发询价单,亚马逊品牌官网建设,普通下载app安装app,文档阅读网站模板下载Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目#xff0c;它主要是用来解决分布式应用中经常遇到的一些数据管理问题#xff0c;如#xff1a;统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。本文将从使用者角度详细介绍 Zookeeper 的安装和配… Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目它主要是用来解决分布式应用中经常遇到的一些数据管理问题如统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。本文将从使用者角度详细介绍 Zookeeper 的安装和配置文件中各个配置项的意义以及分析 Zookeeper 的典型的应用场景配置文件的管理、集群管理、同步锁、Leader 选举、队列管理等用 Java 实现它们并给出示例代码。 ZooKeeper 是一个为分布式应用所设计的分布的、开源的协调服务。分布式的应用可以建立在同步、配置管理、分组和命名等服务的更高级别的实现的基础之上。 ZooKeeper 意欲设计一个易于编程的环境它的文件系统使用我们所熟悉的目录树结构。 ZooKeeper 使用Java 所编写但是支持 Java 和 C 两种编程语言。 众所周知协调服务非常容易出错但是却很难恢复正常例如协调服务很容易处于竞态以至于出现死锁。我们设计 ZooKeeper 的目的是为了减轻分布式应用程序所承担的协调任务。 ZooKeeper是一个高可用、高可靠的协同工作系统分布式程序可以用ZooKeeper保存并更新关键共享状态。 zookeeper是针对分布式应用的分布式协作服务它的目的就是为了减轻分布式应用从头开发协作服务的负担。 Zookeeper 作为一个分布式的服务框架主要用来解决分布式集群中应用系统的一致性问题它能提供基于类似于文件系统的目录节点树方式的数据存储但是 Zookeeper 并不是用来专门存储数据的它的作用主要是用来维护和监控你存储的数据的状态变化。通过监控这些数据状态的变化从而可以达到基于数据的集群管理。 ZooKeeper是一个分布式的开放源码的分布式应用程序协调服务它包含一个简单的原语集分布式应用程序可以基于它实现同步服务配置维护 和命名服务等。Zookeeper是hadoop的一个子项目其发展历程无需赘述。在分布式应用中由于工程师不能很好地使用锁机制以及基于消息的协 调机制不适合在某些应用中使用因此需要有一种可靠的、可扩展的、分布式的、可配置的协调机制来统一系统的状态。Zookeeper的目的就在于此。 zookeeper的下载地址http://www.apache.org/dyn/closer.cgi/zookeeper/ 下载好后的zookeeper解压到一个地方目录大概是这样的 F:\zookeeper-3.3.6 的目录 2014/09/16 17:04 DIR . 2014/09/16 17:04 DIR .. 2014/09/16 16:10 DIR bin 2012/07/29 14:23 59,687 build.xml 2012/07/29 14:23 52,566 CHANGES.txt 2014/09/16 17:06 DIR conf 2014/09/16 16:10 DIR contrib 2014/09/16 17:09 DIR data 2014/09/16 16:10 DIR dist-maven 2014/09/16 16:10 DIR docs 2012/07/29 14:23 2,415 ivy.xml 2012/07/29 14:23 1,932 ivysettings.xml 2014/09/16 16:10 DIR lib 2012/07/29 14:23 11,358 LICENSE.txt 2014/09/16 17:04 DIR log 2012/07/29 14:23 165 NOTICE.txt 2012/07/29 14:23 1,578 README.txt 2014/09/16 16:10 DIR recipes 2014/09/16 16:10 DIR src 2012/07/29 14:23 1,031,338 zookeeper-3.3.6.jar 2012/07/29 14:25 198 zookeeper-3.3.6.jar.asc 2012/07/29 14:23 33 zookeeper-3.3.6.jar.md5 2012/07/29 14:23 41 zookeeper-3.3.6.jar.sha1 11 个文件 1,161,311 字节 12 个目录 94,507,941,888 可用字节 进到conf目录下复制一个名字为zoo_sample.cfg的文件并修改名字为zoo.cfg 添加如下内容 # The number of milliseconds of each tick 维持心跳的时间间隔 tickTime2000 # The number of ticks that the initial # synchronization phase can take initLimit10 # The number of ticks that can pass between # sending a request and getting an acknowledgement syncLimit5 # the directory where the snapshot isstored. 镜像数据位置 dataDirF:\\zookeeper-3.3.6\\data #日志位置 dataLogDirF:\\zookeeper-3.3.6\\log # the port at which the clients will connect 客户端连接的端口 clientPort2181 这里简单的说明一下这些配置只是做一个简单的测试并未做分布式处理 dataDir就是zookeeper的镜像数据位置这个文件需要用户自行设置博主暂时将其放在zookeeper的子目录下的data文件中 dataLogDir就是zookeeper的日志记录位置这个文件同样需要用户自行设置博主暂时将其放在zookeeper的子目录下log文件中 做完上面的这些后就可以启动zookeeper了启动的方式就是执行zookeeper/bin目录下的zkServer.cmd文件即可 启动完成后就可以重启一个命令窗口连接zookeeper了 连接zookeeper的命令同样是bin目录下的zkCli.sh –server 127.0.0.1:2182 连接成功后就可以输入相关的命令了 刚开始由于我们不知道输入什么命令zookeeper会给出一个help connect host:port get path [watch] ls path [watch] set path data [version] delquota [-n|-b] path quit printwatches on|off create [-s] [-e] path data stat path [watch] close ls2 path [watch] history listquota path setAcl path acl getAcl path sync path redo cmdno addauth scheme auth delete path [version] setquota -n|-b val path ls(查看当前节点数据), ls2(查看当前节点数据并能看到更新次数等数据) , create(创建一个节点) , get(得到一个节点包含数据和更新次数等数据), set(修改节点) delete(删除一个节点) 通过上述命令实践我们可以发现zookeeper使用了一个类似文件系统的树结构数据可以挂在某个节点上可以对这个节点进行删改。另外我们还发现当改动一个节点的时候集群中活着的机器都会更新到一致的数据。 zookeeper的数据模型 在简单使用了zookeeper之后我们发现其数据模型有些像操作系统的文件结构结构如下图所示 (1) 每个节点在zookeeper中叫做znode,并且其有一个唯一的路径标识如/SERVER2节点的标识就为/APP3/SERVER2 (2) Znode可以有子znode并且znode里可以存数据但是EPHEMERAL类型的节点不能有子节点 (3) Znode中的数据可以有多个版本比如某一个路径下存有多个数据版本那么查询这个路径下的数据就需要带上版本。 (4) znode 可以是临时节点一旦创建这个 znode 的客户端与服务器失去联系这个 znode 也将自动删除Zookeeper 的客户端和服务器通信采用长连接方式每个客户端和 服务器通过心跳来保持连接这个连接状态称为 session如果 znode 是临时节点这个 session 失效znode 也就删除了 (5) znode 的目录名可以自动编号如 App1 已经存在再创建的话将会自动命名为 App2 (6) znode 可以被监控包括这个目录节点中存储的数据的修改子节点目录的变化等一旦变化可以通知设置监控的客户端这个功能是zookeeper对于应用最重要的特性通过这个特性可以实现的功能包括配置的集中管理集群管理分布式锁等等。