Zookeeper 简单入门

目录


文章声明

zookeeper介绍

zookeeper的使用场景

统一命名服务

配置管理

集群管理

共享锁

队列

安装zookeeper

配置zookeeper

zookeeper的运行状态管理

使用zookeeper客户端登录到服务器

zookeeper中常用的操作命令

 

 

 

 

 


 

 

 

 

文章声明

  本文的内容主要来自Zookeeper官方文档:https://zookeeper.apache.org/doc/r3.4.14/index.html

  

 

Zookeeper介绍

  官方手册有一句话对Zookeeper的描述很精确,ZooKeeper:分布式应用程序的分布式协调服务

  ZooKeeper允许分布式进程通过共享的层级命名空间相互协调,该命名空间的组织方式与Linux文件系统类似,比如Linux中存在/usr/local/test这个路径,Zookeeper的思想就是为一个路径赋值,比如/usr/local/test的值为‘xxxxx',分布式应用进程可以在Zookeeer中创建路径、为路径赋值、读取路径值,删除路径,通过这些操作来实现分布式服务的协调。    

  上图中的每一个节点被称为一个znode,每个znode都有自己的相关属性(包括赋予其的value),并且每个节点都可以创建自己的子项。

  Zookeeper中节点有两种,一种就是上图中的每一个路径中的节点;另外一种是Zookeeper集群中,每一个Zookeeper服务器也被称为节点。

  

 

Zookeeper的使用场景

  Zookeeper虽然是对分布式应用程序的协调服务,那么可以先看一下zookeeper是如何实现协调的,有哪些协调的案例。

统一命名服务

 

 

配置管理

 

 

集群管理

 

 

共享锁

 

 

队列

 

安装Zookeeper

  其实Zookeeper的安装特别简单,也不能算安装了,只需要将Zookeeper下载后解压,就完成了安装操作,但是还需要进行一些配置操作。

  下载地址:http://zookeeper.apache.org/releases.html

  本文所用的3.4.14版本,下载链接  

su - root  # 请务必切换为root身份
wget http://www.trieuvan.com/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz
tar -zxf zookeeper-3.4.14.tar.gz
cp -r zookeeper-3.4.14 /usr/local/zookeeper

# 创建存放数据文件的目录
mkdir /usr/local/zookeeper/data

  此时,Zookeeper就安装成功了,只不过还需要进行一些配置才能启动。

 

 

配置Zookeeper

  Zookeeper的配置文件在path-to-zookeeper/conf目录下,文件名为zoo.cfg。初始安装的Zookeeper有一个zoo_sample.cfg示例文件,可以拷贝一份,在进行修改。

root@ubuntu:/usr/local/zookeeper# cd conf/
root@ubuntu:/usr/local/zookeeper/conf# ls
configuration.xsl  log4j.properties  zoo_sample.cfg
root@ubuntu:/usr/local/zookeeper/conf# cp zoo_sample.cfg zoo.cfg
root@ubuntu:/usr/local/zookeeper/conf# ls
configuration.xsl  log4j.properties  zoo.cfg  zoo_sample.cfg

  修改zoo.cfg中的下面三项:

# 心跳间隔(毫秒),超过2倍tickTime将会被认为会话超时
tickTime=2000

# 保存zookeeper数据库快照的目录,前面安装zookeeper时已经创建了该目录
dataDir=/usr/local/zookeeper/data

# 监听的端口号,用于接收客户端请求
clientPort=2181

  

 

Zookeeper的运行状态管理

  Zookeeper中可执行文件都存放在zookeeper安装路径下的bin目录下,而对Zookeeper服务器运行状态管理,使用的是zkServer.sh这个脚本。

  通过传入start | stop | restart | status来管理Zookeeper服务器的运行状态。

/usr/local/zookeeper/bin/zkServer.sh start
/usr/local/zookeeper/bin/zkServer.sh restart
/usr/local/zookeeper/bin/zkServer.sh stop
/usr/local/zookeeper/bin/zkServer.sh status

  

 

使用Zookeeper客户端登录服务器

  通过命令行的方式登录到Zookeeper服务器,可以使用Zookeeper提供的zkCli.sh脚本,位于/usr/local/zookeeper/bin目录下。

/usr/local/zookeeper/bin/zkCli.sh -server 127.0.0.1:2181

  登录进入Zookeeper服务器后,就可以进行很多操作了,下面将一一列举。

 

 

Zookeeper中常用操作命令

  登录到zookeeper服务器后,输入任意字符,回车确认后就会出现很多命令:

[zk: 127.0.0.1:2181(CONNECTED) 0] info
ZooKeeper -server host:port cmd args
	stat path [watch]
	set path data [version]
	ls path [watch]
	delquota [-n|-b] path
	ls2 path [watch]
	setAcl path acl
	setquota -n|-b val path
	history 
	redo cmdno
	printwatches on|off
	delete path [version]
	sync path
	listquota path
	rmr path
	get path [watch]
	create [-s] [-e] path data acl
	addauth scheme auth
	quit 
	getAcl path
	close 
	connect host:port

  其实上面的命令列表已经很明显的展示了zookeeper中可以操作的命令,包括他的功能都比较容易理解,下面就简单说几个常用的命令

 

ls path

  查看path节点下有哪些子节点,不会显示孙子及以下层级的节点,示例如下:

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

  

create path data

  该命令用来创建path节点,并且设置节点的值为data。需要注意的是,使用create创建path时,不能嵌套创建path,比如创建/abc/xyz,那么/abc必须是已经存在的,不能直接创建/abc/xyz。并且,使用create创建节点的时候,必须指定data,否则节点不会被创建。

[zk: 127.0.0.1:2181(CONNECTED) 4] create /abc xxxxxx
Created /abc
[zk: 127.0.0.1:2181(CONNECTED) 5] ls /
[abc, zookeeper]

  嵌套创建path时,如果上级目录不存在,则创建失败:

[zk: 127.0.0.1:2181(CONNECTED) 5] ls /
[abc, zookeeper]
[zk: 127.0.0.1:2181(CONNECTED) 6] create /xyz/aaa 12345
Node does not exist: /xyz/aaa
[zk: 127.0.0.1:2181(CONNECTED) 7] create /xyz 123
Created /xyz
[zk: 127.0.0.1:2181(CONNECTED) 8] create /xyz/aaa 12345
Created /xyz/aaa

 

get path

  该命令用来查看path节点上值以及节点信息,示例如下:

[zk: 127.0.0.1:2181(CONNECTED) 12] get /xyz
123
cZxid = 0x1f
ctime = Sun Jun 09 15:12:07 CST 2019
mZxid = 0x1f
mtime = Sun Jun 09 15:12:07 CST 2019
pZxid = 0x20
cversion = 1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 1

  

set path data

  该命令用来对已经存在的path的data进行设置,需要注意的是,如果path不存在,那么set操作就会失败,示例如下:

[zk: 127.0.0.1:2181(CONNECTED) 13] set /xyz 321
cZxid = 0x1f
ctime = Sun Jun 09 15:12:07 CST 2019
mZxid = 0x22
mtime = Sun Jun 09 15:15:18 CST 2019
pZxid = 0x20
cversion = 1
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 1
[zk: 127.0.0.1:2181(CONNECTED) 14] set /www notExists   # path不存在,操作失败
Node does not exist: /www

  

delete path

  该命令用来删除叶子节点,叶子节点就是没有子节点的节点。如果删除path下面还有其他的子节点,那么删除操作就会失败。

[zk: 127.0.0.1:2181(CONNECTED) 19] ls /       
[xyz, abc, zookeeper]
[zk: 127.0.0.1:2181(CONNECTED) 20] ls /xyz    
[aaa]
[zk: 127.0.0.1:2181(CONNECTED) 21] ls /xyz/aaa
[]
[zk: 127.0.0.1:2181(CONNECTED) 22] delete /xyz  # 删除的path包含子节点,删除失败
Node not empty: /xyz
[zk: 127.0.0.1:2181(CONNECTED) 23] delete /xyz/aaa # 删除的节点没有子节点,删除成功

  

rmr path

  该命令用来递归删除path,如果path下面有子节点,那么子节点都会被全部删除。

[zk: 127.0.0.1:2181(CONNECTED) 24] ls /xyz
[]
[zk: 127.0.0.1:2181(CONNECTED) 25] create /xyz/abc 3333
Created /xyz/abc
[zk: 127.0.0.1:2181(CONNECTED) 26] rmr /xyz

  

stat path

  用来获取path节点的相关信息,示例如下:

[zk: 127.0.0.1:2181(CONNECTED) 29] stat /abc
cZxid = 0x1d
ctime = Sun Jun 09 15:10:39 CST 2019
mZxid = 0x21
mtime = Sun Jun 09 15:13:30 CST 2019
pZxid = 0x1d
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5
numChildren = 0

  

   

posted @ 2019-06-09 13:11 寻觅beyond 阅读(...) 评论(...) 编辑 收藏
Flag Counter