ZooKeeper 命令操作

来源:互联网 发布:巴丁算法集app 编辑:程序博客网 时间:2024/05/29 13:38

一. ZooKeeper的四字命令

Zookeeper支持某些特定的四字命令字母与其的交互。他们大多数是查询命令,用来获取Zookeeper服务的当前状态及相关信息。用户在客户端可以通过telnet或nc向Zookeeper提交相应的命令。Zookeeper常用的四字命令见下图所示。

这里写图片描述

[root@hadoop ~]# echo ruok|nc localhost 2181[root@hadoop ~]# zkServer.sh start zoo1.cfgJMX enabled by defaultUsing config: /usr/local/zk/bin/../conf/zoo1.cfgStarting zookeeper ... STARTED[root@hadoop ~]#  zkServer.sh start zoo2.cfgJMX enabled by defaultUsing config: /usr/local/zk/bin/../conf/zoo2.cfgStarting zookeeper ... STARTED[root@hadoop ~]#  zkServer.sh start zoo3.cfgJMX enabled by defaultUsing config: /usr/local/zk/bin/../conf/zoo3.cfgStarting zookeeper ... STARTED[root@hadoop ~]# echo ruok|nc localhost 2181imok[root@hadoop ~]# echo ruok|nc localhost 2182imok[root@hadoop ~]# echo ruok|nc localhost 2183imok[root@hadoop ~]# echo conf|nc localhost 2181clientPort=2181dataDir=/usr/local/zk/data_1/version-2dataLogDir=/usr/local/zk/logs_1/version-2tickTime=2000maxClientCnxns=60minSessionTimeout=4000maxSessionTimeout=40000serverId=0initLimit=10syncLimit=5electionAlg=3electionPort=3387quorumPort=2287peerType=0[root@hadoop ~]#

二. ZooKeeper的简单操作

2.1 ZooKeeper的shell操作

2.1.1 ZooKeeper命令工具

再启动ZooKeeper服务之后,使用zkCli.sh -server localhost:2181连接到ZooKeeper服务

[root@hadoop ~]# zkCli.sh -server localhost:2181Connecting to localhost:21812014-10-17 03:35:51,051 [myid:] - INFO  [main:Environment@100] - Client environment:zookeeper.version=3.4.5-1392090, built on 09/30/2012 17:52 GMT2014-10-17 03:35:51,055 [myid:] - INFO  [main:Environment@100] - Client environment:host.name=hadoop2014-10-17 03:35:51,057 [myid:] - INFO  [main:Environment@100] - Client environment:java.version=1.6.0_242014-10-17 03:35:51,057 [myid:] - INFO  [main:Environment@100] - Client environment:java.vendor=Sun Microsystems Inc.2014-10-17 03:35:51,066 [myid:] - INFO  [main:Environment@100] - Client environment:java.home=/usr/local/jdk/jre2014-10-17 03:35:51,079 [myid:] - INFO  [main:Environment@100] - Client environment:java.class.path=/usr/local/zk/bin/../build/classes:/usr/local/zk/bin/../build/lib/*.jar:/usr/local/zk/bin/../lib/slf4j-log4j12-1.6.1.jar:/usr/local/zk/bin/../lib/slf4j-api-1.6.1.jar:/usr/local/zk/bin/../lib/netty-3.2.2.Final.jar:/usr/local/zk/bin/../lib/log4j-1.2.15.jar:/usr/local/zk/bin/../lib/jline-0.9.94.jar:/usr/local/zk/bin/../zookeeper-3.4.5.jar:/usr/local/zk/bin/../src/java/lib/*.jar:/usr/local/zk/bin/../conf:2014-10-17 03:35:51,083 [myid:] - INFO  [main:Environment@100] - Client environment:java.library.path=/usr/local/jdk/jre/lib/i386/client:/usr/local/jdk/jre/lib/i386:/usr/local/jdk/jre/../lib/i386:/usr/java/packages/lib/i386:/lib:/usr/lib2014-10-17 03:35:51,084 [myid:] - INFO  [main:Environment@100] - Client environment:java.io.tmpdir=/tmp2014-10-17 03:35:51,086 [myid:] - INFO  [main:Environment@100] - Client environment:java.compiler=<NA>2014-10-17 03:35:51,099 [myid:] - INFO  [main:Environment@100] - Client environment:os.name=Linux2014-10-17 03:35:51,100 [myid:] - INFO  [main:Environment@100] - Client environment:os.arch=i3862014-10-17 03:35:51,101 [myid:] - INFO  [main:Environment@100] - Client environment:os.version=2.6.32-358.el6.i6862014-10-17 03:35:51,101 [myid:] - INFO  [main:Environment@100] - Client environment:user.name=root2014-10-17 03:35:51,102 [myid:] - INFO  [main:Environment@100] - Client environment:user.home=/root2014-10-17 03:35:51,106 [myid:] - INFO  [main:Environment@100] - Client environment:user.dir=/root2014-10-17 03:35:51,120 [myid:] - INFO  [main:ZooKeeper@438] - Initiating client connection, connectString=localhost:2181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@b02e7aWelcome to ZooKeeper!JLine support is enabled2014-10-17 03:35:51,233 [myid:] - INFO  [main-SendThread(localhost:2181):ClientCnxn$SendThread@966] - Opening socket connection to server localhost/127.0.0.1:2181. Will not attempt to authenticate using SASL (Unable to locate a login configuration)2014-10-17 03:35:51,247 [myid:] - INFO  [main-SendThread(localhost:2181):ClientCnxn$SendThread@849] - Socket connection established to localhost/127.0.0.1:2181, initiating session[zk: localhost:2181(CONNECTING) 0] 2014-10-17 03:35:51,290 [myid:] - INFO  [main-SendThread(localhost:2181):ClientCnxn$SendThread@1207] - Session establishment complete on server localhost/127.0.0.1:2181, sessionid = 0x491da0e20b0000, negotiated timeout = 30000WATCHER::WatchedEvent state:SyncConnected type:None path:null[zk: localhost:2181(CONNECTED) 0]

连接成功之后,系统会输出ZooKeeper的相关环境以及配置信息,并在屏幕输出welcome to Zookeeper等信息。

2.1.2 使用ZooKeeper命令的简单操作步骤

(1) 使用ls命令查看当前Zookeeper中所包含的内容:ls /

[zk: localhost:2181(CONNECTED) 1] ls /[zookeeper][zk: localhost:2181(CONNECTED) 2]

(2) 创建一个新的Znode节点”zk”,以及和它相关字符,执行命令:create /zk myData

[zk: localhost:2181(CONNECTED) 2] create /zk myDataCreated /zk

(3) 再次使用ls命令来查看现在Zookeeper的中所包含的内容:ls /

[zk: localhost:2181(CONNECTED) 3] ls /[zk, zookeeper]

此时看到,zk节点已经被创建。  

(4) 使用get命令来确认第二步中所创建的Znode是否包含我们创建的字符串,执行命令:get /zk

[zk: localhost:2181(CONNECTED) 4] get /zkmyDatacZxid = 0x500000006ctime = Fri Oct 17 03:54:20 PDT 2014mZxid = 0x500000006mtime = Fri Oct 17 03:54:20 PDT 2014pZxid = 0x500000006cversion = 0dataVersion = 0aclVersion = 0ephemeralOwner = 0x0dataLength = 6numChildren = 0

(5) 接下来通过set命令来对zk所关联的字符串进行设置,执行命令:set /zk jiang1234

[zk: localhost:2181(CONNECTED) 5] set /zk jiang2014cZxid = 0x500000006ctime = Fri Oct 17 03:54:20 PDT 2014mZxid = 0x500000007mtime = Fri Oct 17 03:55:50 PDT 2014pZxid = 0x500000006cversion = 0dataVersion = 1aclVersion = 0ephemeralOwner = 0x0dataLength = 9numChildren = 0

(6) 再次使用get命令来查看,上次修改的内容,执行命令:get /zk

[zk: localhost:2181(CONNECTED) 6] get /zkjiang2014cZxid = 0x500000006ctime = Fri Oct 17 03:54:20 PDT 2014mZxid = 0x500000007mtime = Fri Oct 17 03:55:50 PDT 2014pZxid = 0x500000006cversion = 0dataVersion = 1aclVersion = 0ephemeralOwner = 0x0dataLength = 9numChildren = 0

(7) 下面我们将刚才创建的Znode删除,执行命令:delete /zk

[zk: localhost:2181(CONNECTED) 7] delete /zk

(8) 最后再次使用ls命令查看Zookeeper中的内容,执行命令:ls /

[zk: localhost:2181(CONNECTED) 8] ls /[zookeeper]

经过验证,zk节点已经删除。

2.2 ZooKeeper的api的简单使用

2.2.1 ZooKeeper的API简介

Zookeeper API共包含五个包,分别为:

  • (1)org.apache.zookeeper
  • (2)org.apache.zookeeper.data
  • (3)org.apache.zookeeper.server
  • (4)org.apache.zookeeper.server.quorum
  • (5)org.apache.zookeeper.server.upgrade

其中org.apache.zookeeper,包含Zookeeper类,他是我们编程时最常用的类文件。这个类是Zookeeper客户端的主要类文件。如果要使用Zookeeper服务,应用程序首先必须创建一个Zookeeper实例,这时就需要使用此类。一旦客户端和Zookeeper服务建立起了连接,Zookeeper系统将会给次连接会话分配一个ID值,并且客户端将会周期性的向服务器端发送心跳来维持会话连接。只要连接有效,客户端就可以使用Zookeeper API来做相应处理了。

Zookeeper类提供了如下图所示的几类主要方法

这里写图片描述

ZooKeeper示例

假设一组服务器,用于为客户端提供一些服务。我们希望每个客户端都能够能够找到其中一台服务器,使其能够使用这些服务,挑战之一就是维护这组服务器列表。这组服务器的成员列表明显不能存在网络中的单个节点上,因为如果那个节点发生故障,就意味着是整个系统的故障(我们希望这个列表有很高的可用性)。假设我们有了一个可靠的方法解决了这个成员列表的存储问题。如果其中一台服务器出现故障,我们仍然需要解决如何从服务器成员列表中将它删除的问题。某个进程需要负责删除故障服务器,但注意不能由故障服务器自己来完成,因为故障服务器已经不再运行。

我们所描述的不是一个被动的分布式数据结构,而是一个主动的、能够在某个外部事件发生时修改数据项状态的数据结构。ZooKeeper提供这种服务,所以让我们看看如何使用它来实现这种众所周知的组成员管理应用。

原创粉丝点击