zookeeper

基本概念

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查看部分示例代码。

原文地址:https://www.cnblogs.com/sjp007/p/10149870.html