1.zookeeper是什么

zookeeper是hadoop的分布式协调服务。主要作用是对hadoop的集群节点进行监控。但是由于其功能的单一而去不依赖hadoop其他框架,所以不局限在hadoop集群使用。比如淘宝的dubbo就用zookeeper集群来保证接口注册信息的高可靠性。

2.zookeeper有什么

zookeeper本质是个简单的文件系统。zookeeper本身可以搭建一个集群,整个集群维护一个文件系统,并保证这个文件系统的高可靠性。文件系统上的每个节点对应一个znode。每个znode维护着一个属性结构,里面存放着这个节点的版本号、时间戳、一些自定义信息。但是这些信息总体不能超过1M,也就是说zookeeper上的节点存储的信息不能超过1M。

zookeeper上的节点都是有类型的,一种是持久节点,一种是瞬时节点。瞬时节点下不能再有节点。

zookeeper的节点创建时可以设置顺序号,就变成了顺序节点。顺序节点和普通节点不同的主要是名称后面会有一个单调递增的顺序号。在处理事件时,这个顺序号可以控制事件的传播顺序和次数。

znode以某种方式变化时,可以通过观察(watch)机制让客户端得到通知。本质就是一个观察者模式。客户端注册观察在节点上,当节点发生变化后,通知观察,从而让客户端感知并作相应处理。

3.zookeeper能干什么

zookeeper可以和hadoop中的hdfs整合,用于监控存储集群,并且在namenode发生异常后,可以实现namenode的自动切换。

zookeeper可以喝hadoop中的hbase整合 ,用于客户端了解hbase集群的属性。

zookeeper可以和dubbo整合,用于对接口注册信息的存储。

zookeeper集群的高可靠性、节点的特性、与客户端的长链接监听机制等,实现了分布式集群的监控协调控制,让zookeeper成为了现在很流行的开源产品。

4.zookeeper单机部署

4.1.准备

项目首页:http://zookeeper.apache.org/

最新版本下载页:http://apache.fayea.com/apache-mirror/zookeeper/

我用的是 zookeeper-3.4.6.tar.gz

减压到一个运行目录。

zookeeper需要jdk1.6以上版本运行,所以需要确定环境变量中的jdk符合要求。

4.2.修改配置文件

找到 /zookeeper-3.4.6/conf/zoo_sample.cfg 文件,复制一份并将文件名字修改成zoo.cfg。

修改zoo.cfg文件,内容如下:

tickTime=

initLimit=

syncLimit=

dataDir=/tmp/zookeeper

clientPort=

主要是修改dataDir,将其指定到你的zookeeper的工作目录。

修改环境变量

export ZOOKEEPER_HOME=/Users/qyfmac/Documents/develop/zookeeper-3.4.

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1..0_51.jdk/Contents/Home

export PATH=$ZOOKEEPER_HOME/bin:$JAVA_HOME/bin:$PATH

4.3.启动

  • 使用命令zkServer.sh start 来启动zookeeper。启动日志如下:
qyfMacdeMacBook-Pro:conf qyfmac$ zkServer.sh start
JMX enabled by default
Using config: /Users/qyfmac/Documents/develop/zookeeper-3.4./bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
  • 可以查看进程中是否有QuorumPeerMain来判断zookeeper是否启动成功。
qyfMacdeMacBook-Pro:conf qyfmac$ jps
QuorumPeerMain
  • 我们还可以通过查看状态命令 zkServer.sh status 来验证单机部署是否成功。最后面的Mode:standalone表示这是一个单机启动的zookeeper。

qyfMacdeMacBook-Pro:bin qyfmac$ zkServer.sh status
JMX enabled by default
Using config: /Users/qyfmac/Documents/develop/zookeeper-3.4./bin/../conf/zoo.cfg
Mode: standalone
  • 我们还可以使用另一台机器,通过nc或telnet命令传递一个ruok命令来检查zookeeper是否启动。
qyfMacdeMacBook-Pro:bin qyfmac$ echo ruok | nc localhost
imok
qyfMacdeMacBook-Pro:bin qyfmac$ telnet localhost
Trying ::...
Connected to localhost.
Escape character is '^]'.
ruok
imok
Connection closed by foreign host.

传递的ruok表示 Are you OK?

服务器响应的imok表示 I'm OK.

  • 最后说一下停止服务命令 zkServer.sh stop
qyfMacdeMacBook-Pro:bin qyfmac$ zkServer.sh stop
JMX enabled by default
Using config: /Users/qyfmac/Documents/develop/zookeeper-3.4./bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED

5.zookeeper客户端的实现

6.zookeeper的命令详解

6.1.服务器端命令

在zookeeper的安装目录/zookeeper-3.4.6/bin我们能看到这几个sh脚本命令。

qyfMacdeMacBook-Pro:bin qyfmac$ ls -al
total
drwxr-xr-x@ qyfmac staff : .
drwxr-xr-x@ qyfmac staff : ..
-rwxr-xr-x@ qyfmac staff README.txt
-rwxr-xr-x@ qyfmac staff zkCleanup.sh
-rwxr-xr-x@ qyfmac staff zkCli.cmd
-rwxr-xr-x@ qyfmac staff zkCli.sh
-rwxr-xr-x@ qyfmac staff zkEnv.cmd
-rwxr-xr-x@ qyfmac staff zkEnv.sh
-rwxr-xr-x@ qyfmac staff zkServer.cmd
-rwxr-xr-x@ qyfmac staff zkServer.sh

下面就让我们来看看这几个命令是干什么用的了。

  • zkServer.sh

这个主要是控制服务的启停等管理命令。在命令行直接敲zkServer.sh 能够看到他的所有命令。

qyfMacdeMacBook-Pro:bin qyfmac$ zkServer.sh
JMX enabled by default
Using config: /Users/qyfmac/Documents/develop/zookeeper-3.4./bin/../conf/zoo.cfg
Usage: /Users/qyfmac/Documents/develop/zookeeper-3.4./bin/zkServer.sh {start|start-foreground|stop|restart|status|upgrade|print-cmd}

最后一行就能看到zkServer.sh后面能够跟的命令。下面挨个说明

    • zkServer.sh start                  启动zookeeper服务。
    • zkServer.sh start-foreground 启动zookeeper服务,并且查看运行过程中的异常。检查zookeeper运行异常时使用。
    • zkServer.sh stop                   停止zookeeper服务。
    • zkServer.sh restart               重启zookeeper服务。
    • zkServer.sh status                查看zookeeper服务的运行状态。
    • zkServer.sh upgrade             升级zookeeper。
    • zkServer.sh print-cmd           查看zookeeper的启动命令及参数。

zookeeper集群部署

zookeeper伪分布式部署

zookeeper集群的工作原理

zookeeper配置文件详解

参考资料

学习 zookeeper的更多相关文章

  1. 一脸懵逼学习Zookeeper(动物园管理员)---》高度可靠的分布式协调服务

    1:Zookeeper是一个分布式协调服务:就是为用户的分布式应用程序提供协调服务 A.zookeeper是为别的分布式程序服务的 B.Zookeeper本身就是一个分布式程序(只要有半数以上节点存活 ...

  2. zookeeper 学习 zookeeper下载部署

    下载 http://mirror.bit.edu.cn/apache/zookeeper/ 校验 解压后得到zookeeper-3.4.10.jar,使用md5sum zookeeper-3.4.10 ...

  3. 【转】Zookeeper学习---zookeeper 选举机制介绍

    [原文]https://www.toutiao.com/i6593162565872779784/ zookeeper集群 配置多个实例共同构成一个集群对外提供服务以达到水平扩展的目的,每个服务器上的 ...

  4. 学习Zookeeper之第3章Zookeeper内部原理

    第 3 章 Zookeeper 内部原理 3.1 选举机制 3.2 节点类型 3.3 stat 结构体 3.4 监听器原理   1)监听原理详解   2)常见的监听 3.5 写数据流程 第 3 章 Z ...

  5. 学习Zookeeper之第2章Zookeeper安装

    第 2 章 Zookeeper安装 2.1 本地模式安装部署 2.2 配置参数解读 第 2 章 Zookeeper安装 2.1 本地模式安装部署 1)安装前准备: (1)安装 jdk (2)通过 fi ...

  6. 学习Zookeeper之第1章Zookeeper入门

    第 1 章 Zookeeper入门 1.1 概述 1.2 特点 1.3 数据结构 1.4 应用场景 统一命名服务 统一配置管理 统一集群管理 服务器动态上下线 软负载均衡 1.5 下载地址 第 1 章 ...

  7. 学习Zookeeper需要了解的专业名词

    一.Zookeeper的集群角色 Leader:该角色是整个zookeeper集群工作机制中的核心 Follower:该角色是zookeeper集群状态的跟随者 Observer:在集群中充当观察者的 ...

  8. Hadoop学习---Zookeeper+Hbase配置学习

    软件版本号: JDK:jdk-8u45-linux-i586.tar.gz Zookeeper:zookeeper-3.4.6 Hbase:hbase-1.0.0-bin 一.JDK版本更换 由于之前 ...

  9. 这样学习ZooKeeper离大厂所需技能要求还远吗

    概述 定义 Apache ZooKeeper是一种用于构建分布式应用的高性能.高度可靠.开源的分布式协调服务,提供如配置信息维护.命名.分布式同步.组服务等功能,可以实现如分布式共识.组管理.领导选举 ...

随机推荐

  1. 反射(Reflection)的SetValue遇上DBNULL转换为string

    有网友回馈说提供的代码有bug.你可以从这个链接下载得到:http://www.cnblogs.com/insus/p/3384472.html 其中有一个Utility,它是把DataTable转换 ...

  2. 你应该知道的 RPC 原理

    作者:伯乐在线 - meituanalibaba   网址:http://blog.jobbole.com/92290/ 在校期间大家都写过不少程序,比如写个hello world服务类,然后本地调用 ...

  3. PHP类和对象等代码说明

    1.定义和创建类和对象: 定义类要使用class关键字.例如:class 类名{//属性和方法} 创建对象使用new关键字.例如: $p1 = new 类名;,可以基于一个类创建多个对象. 2. 类属 ...

  4. 一个十年java程序员的心得

    展望未来,总结过去10年的程序员生涯,给程序员小弟弟小妹妹们的一些总结性忠告 走过的路,回忆起来是那么曲折,把自己的一些心得体会分享给程序员兄弟姐妹们,虽然时代在变化,但是很可能你也会走我已经做过的1 ...

  5. 解决之前上架的 App 在 iOS 9 会闪退问题 (更新:已有 Hotfix)

    最新更新:(2015.10.02) 开发环境: Delphi 10 Seattle OS X El Capitan v10.11 需使用下列 HotfixID: 30398, PAServer Hot ...

  6. PHP的PSR系列规范都有啥内容

    PSR 是PHP Standard Recommendation的简写,它其实应该叫PSRs,即系列推荐标准:目前通过的规范有PSR-0(Autoloading Standard).PSR-1(Bas ...

  7. MUI(5)

    今天实现9宫格菜单.先上效果图: 就是这个效果咯,界面不太美观,底部导航栏是为了苹果用户没有返回按键设计的,只是为了方便演示而已,没有做过多的处理.首先先说一下这个底部导航栏如何实现,这个底部导航栏小 ...

  8. tp5页面输出时,搜索后跳转下一页的处理

    tp5页面输出时,搜索功能在跳转下一页时,如果不做任何处理,会返回原有是第二页输出的数据.为了保证跳转下一页时输出的是搜索到的数据,做以下处理. (要根据自己的搜索字段进行适当修改) 页面js代码,给 ...

  9. java中set接口的用法

    java中的set接口有如下的特点: 不允许出现重复元素: 集合中的元素位置无顺序: 有且只有一个值为null的元素. 因为java中的set接口模仿了数学上的set抽象,所以,对应的数学上set的特 ...

  10. 如何使用 HTML5 Canvas 制作水波纹效果

    今天,我们继续分享 JavaScript 实现的效果例子,这篇文章会介绍使用 JavaScript 实现水波纹效果.水波效果以图片为背景,点击图片任意位置都会触发.有时候,我们使用普通的 Javasc ...