ZooKeeper简介

ZooKeeper导图

ZooKeeper 服务:

ZooKeeper 名字空间:

推荐一本书

《ZooKeeper分布式过程协同技术详解》

基于 Paxos 算法

wiki: https://en.wikipedia.org/wiki/Paxos_(computer_science)

ZooKeeper 支持的api

ZooKeeper API:
1.create /path data
2.delete /path
3.exists /path
4.setData /path data
5.getData /path
6.getChildren /path

单点ZooKeeper 与 ZooKeeper集群

ZooKeeper服务器的两种工作模式: 独立模式(standalone)和仲裁模式(quorum)
独立模式(standalone): 单独的ZooKeeper服务器。
仲裁模式(quorum): ZooKeeper集合(ZooKeeper ensemble)。 仲裁模式中,为减少ZooKeeper Server数据同步的延迟,法定人数 的概念被使用,法定人数的大小设置非常重要。

仲裁模式试验:
configure 文件:
z1.cfg

1
2
3
4
5
6
7
8
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/root/zookeeper-3.4.8/conf/z1/data
clientPort=2181
server.1=127.0.0.1:2222:2223
server.2=127.0.0.1:3333:3334
server.3=127.0.0.1:4444:4445

z2.cfg

1
2
3
4
5
6
7
8
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/root/zookeeper-3.4.8/conf/z2/data
clientPort=2182
server.1=127.0.0.1:2222:2223
server.2=127.0.0.1:3333:3334
server.3=127.0.0.1:4444:4445

z3.cfg

1
2
3
4
5
6
7
8
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/root/zookeeper-3.4.8/conf/z3/data
clientPort=2183
server.1=127.0.0.1:2222:2223
server.2=127.0.0.1:3333:3334
server.3=127.0.0.1:4444:4445

启动3个节点命令:

1
2
3
/root/zookeeper-3.4.8/bin/zkServer.sh start z1/z1.cfg
/root/zookeeper-3.4.8/bin/zkServer.sh start z2/z2.cfg
/root/zookeeper-3.4.8/bin/zkServer.sh start z3/z3.cfg

连接集群:

1
/bin/zkCli.sh -server 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183

创建 ephemeral 节点:

1
create -e /master "master.example.com"

创建 sequential 节点:

1
create -s /master/task- “cmd"

WatchedEvent 数据结构包含以下信息:

1
2
3
4
5
6
7
8
ZooKeeper会话状态(KeeperState):Disconnected, SyncConnected, AuthFailed, ConnectedReadOnly, SaslAuthenticated, Expired.
事件类型(EventType):NodeCreated, NodeDeleted, NodeDataChanged, NodeChildrenChanged, None.
如果事件类型不是None时,返回一个znode路径.
Watch监视点设置:
NodeCreated:通过exists调用设置监视点。
NodeDeleted:通过exists或getData调用设置监视点。
NodeDataChanged:通过exists或getData调用设置监视点。
NodeChildrenChanged:通过getChildren调用设置监视点。