登录
hadoop@hadoopMaster:~$ zkCli.sh -server hadoopMaster:2181
[zk: hadoopMaster:2181(CONNECTED) 0] help
[zk: hadoopMaster:2181(CONNECTED) 3] create /zk mydatatest
Created /zk
[zk: hadoopMaster:2181(CONNECTED) 4] ls /
[zk, hbase, zookeeper]
[zk: hadoopMaster:2181(CONNECTED) 5] get /zk
mydatatest
cZxid = 0x2d00000093
ctime = Thu Jul 17 09:20:54 CST 2014
mZxid = 0x2d00000093
mtime = Thu Jul 17 09:20:54 CST 2014
pZxid = 0x2d00000093
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 10
numChildren = 0
[zk: hadoopMaster:2181(CONNECTED) 6] set /zk ColonelHou
cZxid = 0x2d00000093
ctime = Thu Jul 17 09:20:54 CST 2014
mZxid = 0x2d00000094
mtime = Thu Jul 17 09:22:08 CST 2014
pZxid = 0x2d00000093
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 10
numChildren = 0
[zk: hadoopMaster:2181(CONNECTED) 7] get /zk
ColonelHou
cZxid = 0x2d00000093
ctime = Thu Jul 17 09:20:54 CST 2014
mZxid = 0x2d00000094
mtime = Thu Jul 17 09:22:08 CST 2014
pZxid = 0x2d00000093
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 10
numChildren = 0
[zk: hadoopMaster:2181(CONNECTED) 8] delete /zk
[zk: hadoopMaster:2181(CONNECTED) 9] ls /
[hbase, zookeeper]
ZK是一种高性能、可扩展的服务,为分布式应用提供一致性服务的软件;
使用一个类似文件系统的树结构;数据可以挂在某个节点上,可以对这个节点进行删改。
另外我们还发现,当改动一个节点的时候,集群中活着的机器都会更新到一致的数据。
每个树结点在ZK中叫znode,只有唯一的路径标识,
znode 可以是临时节点,一旦创建这个 znode 的客户端与服务器失去联系,这个 znode 也将自动删除
读写速度非常快(因为它的结点都存在内存中),并且读的速度要比写的速度更快,更新日志被记录到了磁盘中,以便用于恢复数据。为避免单点失效,zookeeper的数据是在多个server上留有备份的。不管客户端连接到的是哪个server,它看到的数据都是一致的。如果client和一个server的TCP连接失效,它会尝试连接另一个server。众多server中有一个是leader。读是局部性的,即client只需要从与它相连的server上读取数据即可;而client有写请求的话,与之相连的server会通知leader,然后leader会把写操作分发给所有server。所以定要比读慢很多。
CreateMode
PERSISTENT:创建后只要不删就永久存在
EPHEMERAL:会话结束年结点自动被删除,EPHEMERAL结点不允许有子节点
SEQUENTIAL:节点名末尾会自动追加一个10位数的单调递增的序号,同一个节点的所有子节点序号是单调递增的
PERSISTENT_SEQUENTIAL:结合PERSISTENT和SEQUENTIAL
EPHEMERAL_SEQUENTIAL:结合EPHEMERAL和SEQUENTIAL
Watcher & Version
watcher分为两大类:data watches和child watches。getData()和exists()上可以设置data watches,getChildren()上可以设置child watches。
setData()会触发data watches;
create()会触发data watches和child watches;
delete()会触发data watches和child watches.
ZK的Leader机制:
ZK需要在所有的服务器中选举出一个Leader ,然后让这个Leader来负责管理集群。此时,集群中的其它服务器则成为此 Leader 的 Follower 。并且,当 Leader 故障的时候,需要 ZooKeeper 能够快速地在 Follower 中选举出下一个 Leader 。这就是 ZooKeeper 的 Leader 机制
Leader选举实现: