1、是一个树型结构,类似前端开发中的tree.js组件。
2、每个节点称之为znode,它可以有子节点,也可以有数据。
3、每个节点分为临时节点和永久节点,临时节点会在客户端断开后消失。
4、每个zk节点都各自的版本号,可以通过命令行来显示节点信息。
5、每个节点数据发生变化,那么节点的版本号会累加(乐观锁)。
6、删除、修改过期节点,版本号不匹配则会报错。
6、每个zk节点存储的数据不宜过大,几K即可。
7、节点可以设置acl(权限控制链表),可以通过权限来控制用户的访问。
zookeeper的数据模型可以理解为Linux/Unix的文件目录,如:/usr/local
Linux的ZK客户端命令行学习:
./zkCli.sh可以启动客户端,使用help命令查看命令详解,使用Ctrl+C可以退出客户端:
ZooKeeper -server host:port cmd args
stat path [watch] //stat命令用于查看节点的状态信息
set path data [version] //set命令用于设置节点的数据
ls path [watch] //ls命令用于获取路径下的节点信息,注意路径为绝对路径
delquota [-n|-b] path //delquota命令用于删除配额,-n为子节点个数,-b为节点数据长度
ls2 path [watch] //ls2命令是ls命令的增强版,比ls命令多输出本节点信息
setAcl path acl // setAcl命令用于设置节点Acl,Acl由三部分构成:1为scheme,2为user,3为permission,一般情况下表示为scheme:id:permissions
setquota -n|-b val path //setquota命令用于设置节点个数以及数据长度的配额
history //history用于列出最近的命令历史,可以和redo配合使用
redo cmdno //redo命令用于再次执行某个命令
printwatches on|off //printWatchers命令用于设置和显示监视状态,值为on或则off
delete path [version] //delete命令用于删除节点,如delete /nodeDelete
sync path //sync命令用于强制同步,由于请求在半数以上的zk server上生效就表示此请求生效,那么就会有一些zk server上的数据是旧的。sync命令就是强制同步所有的更新操作。
listquota path //查看指定znode的配额
rmr path //递归删除
get path [watch] //get命令用于获取节点的信息,注意节点的路径必须是以/开头的绝对路径。如get /
create [-s] [-e] path data acl //create命令用于创建节点,其中-s为顺序充点,-e临时节点
addauth scheme auth //addauth命令用于节点认证,使用方式:如addauth digest username:password
quit //退出客户端
getAcl path //获取节点的Acl,如getAcl /node1
close //close命令用于关闭与服务端的链接
connect host:port //连接zk服务端,与close命令配合使用可以连接或者断开zk服务端
返回信息的具体含义:
cZxid = 0x0 //节点创建时的zxid
ctime = Thu Jan 01 08:00:00 CST 1970 //节点创建时间
mZxid = 0x0 //节点最近一次更新时的zxid
mtime = Thu Jan 01 08:00:00 CST 1970 //节点最近一次更新的时间
pZxid = 0x2c //子节点的id
cversion = 10 //子节点数据更新次数
dataVersion = 0 //本节点数据更新次数
aclVersion = 0 //节点ACL(授权信息)的更新次数
ephemeralOwner = 0x0 //如果该节点为临时节点,ephemeralOwner值表示与该节点绑定的session id. 如果该节点不是临时节点,ephemeralOwner值为0
dataLength = 0 //节点数据长度,本例中为hello world的长度
numChildren = 10 //子节点个数
zk的作用体现:
1、master节点选举,主节点挂了以后,从节点就会接手工作,并且保证这个节点是唯一的,这也就是所谓的首脑模式,从而保证我们的集群是高可用的。
2、统一配置文件管理,即只需要部署一台服务器,则可以把相同的配置文件同步更新到其他所有服务器,此操作在云计算的特别多。
3、发布与订阅,类似消息队列MQ(amq,rmq),dubbo发布者把数据存在znode上,订阅者会读取这个数据。
4、提供分布式锁,分布式环境中不同进程之间争夺资源,类似多线程中的锁。
5、集群管理,集群中保证数据的强一致性。