zookeeper作用很大,我们先来实践一下。当然先不用java,不用编程,就命令行。首先用客户端工具连接zk:
zookeeper-3.4.6/bin/zkCli.sh -server localhost:2181
进入提示符,列目录:
[zk: localhost:2181(CONNECTED) 0] ls /
[zookeeper]
查看当前节点数据并能看到更新次数等数据。
[zk: localhost:2181(CONNECTED) 1] ls2 /zookeeper
[quota]
cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x0
cversion = -1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 1
创建文件及内容。
[zk: localhost:2181(CONNECTED) 3] create /test "test"
Created /test
获取文件内容。
[zk: localhost:2181(CONNECTED) 4] get /test
"test"
cZxid = 0x100000008
ctime = Tue Jun 30 18:05:22 CST 2015
mZxid = 0x100000008
mtime = Tue Jun 30 18:05:22 CST 2015
pZxid = 0x100000008
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 0
修改节点内容。
[zk: localhost:2181(CONNECTED) 5] set /test "ok"
cZxid = 0x100000008
ctime = Tue Jun 30 18:05:22 CST 2015
mZxid = 0x100000009
mtime = Tue Jun 30 18:07:02 CST 2015
pZxid = 0x100000008
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 4
numChildren = 0
删除节点。
[zk: localhost:2181(CONNECTED) 6] delete /test
[zk: localhost:2181(CONNECTED) 7] ls /
[zookeeper]
zk有这么些操作,能派什么用处呢。从设计模式来说,zk是基于观察者模式来设计的,一旦文件有什么风吹草动,它就会一一通知注册在zk的观察者。
然后派生出如下的作用:
1.统一命名服务
看到zk和文件目录一样的树形节点结构,就应该不难理解,可以用作这个服务了。
2.配置管理
将配置信息放到zk里,前面说了zk的观察者模式,只要配置有修改,每个注册的节点就会接收到更新的配置。
3.集群管理功能
zk的推举leader机制比较有意思,奇数个节点总能推一个能用的出来作为leader.确保整个集群都有一个唯一的管理者来对集群进行管理。这样集群的
风吹草动都必须经过管理者,确保了集群服务的高可用性。
4.共享锁
编过文件锁的同学有福了,zk的共享锁一个道理,哪个需要读取,就生成一个自己的独一文件目录,如果创建成功,就说明自己获取了这把锁。完毕退出,一定要删除自己的目录。
以上就是Zk基于上面文件操作派生出来的一点联想。大道至简,很简单的一个思想却保证了大数据集群的稳定高效,对不对?