Zookeeper学习笔记

Zookeeper 介绍

Zookeeper是一个分布式应用程序协调服务,主要负责集中维护配置信息的服务,提供分布式的同步机制。其所有的服务都是做为其他分布式应用的基础。Zookeeper是Google Chubby的一个开源实现,是现在很多分布式应用的重要组件,包括诸如Hadoop、HBase、Kafka等,可以说现在Zookeeper是大家必须掌握的一门软件。

Zookeeper主要提供以下几种服务:
1、命名服务
2、配置管理
3、集群管理
4、分布式锁
5、队列管理

Zookeeper的特点

  • 简单:Zookeeper的核心是一个精简的文件系统,它支持一些简单的操作和一些抽象操作,例如,排序和通知。
  • 丰富:Zookeeper的原语操作是很丰富的,可实现一些协调数据结构和协议。例如,分布式队列、分布式锁和一组同级别节点中的“领导者选举”。
  • 高可用:Zookeeper支持集群模式,可以很容易的解决单点故障问题。
  • 松耦合式交互:不同进程间的交互不需要了解彼此,甚至可以不必同时存在,某进程在zookeeper中留下消息后,该进程结束后其它进程还可以读这条消息。
  • 资源库:Zookeeper实现了一个关于通用协调模式的开源共享存储库,能使开发者免于编写这类通用协议。

常用操作

为了熟悉Zookeeper的常用操作,最简单的办法就是使用Docker。

$ docker pull zookeeper
# 完成后启动zookeeper
$ docker run -p 2181:2181 zookeeper
# 重新打开一个Terminal界面,查找到当前容器的ID,登陆到容器中
$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                                        NAMES
63c3aa117fca        zookeeper           "/docker-entrypoint.…"   About a minute ago   Up About a minute   2888/tcp, 0.0.0.0:2181->2181/tcp, 3888/tcp   infallible_saha
$ docker exec -it 63c3aa117fca bash

现在一个单机版的Zookeeper就运行起来了,可以尝试常用的命令了。

查看Server运行状态

bash-4.4# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Mode: standalone

客户端连接服务器

bash-4.4# ./zkCli.sh 
Connecting to localhost:2181

常用命令

  • 查看: ls
  • 获取节点数据和更新信息: get /zookeeper
[zk: localhost:2181(CONNECTED) 3] get /zookeeper

cZxid = 0x0
ctime = Thu Jan 01 00:00:00 GMT 1970
mZxid = 0x0
mtime = Thu Jan 01 00:00:00 GMT 1970
pZxid = 0x0
cversion = -1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 1
  • 获取节点的更新信息: stat /zookeeper
  • 创建节点: craete [-s] [-e] path data acl-s表示创建顺序节点,-e表示创建临时节点。
[zk: localhost:2181(CONNECTED) 6] create /spring hello
Created /spring
[zk: localhost:2181(CONNECTED) 9] get /spring
hello
cZxid = 0x4
ctime = Fri Apr 05 09:30:55 GMT 2019
mZxid = 0x4
mtime = Fri Apr 05 09:30:55 GMT 2019
pZxid = 0x4
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5
numChildren = 0
  • 修改节点: set path data [version],可以看到dataVersion变成了1
[zk: localhost:2181(CONNECTED) 11] set /spring spring-v1
cZxid = 0x4
ctime = Fri Apr 05 09:30:55 GMT 2019
mZxid = 0x5
mtime = Fri Apr 05 09:34:19 GMT 2019
pZxid = 0x4
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 9
numChildren = 0
  • 删除节点: delete path [version]
[zk: localhost:2181(CONNECTED) 17] delete /spring
[zk: localhost:2181(CONNECTED) 18] get /spring
Node does not exist: /spring
  • 设置watch事件: stat path [watch]
[zk: localhost:2181(CONNECTED) 33] stat /spring/bootx watch
Node does not exist: /spring/bootx
[zk: localhost:2181(CONNECTED) 34] create /spring/bootx bootx
Created /spring/bootx

WATCHER::
[zk: localhost:2181(CONNECTED) 35] 
WatchedEvent state:SyncConnected type:NodeCreated path:/spring/bootx
  • 设置watch事件: get path [watch]
[zk: localhost:2181(CONNECTED) 38] get /spring/booty watch
new-boot-y
cZxid = 0xc
ctime = Fri Apr 05 13:38:36 GMT 2019
mZxid = 0xd
mtime = Fri Apr 05 13:38:48 GMT 2019
pZxid = 0xc
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 10
numChildren = 0
[zk: localhost:2181(CONNECTED) 39] set /spring/booty nnew-boot-y

WATCHER::

WatchedEvent state:SyncConnected type:NodeDataChanged path:/spring/booty
cZxid = 0xc
ctime = Fri Apr 05 13:38:36 GMT 2019
mZxid = 0xe
mtime = Fri Apr 05 13:39:26 GMT 2019
pZxid = 0xc
cversion = 0
dataVersion = 2
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 11
numChildren = 0
  • xxxx
  • xxxx

ACL权限

ZK的节点有5种操作权限:CREATE、READ、WRITE、DELETE、ADMIN 也就是 增、删、改、查、管理权限。

注:这5种权限中,delete是指对子节点的删除权限,其它4种权限指对自身节点的操作权限。

身份的认证有4种方式:

  • world:默认方式,相当于全世界都能访问
  • auth:代表已经认证通过的用户(cli中可以通过addauth digest user:pwd 来添加当前上下文中的授权用户)
  • digest:即用户名:密码这种方式认证,这也是业务系统中最常用的
  • ip:使用Ip地址认证
[zk: localhost:2181(CONNECTED) 42] getAcl /spring
'world,'anyone
: cdrwa
[zk: localhost:2181(CONNECTED) 43] getAcl /zookeeper
'world,'anyone
: cdrwa

四字命令

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

Zookeeper四字命令功能描述
conf输出相关服务配置的详细信息。
cons列出所有连接到服务器的客户端的完全的连接 / 会话的详细信息。包括“接受 / 发送”的包数量、会话 id 、操作延迟、最后的操作执行等等信息。
dump列出未经处理的会话和临时节点。
envi输出关于服务环境的详细信息(区别于 conf 命令)。
reqs列出未经处理的请求
ruok测试服务是否处于正确状态。如果确实如此,那么服务返回“ imok ”,否则不做任何相应。
stat输出关于性能和连接的客户端的列表。
wchs列出服务器 watch 的详细信息。
wchc通过 session 列出服务器 watch 的详细信息,它的输出是一个与 watch 相关的会话的列表。
wchp通过路径列出服务器 watch 的详细信息。它输出一个与 session 相关的路径。

使用方法

$ echo stat | nc 127.0.0.1 2181
Zookeeper version: 3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03, built on 06/29/2018 04:05 GMT
Clients:
 /172.17.0.1:53548[0](queued=0,recved=1,sent=0)
 /127.0.0.1:56306[1](queued=0,recved=483,sent=485)

Latency min/avg/max: 0/0/45
Received: 500
Sent: 501
Connections: 2
Outstanding: 0
Zxid: 0xe
Mode: standalone
Node count: 8

参考资料

  1. Apache Zookeeper
  2. 百度百科 Zookeeper
  3. Zookeeper的功能以及工作原理
  4. Zookeeper系列一:Zookeeper基础命令操作
  5. ZooKeeper系列之六:ZooKeeper四字命令

转载于:https://www.cnblogs.com/cocowool/p/zookeeper_notes.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值