zookeeper基础知识点

原文链接: https://mp.weixin.qq.com/s/1pW19QXXK3yOXq4AXiEzUA

看前面两篇关于zookeeper 1.使用docker安装zookeeper 2.通过zkCli客户端操作zookeeper的介绍,应该大概了解了一些zookeeper的基本操作了,算是基本认识,本篇咱们来认识一下zookeeper的相关知识点。

节点[Node]zookeeper的节点类似于文件的目录结构一样。像下面这样

1. /node1/node2/node3/...
2. /node1/node4/node5/...

需要以斜线开头,像上面这样的结构表明,/node1 节点有两个子节点 /node2 和 /node4,这里说的是相对路径,绝对路径则是 /node1/node2 和 /node1/node4节点类型:
持久型节点 和 **临时型节点, **还有一个是跟它们相关的是 有序节点
所以组合起来的话就有以下几种节点:

  1. 持久节点[PERSISTENT]

  2. 持久有序节点[PERSISTENT_SEQUENTIAL]

  3. 临时节点[EPHEMERAL]

  4. 临时有序节点[EPHEMERAL_SEQUENTIAL]

1. 默认创建的节点是 持久节点:

[zk: localhost:2181(CONNECTED) 5] create /zk-per 我是默认的持久节点
Created /zk-per
[zk: localhost:2181(CONNECTED) 6] get /zk-per
我是默认的持久节点  // 显示的节点包含的数据内容
cZxid = 0x38 // 创建时的事务id
ctime = Fri Oct 11 13:17:55 CST 2019  // 创建时间
mZxid = 0x38 // 最后一次更新时的事务id
mtime = Fri Oct 11 13:17:55 CST 2019 // 最后一次更新的时间
pZxid = 0x38 // 子节点最后一次更新的事务id【节点列表变更才会更新】
cversion = 0 // 版本号
dataVersion = 0 // 数据版本号
aclVersion = 0 // 权限版本号
ephemeralOwner = 0x0 // 是否临时节点
dataLength = 27 // 数据长度
numChildren = 0 // 子节点个数

可以看到是否临时节点的属性为0;持久节点不会因为会话关闭或者连接断开而消失,需要通过删除操作进行清理。

  1. 创建持久有序节点,需要在创建的时候加一个参数 -s 就可以了
[zk: localhost:2181(CONNECTED) 8] create -s /zk-per/s 我是有序节点
Created /zk-per/s0000000000
[zk: localhost:2181(CONNECTED) 9] get /zk-per/s
Node does not exist: /zk-per/s
[zk: localhost:2181(CONNECTED) 10] get /zk-per/s0000000000
我是有序节点
cZxid = 0x39
ctime = Fri Oct 11 13:57:23 CST 2019
mZxid = 0x39
mtime = Fri Oct 11 13:57:23 CST 2019
pZxid = 0x39
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 18
numChildren = 0
[zk: localhost:2181(CONNECTED) 11] create -s /zk-per/s 我是有序节节点 
Created /zk-per/s000000000

在 /zk-per 节点下创建了两个有序节点,在节点后面会自动添加顺序号,最大值是正整数的最大值;如果中间有无序节点(也就是无参数 -s 创建的节点),再创建有序节点也会把该节点算进去。

[zk: localhost:2181(CONNECTED) 14] create /zk-per/s 正常持久节点
Created /zk-per/s
[zk: localhost:2181(CONNECTED) 18] ls /zk-per
[s0000000001, s, s0000000003, s0000000000]
  1. 创建临时节点也比较简单,只需要添加一个参数 -e 则该节点就是临时节点
[zk: localhost:2181(CONNECTED) 22] create -e /zk-eph 我是临时节点
Created /zk-eph
[zk: localhost:2181(CONNECTED) 23] get /zk-eph
我是临时节点
cZxid = 0x3d
ctime = Fri Oct 11 14:22:22 CST 2019
mZxid = 0x3d
mtime = Fri Oct 11 14:22:22 CST 2019
pZxid = 0x3d
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x10000007da50004 // 表明是临时节点
dataLength = 18
numChildren = 0

临时节点会因为会话失效而自动清除掉,而且临时节点不能创建子节点

[zk: localhost:2181(CONNECTED) 24] create -e /zk-eph/01 验证是否可以创建临时子节点

4. 创建临时有序节点跟创建持久有序节点一样添加一个参数 -s 就可以了。

[zk: localhost:2181(CONNECTED) 26] create /zk-per-eph 临时有序节点父节点
Created /zk-per-eph
[zk: localhost:2181(CONNECTED) 30] create -e -s /zk-per-eph/es 我是临时有序节点
Created /zk-per-eph/es0000000000
[zk: localhost:2181(CONNECTED) 31] create -e -s /zk-per-eph/es 我是临时序节点
Created /zk-per-eph/es0000000001

权限[ACL]

权限基本上都是针对节点的操作,对每个节点进行权限控制处理。

权限模式[Scheme]:授权对象[ID]:权限[Permission]这个是对一个节点进行授权的格式。

权限模式[Scheme]:

  1. IP

2. Digest

3. World (默认)

4. Super

授权对象[ID]:

不同的权限模式有不同的授权对象。

1.ip针对的是一个明确的ip地址或者是一个ip地址段

2.digest是一个经过加密的处理的字符串 [name:base64(sha1(name:pass))]

3.world是默认的,只有一个值 anyone

4.super与digest一样

权限[Permission]:

  1. CREATE [c]: 可以创建子节点

  2. DELETE [d]: 可以删除子节点

3. READ [r]: 可以读取节点内容和子节点内容

4. WRITE [w]: 可以更新节点内容

5. ADMIN [a]: 可以管理节点,对节点进行权限设置

平时常用的是Digest模式,这里以该模式做一下示例,其它三个不做示例了。

先生成 授权对象

bogon$ echo -n name:pass | openssl dgst -binary -sha1 | openssl base64
XyHn68mX14mTQCgEtE+2pqxBR7A=

所以 授权对象[ID]为

name:XyHn68mX14mTQCgEtE+2pqxBR7A=

创建一个待授权节点:

[zk: localhost:2181(CONNECTED) 1] create /zk-acldigest 我是带权限节点
Created /zk-acldigest

给该节点授权

[zk: localhost:2181(CONNECTED) 3] setAcl /zk-acldigest digest:name:XyHn68mX14mTQCgEtE+2pqxBR7A=:rcdwa
cZxid = 0x45
ctime = Fri Oct 11 15:23:09 CST 2019
mZxid = 0x45
mtime = Fri Oct 11 15:23:09 CST 2019
pZxid = 0x45
cversion = 0
dataVersion = 0
aclVersion = 1
ephemeralOwner = 0x0
dataLength = 21
numChildren = 0

授权成功。如果没有对当前会话授权就进行读取节点会出现没有权限提示

[zk: localhost:2181(CONNECTED) 4] get /zk-acldigest
Authentication is not valid : /zk-acldigest

对当前会话进行授权后再进行读取节点操作就可以了

[zk: localhost:2181(CONNECTED) 5] addauth digest name:pass
[zk: localhost:2181(CONNECTED) 6] get /zk-acldigest       
我是带权限节点
cZxid = 0x45
ctime = Fri Oct 11 15:23:09 CST 2019
mZxid = 0x45
mtime = Fri Oct 11 15:23:09 CST 2019
pZxid = 0x45
cversion = 0
dataVersion = 0
aclVersion = 1
ephemeralOwner = 0x0
dataLength = 21
numChildren = 0

数据监听[Watcher]

数据监听分默认监听和节点自已的监听,所谓默认监听就是创建会话的话,直接设置一监听,在该会话下创建的节点可以利用该监听,节点自已的监听则是单独设置会对该节点的监听,并且每设置一次监听如果被调用了则会失效,需要重新设置。

常用的连接状态下的监听事件:

1. NodeCreated 节点创建监听

2. NodeDeleted 节点被删除监听

3. NodeDataChanged 节点数据被更新监听

4. NodeChildrenChanged 子节点列表变更监听

ZK服务状态

zookeeper内置了一些命令可以查询一些服务端的状态数据。

下表数据来源:https://www.cnblogs.com/warmingsun/p/6961323.html

|

ZooKeeper四字命令

|

功能描述
| conf | 3.3.0版本引入的。打印出服务相关配置的详细信息。 |
| cons | 3.3.0版本引入的。列出所有连接到这台服务器的客户端全部连接/会话详细信息。包括"接受/发送"的包数量、会话id、操作延迟、最后的操作执行等等信息。 |
| crst | 3.3.0版本引入的。重置所有连接的连接和会话统计信息。 |
| dump | 列出那些比较重要的会话和临时节点。这个命令只能在leader节点上有用。 |
| envi | 打印出服务环境的详细信息。 |
| reqs | 列出未经处理的请求 |
| ruok | 测试服务是否处于正确状态。如果确实如此,那么服务返回"imok",否则不做任何相应。 |
| stat | 输出关于性能和连接的客户端的列表。 |
| srst | 重置服务器的统计。 |
| srvr | 3.3.0版本引入的。列出连接服务器的详细信息 |
| wchs | 3.3.0版本引入的。列出服务器watch的详细信息。 |
| wchc | 3.3.0版本引入的。通过session列出服务器watch的详细信息,它的输出是一个与watch相关的会话的列表。 |
| wchp | 3.3.0版本引入的。通过路径列出服务器watch的详细信息。它输出一个与session相关的路径。 |
| mntr | 3.4.0版本引入的。输出可用于检测集群健康状态的变量列表 |

可以通过如下命令查看相应的信息:

bogon:liangyongtong$ echo -n stat | nc 127.0.0.1 2181
Zookeeper version: 3.5.5-390fe37ea45dee01bf87dc1c042b5e3dcce88653, built on 05/03/2019 12:07 GMT
Clients:
 /172.17.0.1:53300[0](queued=0,recved=1,sent=0)
Latency min/avg/max: 0/0/8
Received: 5744
Sent: 5743
Connections: 1
Outstanding: 0
Zxid: 0x4b
Mode: standalone
Node count: 22

有时候可能会提示该命令没有加入查看白名单,这个需要处理一下。

一种是删除原来的容器,重新启动一个新的容器,把配置参数

4lw.commands.whitelist=*

加入到启动参数里面去。

一种是进入现在的容器里面修改 zoo.cfg 文件,添加这一行配置然后重新启动容器。进去后可能会出现没有 vi 或 vim 命令可用,需要重新安装一下。

$ apt-get update
$ apt-get install vim

然后就可以使用 vim 工具了。

默认的配置文件 zoo.cfg 路径在

/conf/zoo.cfg
欢迎关注
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343