ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。Zookeeper是hadoop的一个子项目,其发展历程无需赘述。在分布式应用中,由于工程师不能很好地使用锁机制,以及基于消息的协调机制不适合在某些应用中使用,因此需要有一种可靠的、可扩展的、分布式的、可配置的协调机制来统一系统的状态。
一、环境要求
二、下载
http://apache.fayea.com/zookeeper/stable/zookeeper-3.4.6.tar.gz
三、独立模式
将 conf/zoo_sample.cfg 改为 conf/zoo.cfg
tickTime=2000 dataDir=/var/lib/zookeeper clientPort=2181
tickTime:它是用来做什么的心跳和最小会话超时将两倍ticktime。
dataDir:存储在内存数据库快照中的位置,除非另有说明,将更新的事务日志记录到数据库中。
clientPort:客户端连接的端口
四、管理zookeeper存储
五、连接zookeeper
Java: Use
bin/zkCli.sh -server 127.0.0.1:2181
Connecting to localhost:2181
log4j:WARN No appenders could be found for logger (org.apache.zookeeper.ZooKeeper).
log4j:WARN Please initialize the log4j system properly.
Welcome to ZooKeeper!
JLine support is enabled
[zkshell: 0]
[zkshell: 0] help
ZooKeeper host:port cmd args
get path [watch]
ls path [watch]
set path data [version]
delquota [-n|-b] path
quit
printwatches on|off
create path data acl
stat path [watch]
listquota path
history
setAcl path acl
getAcl path
sync path
redo cmdno
addauth scheme auth
delete path [version]
deleteall path
setquota -n|-b val path
ls
[zkshell: 8] ls /
[zookeeper]
create
[zkshell: 9] create /zk_test my_data
Created /zk_test
[zkshell: 11] ls /
[zookeeper, zk_test]
get
[zkshell: 12] get /zk_test
my_data
cZxid = 5
ctime = Fri Jun 05 13:57:06 PDT 2009
mZxid = 5
mtime = Fri Jun 05 13:57:06 PDT 2009
pZxid = 5
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0
dataLength = 7
numChildren = 0
set
[zkshell: 14] set /zk_test junk
cZxid = 5
ctime = Fri Jun 05 13:57:06 PDT 2009
mZxid = 6
mtime = Fri Jun 05 14:01:52 PDT 2009
pZxid = 5
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0
dataLength = 4
numChildren = 0
[zkshell: 15] get /zk_test
junk
cZxid = 5
ctime = Fri Jun 05 13:57:06 PDT 2009
mZxid = 6
mtime = Fri Jun 05 14:01:52 PDT 2009
pZxid = 5
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0
dataLength = 4
numChildren = 0
delete
[zkshell: 16] delete /zk_test
[zkshell: 17] ls /
[zookeeper]
[zkshell: 18]
六、编程
七、集群模式
tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181
initLimit=5
syncLimit=2
server.1=zoo1:2888:3888
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888
最后,请注意每个服务器名称后的端口号:“2888”和“3888”。同行使用前端口连接到其他同行。这样的连接是必要的,以便同行可以沟通,例如,同意的顺序更新。更具体地说,一个ZooKeeper服务器使用此端口连接的追随者到领导者。当一个新的领导人出现,跟随者打开一个TCP连接使用此端口的领袖。因为默认的领导人选举也使用TCP,我们目前需要一个端口的选举。这是服务器进入的第二端口。
参考资料
http://www.sxt.cn/u/756/blog/5071