基本概念
zookeeper是一个分布式应用程序协调服务,它是集群的管理者,监视着集群的各个节点状态。
zookeeper文件系统
Zookeeper提供一个多层级的节点命名空间,类似文件系统。zookeeper为了保证高吞吐量,在内存中维护了文件树。四种类型的节点:
持久化目录节点:客户端与zookeeper断开连接后,该节点依旧存在
持久化顺序目录节点:客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号
临时目录节点:客户端与zookeeper断开连接后,该节点被删除
临时顺序目录节点:客户端与zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号
zookeeper通知机制
client端会对某个znode建立一个watcher事件,当该znode发生变化时,这些client会收到zk的通知,然后client可以根据znode变化来做出业务上的改变等。
zookeeper协议
ZAB协议是为zookeeper专门设计的一种支持故障恢复的原子广播协议,采用Paxos算法,一种基于leader、follower模型的算法。
zookeeper集群配置
集群中每个机子都需要安装zookeeper
下载:http://archive.apache.org/dist/zookeeper/
安装:
tar -zxf zookeeper-3.4.5.tar.gz -C /usr/develop
配置存储数据和日志:
cd /usr/develop/zookeeper-3.4.5 mkdir data mkdir logs
配置zoo.cfg
tickTime=2000 dataDir=/usr/develop/zookeeper-3.4.5/data dataLogDir=/usr/develop/zookeeper-3.4.5/logs clientPort=2181
启动和停止
进入bin目录: ./zkServer.sh start ./zkServer.sh stop ./zkServer.sh restart ./zkServer.sh status
客户端
- zkCli.sh
可使用./zkCli.sh -server localhost来连接到Zookeeper服务上。使用ls /可查看根节点下有哪些子节点,可以双击Tab键查看更多命令。
- Java客户端
可创建org.apache.zookeeper.ZooKeeper对象来作为zk的客户端,注意,java api里创建zk客户端是异步的,为防止在客户端还未完成创建就被使用的情况,这里可以使用同步计时器,确保zk对象创建完成再被使用。
- C客户端
可以使用zhandle_t指针来表示zk客户端,可用zookeeper_init方法来创建。可在ZK_HOMEsrccsrc cli.c查看部分示例代码。