zookeeper笔记总结

zookeeper笔记总结

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

主要角色

avatar

有以下几个特点

  1. 一致:同一时刻各个集群节点的数据保持一致。
  2. 有头:集群中有个Leader老大,所有的写功能都是他处理,保持了数据的一致。
  3. 数据树:数据结构为树状数据结构。

Leader选举流程图

[图片上传失败...(image-346a42-1538289008447)]

主要运用的原理

数据节点

[图片上传失败...(image-cf4635-1538289008447)]

  1. 永久节点,和临时节点
    永久节点在创建后永久有效,临时节点在客户端连接时有效,断开后就失效。
  2. 顺序节点,
    自动在节点后添加顺序

监听机制:watch

监听流程图
[图片上传失败...(image-aa72b8-1538289008447)]

watch机制官方说明:一个Watch事件是一个一次性的触发器,当被设置了Watch的数据发生了改变的时候,则服务器将这个改变发送给设置了Watch的客户端,以便通知它们。

可以注册watcher的方法:getData、exists、getChildren。

可以触发watcher的方法:create、delete、setData。连接断开的情况下触发的watcher会丢失。

一个Watcher实例是一个回调函数,被回调一次后就被移除了。如果还需要关注数据的变化,需要再次注册watcher。

New ZooKeeper时注册的watcher叫default watcher,它不是一次性的,只对client的连接状态变化作出反应。

操作与watcher的对应关系:


WechatIMG1.jpeg
 创建一个单服务

下载镜像
    docker pull zookeeper

创建一个服务器
    docker run --name zk1 -p 0.0.0.0:2181:2181 -d zookeeper

进入服务器
    docker exec  -i -t  zk1 /bin/bash

启动服务
    ./bin/zkServer.sh start

创建一个客户端
    docker run --name client -p 0.0.0.0:2181:2182 -d zookeeper

进入客户端
   docker exec  -i -t  client /bin/bash

执行
    ./bin/zkCli.sh

回车(这时候还必须回车)


这时,单服务就创建好了

创建一个集群zookeeper

1.和创建单服务的方式一样每个服务器上创建一个服务

2.更改容器中的配置文件 /conf/zoo.cfg
    在配置中添加  server.x 的配置

3.在每个dataLogDir配置的文件夹中运行
    # 将序号写进myid中
    echo "1" >myid

***注:zookeeper语法***

客户端语法

1. 查询

列出指定节点

    ls path [watch]    //查看path下包含的节点

是ls的升级版,列出子节点的同时列出节点的状态信息

    ls2 path    //查看当前节点数据并能看到更新次数等数据

列出指定节点的状态信息,或者说是元数据信息

    stat path [watch]

例:

    [zk: h1:2181(CONNECTED) 11] stat /
    # 节点被创建时的事务ID
    cZxid = 0x0
    # 节点创建时间
    ctime = Thu Jan 01 08:00:00 CST 1970
    # 最近一次更新时的事务ID
    mZxid = 0x0
    # 最近一次更新时间
    mtime = Thu Jan 01 08:00:00 CST 1970
    # 该节点的子节点列表最近一次被修改的事务ID
    # 添加、删除子节点会影响该值
    pZxid = 0x0
    # 子节点版本号
    cversion = -1
    # 数据版本号
    dataVersion = 0
    # ACL版本号
    aclVersion = 0
    # 创建临时节点的事务ID
    # 如果是持久节点,则该值为0x0
    ephemeralOwner = 0x0
    # 当前节点的数据长度
    dataLength = 0
    # 当前节点的子节点数目
    numChildren = 1

列出指定节点的数据

    get path [watch]


2. 创建节点:

    create [-s] [-e] path data acl
        s:可选,表示该节点为顺序节点
        e:可选,表示该节点为临时节点(不写为永久节点)
        path:节点路径
        data:节点数据
        acl:访问控制列表

3. 修改文件内容:            set /zk "zkbak" 对 zk 所关联的字符串进行设置

修改节点数据

    set path data [version]
        path : 节点路径
        data : 新数据
        version : 版本号,要么不写,要么和上一次查询出的版本号一致

对节点增加限制(配额)

    setquota -n|-b val path
        n:表示子节点的最大个数
        b:表示数据值的最大长度
        val:子节点最大个数或数据值的最大长度
        path:节点路径

列出指定节点的quota

    listquota path

删除quota

    delquota [-n|-b] path

4. 删除节点:

只能删除不含子节点的节点

    delete path [version]
        path :要删除的节点的路径
        version : 版本号,要么不写,要么和上一次查询出的版本号一致

5. 退出客户端:

    quit

6. 帮助命令:

    help

服务端语法
1.  echo stat | nc 127.0.0.1 2181 来查看哪个节点被选择作为follower或者leader
2.  echo ruok | nc 127.0.0.1 2181 测试是否启动了该Server,若回复imok表示已经启动。
3.  echo dump | nc 127.0.0.1 2181 列出未经处理的会话和临时节点。
4.  echo kill | nc 127.0.0.1 2181 关掉server
5.  echo conf | nc 127.0.0.1 2181 输出相关服务配置的详细信息。
6.  echo cons | nc 127.0.0.1 2181 列出所有连接到服务器的客户端的完全的连接 / 会话的详细信息。
7.  echo envi | nc 127.0.0.1 2181 输出关于服务环境的详细信息(区别于 conf 命令)。
8.  echo reqs | nc 127.0.0.1 2181 列出未经处理的请求。
9.  echo wchs | nc 127.0.0.1 2181 列出服务器 watch 的详细信息。
10. echo wchc | nc 127.0.0.1 2181 通过 session 列出服务器 watch 的详细信息,它的输出是一个与 watch 相关的会话的列表。
11. echo wchp | nc 127.0.0.1 2181 通过路径列出服务器 watch 的详细信息。它输出一个与 session 相关的路径。

***注:zookeeper配置***

# 数据目录
dataDir=/data
# log目录
dataLogDir=/datalog
# zookeeper中使用的基本时间单位, 毫秒值
tickTime=2000
# Follower在启动过程中,会从Leader同步所有最新数据,然后确定自己能够对外服务的起始状态。Leader允许F在 initLimit 时间内完成这个工作
initLimit=5
# 在运行过程中,Leader负责与ZK集群中所有机器进行通信,例如通过一些心跳检测机制,来检测机器的存活状态。如果L发出心跳包在syncLimit之后,还没有从F那里收到响应,那么就认为这个F已经不在线了。
syncLimit=2
# 单个客户端与单台服务器之间的连接数的限制,是ip级别的,默认是60,如果设置为0,那么表明不作任何限制。
maxClientCnxns=60
# server.x中的“x”表示ZooKeeper Server进程的标识
server.1=172.17.0.4:2888:3888
server.2=172.17.0.5:2888:3888
server.3=172.17.0.6:2888:3888

推荐阅读更多精彩内容