1. zookeeper基本知识
zookeeper是一个分布式协调服务的开源框架,zookeeper其实就是一个基于分布式的一个小的文件存储系统,它具有以下五个特性;
1.全局数据一致性;
集群中每个服务器保存一份相同的数据副本,client (客户端)无论连接到哪个服务器,展示的数据都是一致的。
2.顺序性;
包括全局有序和偏序两种:全局有序是指如果在一台服务器上消息 a 在消息 b 前发布,则在所有 Server (节点)上消息 a 都在消息 b 前被发布;偏序是指如果一个消息 b 在消息 a 后被同一个发送者发布,a 必将排在 b 前面。
3.可靠性;
如果消息被其中一台服务器接受,那么将被所有的服务器接受。
4.实时性;
Zookeeper 保证客户端将在一个时间间隔范围内获得服务器的更新信息,或者服务器失效的信息。
5.数据原子性;
数据的一次更新要么成功要么失败,不存在中间阶段。
2.有关zookeeper投票选举出leader
首先来说一下zookeeper的工作原理,它是由leader来进行对事务请求的调度和处理,然后follower处理非客户端的事务请求。转发事务给leader。
然后根据节点id和事务id进行投票选举出leader,事务最新,或者节点id权重较大。则此节点被投票选举为leader 。leader负责处理事务的资源调度,follower负责非事务的任务管理和资源调度。
3.zookeeper实用命令
3.1连接客户端
使用此命令进行客户端连接,之后输入help可以获取更详细的命令。
#zookeeper文件路径 - zkCli.sh –server ip
3.2建立节点
(临时节点在会话结束时会自动结束)
create '文件名' /test '内容' #默认永久有效节点
create -e '文件名' /test_e '内容' #创建临时节点
create -s '文件名' /test_s '内容' #创建顺序节点
3.3读取节点
ls /
#或者
get /
3.4更新节点
set /'文件名' '更新的新内容'
3.5删除节点
delete /'文件名'
#or
rmr /'文件目录' #可以递归删除
4.节点属性
通过命令 get,可以获得节点的属性。
dataVersion:数据版本号,每次对节点进行 set 操作,dataVersion 的值都会增加 1(即使设置的是相同的数据),可有效避免了数据更新时出现的先后顺序问题。
cversion :子节点的版本号。当 znode 的子节点有变化时,cversion 的值就会增加 1。
cZxid :Znode 创建的事务 id。
mZxid :Znode 被修改的事务 id,即每次对 znode 的修改都会更新 mZxid。对于 zk 来说,每次的变化都会产生一个唯一的事务 id,zxid(ZooKeeper Transaction Id)。通过 zxid,可以确定更新操作的先后顺序。例如,如果 zxid1小于 zxid2,说明 zxid1 操作先于 zxid2 发生,zxid 对于整个zk 都是唯一的,即使操作的是不同的 znode。
ctime:节点创建时的时间戳.
mtime:节点最新一次更新发生时的时间戳.
ephemeralOwner:如果该节点为临时节点, ephemeralOwner 值表示与该节点绑定的 session id. 如果不是, ephemeralOwner 值为 0.
5.ZooKeeper Watcher(监听机制)
** **ZooKeeper 允许客户端向服务端注册一个 Watcher 监听,当服务端的一些事件触 发了这个 Watcher,那么就会向指定客户端发送一个事件通知来实现分布式的通知功能。具体命令如下;
get /'文件名' watch
版权归原作者 z小郑不会敲代码 所有, 如有侵权,请联系我们删除。