分布式协调服务-zookeeper基本认识(分布式八 上)

目录

      • zoo.cfg默认配置文件
      • zookeeper部分概念
        • 数据模型
          • 节点特性
        • Watcher
        • ACL
      • zookeeper的命令操作
        • create [-s] [-e] path data acl
        • get path [watch]
        • set path data [version]
        • delete path [version]
        • stat信息
      • 实际操作
        • 新增
        • 读取
        • 修改
        • 删除

zoo.cfg默认配置文件

  • tickTime=2000 zookeeper中最小的时间单位长度 (ms)
  • initLimit=10 follower节点启动后与leader节点完成数据同步的时间
  • syncLimit=5 leader节点和follower节点进行心跳检测的最大延时时间
  • dataDir=/tmp/zookeeper 表示zookeeper服务器存储快照文件的目录
  • dataLogDir 表示配置 zookeeper事务日志的存储路径,默认指定在dataDir目录下
  • clientPort 表示客户端和服务端建立连接的端口号: 2181

zookeeper部分概念

数据模型

zookeeper的数据模型和文件系统类似,每一个节点称为:znode. 是zookeeper中的最小数据单元。每一个znode上都可以保存数据和挂载子节点。 从而构成一个层次化的属性结构

节点特性
  • 持久化节点 : 节点创建后会一直存在zookeeper服务器上,直到主动删除
  • 持久化有序节点 :每个节点都会为它的一级子节点维护一个顺序
  • 临时节点 : 临时节点的生命周期和客户端的会话保持一致。当客户端会话失效,该节点自动清理
  • 临时有序节点 : 在临时节点上多了一个顺序性特性

Watcher

zookeeper提供了分布式数据发布/订阅,zookeeper允许客户端向服务器注册一个watcher监听。当服务器端的节点触发指定事件的时候会触发watcher。服务端会向客户端发送一个事件通知
watcher的通知是一次性,一旦触发一次通知后,该watcher就失效

ACL

zookeeper提供控制节点访问权限的功能,用于有效的保证zookeeper中数据的安全性。避免误操作而导致系统出现重大事故。
CREATE /READ/WRITE/DELETE/ADMIN

zookeeper的命令操作

create [-s] [-e] path data acl

-s 表示节点是否有序
-e 表示是否为临时节点
默认情况下,是持久化节点

get path [watch]

获得指定 path的信息

set path data [version]

修改节点 path对应的data
乐观锁的概念
数据库里面有一个 version 字段去控制数据行的版本号

delete path [version]

删除节点

stat信息

cversion = 0       子节点的版本号
aclVersion = 0     表示acl的版本号,修改节点权限
dataVersion = 1    表示的是当前节点数据的版本号

czxid    节点被创建时的事务ID
mzxid   节点最后一次被更新的事务ID
pzxid    当前节点下的子节点最后一次被修改时的事务ID

ctime = Sat Aug 05 20:48:26 CST 2017
mtime = Sat Aug 05 20:48:50 CST 2017




cZxid = 0x500000015
ctime = Sat Aug 05 20:48:26 CST 2017
mZxid = 0x500000016
mtime = Sat Aug 05 20:48:50 CST 2017
pZxid = 0x500000015
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0   创建临时节点的时候,会有一个sessionId 。 该值存储的就是这个sessionid
dataLength = 3    数据值长度
numChildren = 0  子节点数

实际操作

启动一个服务端和客户端参考:zookeeper安装和启动

help命令提示

[zk: localhost:2181(CONNECTED) 1] help
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

新增

命令

create [-s] [-e] path data acl

普通新增节点node

zk: localhost:2181(CONNECTED) 2] create /node node123
Created /node
[zk: localhost:2181(CONNECTED) 4] ls /
[node, zookeeper]

新增有序节点snode

[zk: localhost:2181(CONNECTED) 5] create -s /snode s123456
Created /snode0000000004
[zk: localhost:2181(CONNECTED) 6] ls /
[node, zookeeper, snode0000000004]

新增临时节点tempnode

[zk: localhost:2181(CONNECTED) 7] create -e /tempnode "会话有限"
Created /tempnode
[zk: localhost:2181(CONNECTED) 9] get /tempnode
会话有限
cZxid = 0xf
ctime = Wed Jan 16 22:51:33 CST 2019
mZxid = 0xf
mtime = Wed Jan 16 22:51:33 CST 2019
pZxid = 0xf
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x1000002a3760000
dataLength = 12
numChildren = 0

读取

[zk: localhost:2181(CONNECTED) 2] get /node
node123
cZxid = 0xd
ctime = Wed Jan 16 22:47:38 CST 2019
mZxid = 0xd
mtime = Wed Jan 16 22:47:38 CST 2019
pZxid = 0xd
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 7
numChildren = 0

修改

[zk: localhost:2181(CONNECTED) 4] set /node hhelk1234
cZxid = 0xd
ctime = Wed Jan 16 22:47:38 CST 2019
mZxid = 0x12
mtime = Wed Jan 16 22:54:20 CST 2019
pZxid = 0xd
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 9
numChildren = 0
[zk: localhost:2181(CONNECTED) 5] get /node
hhelk1234
cZxid = 0xd
ctime = Wed Jan 16 22:47:38 CST 2019
mZxid = 0x12
mtime = Wed Jan 16 22:54:20 CST 2019
pZxid = 0xd
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 9
numChildren = 0

删除

[zk: localhost:2181(CONNECTED) 8] ls /
[node, zookeeper, snode0000000004]
[zk: localhost:2181(CONNECTED) 9] delete /snode0000000004
[zk: localhost:2181(CONNECTED) 11] ls /
[node, zookeeper]

你可能感兴趣的:(分布式)