Zookeeper进阶

ZooKeeper是一个分布式的、开源的、分布式应用协调服务。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

Zookeeper在分布式系统中的应用

  • master选举
  • 同一配置文件维护
  • 发布订阅
  • 分布式锁
  • 集群管理,保证数据强一致性

zookeeper Session

一般来说,我们使用zookeeper是集群形式,client和zookeeper集群建立一个会话session。在这个会话session当中,client其实是随机与其中一个zk节点建立的链接,并且互发心跳。zk集群负责管理这个session,并且在所有的节点上维护这个session的信息,包括这个session中定义的临时数据和监视点watcher。
每个session都有一个过期时间
zookeeper的Session一般分为4个状态,NO_CONNECTED, CONNECTING ,CONNECTED,CLOSE;

当客户端没有建立连接的时候 即是 NO_CONNECTED , 当客户端正在建立连接的时候CONNECTING,已经连接上 CONNECTED, 连接关闭 CLOSE。
参考 :https://blog.csdn.net/jeff_fangji/article/details/43916359

ls  {path}   查看{path} 下的目录信息
ls2 {path}   查看{path} 下的目录信息和状态信息 (ls+stat)
stat {path} 查看{path} 目录的状态信息
get {path} 查看{path} 下的data 以及状态信息
######
cZxid = 0x0   节点id
ctime = Thu Jan 01 08:00:00 CST 1970  创建时间
mZxid = 0x0   修改后的id
mtime = Thu Jan 01 08:00:00 CST 1970  修改时间
pZxid = 0x0  子节点id
cversion = -1   子节点的版本
dataVersion = 0    当前节点数据版本号
aclVersion = 0       权限版本,权限发生变化会改变 
ephemeralOwner = 0x0    持久节点是0x0 ,临时节点不是
dataLength = 0   数据长度
numChildren = 1  子节点个数
  • 超时之后并不会马上删除临时节点,要等到心跳发现断开后,才会删除临时节点
stat path [watch]
set path data [version]   设置某一个目录的值,version做乐观锁,version No is not valid : /zhongc

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     -e 临时节点,-s 顺序节点
addauth scheme auth
quit
getAcl path
close
connect host:port

zookeeper 的 watcher 特性

  • 针对每一个节点,zk都会对他有一个监督者(触发器)。watcher是一个事件,当监控某一个节点发生了变化,就会触发一个watcher事件
  • 在zk中watcher是一次性的,触发一次立即销毁
  • 父节点,子节点 增删改都会触发watcher,针对不同的操作,触发的watcher事件也不相同
  • watcher事件的类型
  1. 创建父节点 触发 NodeCreated
stat /zwatch watch 

[zk: localhost:2181(CONNECTED) 19] create /zwatch 123

WATCHER::
WatchedEvent state:SyncConnected type:NodeCreated path:/zwatch
Created /zwatch

2.修改父节点数据触发 NodeDataChanged

get /zwatch watch

[zk: localhost:2181(CONNECTED) 22] set /zwatch 999

WATCHER::
WatchedEvent state:SyncConnected type:NodeDataChanged path:/zwatch
cZxid = 0x1b
ctime = Tue Apr 24 23:16:39 CST 2018

3.删除节点会触发 NodeDeleted

get /zwatch swtch

[zk: localhost:2181(CONNECTED) 24] delete /zwatch

WATCHER::
WatchedEvent state:SyncConnected type:NodeDeleted path:/zwatch

4.创建和删除子节点 触发 NodeChildrenChanged ,修改子节点数据不会触发父节点watcher

ls /zhongc watchet

[zk: localhost:2181(CONNECTED) 2] create -s /zhongc/sec 66

WATCHER::
WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/zhongc
Created /zhongc/sec0000000006

zookeeper 的 ACL 权限控制

  • ACL命令行
getAcl
setAcl
addauth scheme auth  授权认证
[zk: localhost:2181(CONNECTED) 13] create /xyz data
[zk: localhost:2181(CONNECTED) 15] getAcl /xyz
'world,'anyone
: cdrwa
  • ACL是由 [scheme:id:permissions ] 来构成权限列表的,scheme是代表采用的某种权限机制,id代表允许访问的用户,permissions代表权限组合字符串

  • scheme
    1.world:world下只有一个id,即只有一个用户,也就是anyone,那么组合的写法就是 world:anyone:[permissions]
    2.auth: auth 代表认证登录,需要注册用户有权限才可以。写法是:auth:user:passworld:[permissions]
    3.digest: 和auth类似,只不过是密码要加密。写法是 digest:username:BASE64(SHA1(passworld)):[permissions]
    4.ip: 真对IP进行限制,指定IP可以访问。写法是 ip:192.169.1.11:[permissions]
    5.super:超级管理员,拥有所有权限。修改配置

权限的构成 permissions

权限字符串缩写 crdwa

  • c:CREATE 创建当前节点的子节点
  • r:READ 获取当前节点下的目录,数据
  • w: WRITE 设置节点数据
  • d:DELETE 删除子节点
  • a:ADMIN 修改权限

zk中的权限是每一个节点相互独立的,不存在父子节点间的继承权限的关系

  • acl之word权限操作
getAcl 获取权限信息,使用create 创建节点,会被赋予默认权限
setAcl /xyz/a world:anyone:crwa   设置节点权限,
  • acl之auth与digest权限操作

在使用auth之前,必须先使用addauth添加一个用户,然后才可以setAcl,在setAcl的时候无论指定什么username和password都不会生效。都会保持和addauth一样的用户名和密码。然后断开连接,在重新连接,再次访问刚才设置权限的节点,会发现没有权限,这个时候再使用addauth进行登录,才可以访问刚才设置权限的节点。digest和auth同理,只不过密码是密文,而且使用digest不需要先登录,就可以设置权限。

addauth digest zhongc:123456  添加用户
setAcl /names/zhongc auth:zhongc:1234567:crw
setAcl /names/zhongc auth:crw
  • acl之ip权限操作
setAcl /ip ip:192.168.0.102:crwad
  • acl之super权限操作
修改 zkServer.sh ,修改启动脚本
然后addauth degist super:123456 登录设置的超级管理员账号
  • ACL的使用场景
    开发测试环境隔离
    生产环境指定ip访问

zookeeper 的 四字命令

zookeeper可以根据自身提供的简写命令来和服务器交互,需要用到nc命令,所以需要先安装 nc 。

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