Zookeeper系列(一):它是干什么的

Zookeeper是一款开源的分布式存储系统。node

ZooKeeper主要是用来解决分布式应用中常常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。git

Zookeeper分红客户端和服务端两部分,服务端一般运行于集群模式,统一为客户端提供分布式数据一致性管理服务,集群可提供水平扩展能力,以及避免单点故障。github

ZooKeeper让分布式进程可经过共享的、与标准文件系统相似的分层名字空间相互协调。名字空间由znode组成,znode是和文件目录相似的树形结构。有子节点,而且ZooKeeper为znode提供了常驻内存服务,提升性能。apache

Zookeeper还提供了数据动态监测机制, 客户端注册监听它关心的目录节点,当znode发生变化(数据改变、被删除、子目录节点增长删除)时,客户端会触发注册事件。 服务器

ZooKeeper的实现很重视高性能、高可用性,以及严格的顺序访问。高性能意味着可将ZooKeeper用于大的分布式系统。可靠性使之可避免单点失败。严格的顺序访问使得客户端能够实现复杂的同步原语。分布式

服务端一般有多台服务器,这些服务器都经过QuorumPeer进程维持分布式系统间的数据交换,选举领导者(Leader)和追随者(Follower),动态监控集群,一旦发生节点故障则从新启动选举流程,选出新的Leader。每一个服务器维护相同的一份全局数据,经过QuorumPeer维持数据之间的同步,这样提供高可靠性和横向扩展性。性能

源码地址:https://github.com/apache/zookeeperui

文件目录结构,为了方便解析整个ZooKeeper的源码结构,这里只是列出主要的目录和文件:命令行

  • /:根目录下主要是ZooKeeper客户端相关的文件日志

  • /cli:命令行方式的Java类

  • /server:ZooKeeperServer相关,为ZooKeeper客户端提供服务

  • /server/command:服务端命令

  • /server/admin:ZooKeeper服务端Web管理,基于Jetty实现

  • /server/persistence:事务日志和快照的持久化

  • /server/quorum:集群间状态维护和切换,实现分布式事务

客户端提供的操做包括启动、关闭、建立节点、设置节点数据、删除节点、获取节点、获取节点数据等。这里只是取其中的几个命令作为示例。

主要客户端命令表:

  • ls:获取子路径列表

  • create:建立路径和数据

  • delele:删除路径

  • get:获取路径的数据

  • set:设置路径的数据

  • connect:链接服务端

  • close:关闭与服务端链接

  • quit:退出客户端

  • setacl:设置znode路径的Acl

  • getacl:获取znode路径的Acl

1)启动客户端

zkCli.sh

2)链接服务端

Connect 10.10.27.21

3)建立路径节点

建立一个新的 znode ,使用 create /test “hello” 。这个命令在根目录下建立了一个新的 znode 节点“ test ”以及与它关联的字符串:

4)获取目录

使用 ls 命令来查看当前 ZooKeeper 中所包含的内容,这里显示/目录下有test、zookeeper两个子节点。

 

5)获取节点数据

运行 get 命令来确认第二步中所建立的 znode ,显示znode的数据、建立时间等状态信息。

示例数据:

6)设置节点数据

经过 set 命令来对 zk 所关联的字符串进行设置,设置/test路径的数据为“welcome!”。

 

7)删除节点

delete  /test

这篇就先了解一下zookeeper的应用场景和基本操做,还有Watch功能是监听zookeeper目录结构的变化的,发生变化时全部链接到zookeeper的客户端都会实时收到事件,代表zookeeper的哪一个目录内容发生了变化,变化先后的数据分别是什么。经过watch功能,全部zookeeper客户端实现了分布式一致性存储和及时更新。

相关文章
相关标签/搜索