学习 zookeeper
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=2000 initLimit=10 syncLimit=5 dataDir=/tmp/zookeeper clientPort=2181
主要是修改dataDir,将其指定到你的zookeeper的工作目录。
修改环境变量
export ZOOKEEPER_HOME=/Users/qyfmac/Documents/develop/zookeeper-3.4.6 export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.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.6/bin/../conf/zoo.cfg Starting zookeeper ... STARTED
- 可以查看进程中是否有QuorumPeerMain来判断zookeeper是否启动成功。
qyfMacdeMacBook-Pro:conf qyfmac$ jps 36802 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.6/bin/../conf/zoo.cfg Mode: standalone
- 我们还可以使用另一台机器,通过nc或telnet命令传递一个ruok命令来检查zookeeper是否启动。
qyfMacdeMacBook-Pro:bin qyfmac$ echo ruok | nc localhost 2181 imok
qyfMacdeMacBook-Pro:bin qyfmac$ telnet localhost 2181 Trying ::1... 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.6/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 88 drwxr-xr-x@ 11 qyfmac staff 374 11 21 09:51 . drwxr-xr-x@ 24 qyfmac staff 816 11 20 17:44 .. -rwxr-xr-x@ 1 qyfmac staff 238 2 20 2014 README.txt -rwxr-xr-x@ 1 qyfmac staff 1937 2 20 2014 zkCleanup.sh -rwxr-xr-x@ 1 qyfmac staff 1049 2 20 2014 zkCli.cmd -rwxr-xr-x@ 1 qyfmac staff 1534 2 20 2014 zkCli.sh -rwxr-xr-x@ 1 qyfmac staff 1333 2 20 2014 zkEnv.cmd -rwxr-xr-x@ 1 qyfmac staff 2696 2 20 2014 zkEnv.sh -rwxr-xr-x@ 1 qyfmac staff 1084 2 20 2014 zkServer.cmd -rwxr-xr-x@ 1 qyfmac staff 5742 2 20 2014 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.6/bin/../conf/zoo.cfg Usage: /Users/qyfmac/Documents/develop/zookeeper-3.4.6/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配置文件详解
参考资料
- 官方文档 http://zookeeper.apache.org/doc/trunk/zookeeperAdmin.html
- 《hadoop权威指南》
- 《hadoop实战》