zookeeper特性

一致性:数据一致性,数据按照顺序分批入库
原子性: 事务要么成功,要么失败,不会局部化。
单一视图:客户端连接集群中的任意zk节点,数据是一致的
可靠性:每次对zk的操作状态都是保存在服务端
实时性:客户端可以读取到zk服务端的最新数据

zookeeper目录结构

bin:主要的一些运行命令
conf: 存放配置文件,zk.cfg 等
contrib: 附加的一些功能
dist-maven: mvn编译后的目录
docs: 文档
lib: 依赖的jar包
recipes: 案例demo代码
src: 源码

zookeeper配置文件(zoo.cfg)

tickTime: 用于计算的时间单元。比如session超时:N * tickTime
initLimit: 用于集群,允许从节点连接并同步到master节点的初始化连接时间,以tickTime的倍数来标识
syncLimit: 用于集群,master主节点与从节点之间发送消息,请求和应答时间长度(心跳机制)。
dataDir:必须配置(事务文件,)
dataLogDir: 日志目录,如果不配置会和dataDir公用
clientPort: 连接服务器端口,默认2181

zookeeper启动

Usage: ./zkServer.sh {start|start-foreground|stop|restart|status|upgrade|print-cmd}

zookeeper基本数据模型

树形结构。

类似linux/unix的文件目录:/usr/local/..

每一个节点都称之为znode,它可以有子节点,也可以有数据

每个节点分为临时节点和永久节点,临时节点在客户端断开后消失

每个zk节点都有各自的版本号,可以通过命令行来显示节点信息

每当节点数据发生变化,那么该节点的版本号会累加(乐观锁)

删除/修改过时的节点,版本号不匹配会报错

每个zk节点的数据不宜过大,几k即可

节点可以设置权限acl,可以通过权限来限制用户的访问

zookeeper数据模型基本操作

客户端连接

  1. 启动zk 进入bin目录 ./zkServer.sh start
  2. 连接zk 进入bin目录 ./zkCli.sh
  3. help 查看命令
    [zk: localhost:2181(CONNECTED) 0] help

zk的作用

  1. master节点选举,主节点挂了以后,从节点就会接收工作,并且保证这个节点是唯一的,这也是所谓的首脑模式,从而保证我们的集群是高可用的。
  2. 统一配置文件管理,只需要部署一台服务器,则可以把相同的配置文件同步更新到其他所有服务器。
  3. 发布与订阅,类似消息队列mq,dubbo发布者把数据存在znode上,订阅者会读取这个数据。
  4. 提供分布式锁,分布式环境中不同进程之间争夺资源,类似于多线程中的锁。
  5. 集群管理,集群中保证数据的强一致性。

zk常用的命令

  1. 打开客户端
    ./zkCli.sh
  2. ls 与 ls2

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    [zk: localhost:2181(CONNECTED) 2] ls /zookeeper      
    [quota]
    [zk: localhost:2181(CONNECTED) 3] ls2
    [zk: localhost:2181(CONNECTED) 4] ls2 /
    [zookeeper]
    cZxid = 0x0 节点id
    ctime = Thu Jan 01 08:00:00 CST 1970 创建时间
    mZxid = 0x0 修改后分配的节点id
    mtime = Thu Jan 01 08:00:00 CST 1970 修改时间
    pZxid = 0x0 子节点id
    cversion = -1 子节点version
    dataVersion = 0 当前节点数据的版本号
    aclVersion = 0 权限version
    ephemeralOwner = 0x0
    dataLength = 0 数据长度
    numChildren = 1 子节点数量
  3. get / 获取数据 , stat 获取节点信息

zk特性 - session的基本原理

  1. 客户端与服务端之间的连接存在的会话

每个会话都会设置一个超时时间

心跳结束,session则过期

  1. session 过期则临时节点znode会被抛弃

心跳机制: 客户端向服务端的ping包请求,

zk常用命令操作