zookeeper
简介
Zookeeper是一个分布式开源框架,提供了协调分布式应用的基本服务,它向外部应用暴露一组通用服务——分布式同步(Distributed Synchronization)、命名服务(Naming Service)、集群维护(Group Maintenance)等,简化分布式应用协调及其管理的难度,提供高性能的分布式服务。ZooKeeper本身可以以单机模式安装运行,不过它的长处在于通过分布式ZooKeeper集群(一个Leader,多个Follower),基于一定的策略来保证ZooKeeper集群的稳定性和可用性,从而实现分布式应用的可靠性。
组成
- znode
- 原语
- watcher机制
节点(Znode)
节点类型
- 临时节点(ephemeral): 依赖于会话,会话结束,临时节点被自动删除; 没有子节点;
- 永久节点(persistent): 不依赖于会话, 需显式删除;
- 顺序节点(sequential): 节点创建时,在末尾添加一个递增计数,该计数对父节点唯一;
节点属性
会话(Session)
监视(Watches)
操作
- create
- delete
- exists
- getACL/setACL
- getChildren
- getData/setData
- sync
leader选举算法
- 所有节点都创建相同路径的顺序临时node;
- 创建序号最小的node的节点成为leader, 其他节点成为follower;
- follower节点监视下一个最小序号的znode, 例如: 8 -> 7;
- 若leader关闭, leader节点创建的znode将会被删除;
- 下一个节点获取leader的移除通知, 检查是否存在其他更小的znode, 若无, 这成为leader; 否则, 该最小znode节点成为leader;
- 其他节点遵循同样算法;
应用
- 分布式锁:
- 统一命名服务:
- 配置管理:
- 集群管理:
- 队列服务:
- 同步队列
- FIFO队列
安装
下载:http://www.apache.org/dyn/closer.cgi/zookeeper/
1 2 3
tar xf zookeeper-3.4.10.tar.gz cd zookeeper-3.4.10 cp conf/zoo_sample.cfg conf/zoo.cfg
Zoo.cfg 文件配置如下:
1 2 3 4
dataDir=/data/zookeeper/ server.1=note1:2888:3888 server.2=note2:2888:3888 server.3=note3:2888:3888
个节点分别设置myid
1 2
$ mkdir -p /data/zookeeper $ echo "1" > /data/zookeeper/data/myid
操作
启动:
1 2 3 4
$ bin/zkServer.sh start # 启动当前节点 $ bin/zkServer.sh status # 查看节点状态 $ bin/zkServer.sh stop # 停止当前节点 $ bin/zkCli.sh # 启动命令行客户端