ZooKeeper数据模型与层次命名空间

树状结构

  • 通过/分隔开路径名

  • 每个路径代表一个节点Znode(zookeeper node)

图片1.jpg

Znode

每个Znode有自身信息,数据、长度、创建时间、修改时间。

Znode维护数据、ACL(access control list,访问控制列表)、时间戳等交换版本号等数据结构,它通过对这些数据的管理来让缓存生效并且令协调更新。每当Znode中的数据更新后版本号将增加。

  • 读写操作

    读写数据原子性,读就读取所有数据,写入时完全覆盖。Znode的ACL存储用户操作权限。

  • 临时节点

    和session相关,session结束,节点删除。

安装

搭建ZooKeeper集群

ZooKeeper配置参数

高级配置

  • dataLogDir

  • maxClientCnxns

    限制客户端连接数,默认0,表示不限制

  • minSessionTimeout 

    会话超时最小值,默认是tickTime的2倍,-1不设置

  • maxSessionTimeout

    会话超时大值,默认是tickTime的20倍,-1不设置

集群配置

  • tickime:心跳周期

  • dataDir:数据目录

  • myid:文件位于dataDir属性指定目录下,里面只有一个数字n,不能重复

  • initLimit:follow到leader的初始连接超时,指定的是tickTime的倍数

  • syncLimit:leader和follow之间消息响应的时间限制,超时后,follow被丢弃

  • server.n=host:port1:port2

    数字n必须是myid中的值

    port1:leader端口,作为leader时,供follower连接的端口

    port2:选举端口,选举leader时供其他follower连接的端口

集群失效的条件:半数服务器挂掉

zk处理集群故障的算法是2n+1,最好在奇数机器数部署

ZooKeeper启动

  • 启动zkServer

    //默认配置启动
    $>zkServer.sh start

    //指定配置启动
    $>zkServer.sh start zoo1.cfg
    $>zkServer.sh stop
    $>zkServer.sh status
    $>zkServer.sh restart