1.zookeeper基础知识

1.zookeeper简介

  • 中间件:提供协调服务。
  • 作用于分布式系统,发挥其优势,可以为大数据服务。
  • 支持java,提供Java和C语言的客户端API。

2.什么是分布式系统

  • 很多计算机组成的一个整体,一个整体一致对外,并且处理同一请求。
  • 内部的每台计算机都可以相互通信。(rest/rpc)
  • 客户端到服务端的一次请求到响应结束会经历多台计算机。

3.zookeeper的特性

  • 一致性:数据的一致性,数据按照顺序先后入库。
  • 原子性:要么全部成功,要么全部失败。
  • 单一视图:客户端连接集群的任一zk节点,数据都是一致的。
  • 可靠性:每次对zk的操作状态都会保存到服务端。
  • 实时性:客户端可以读取到zk服务端的最新数据(高并发情况需要断开重新连接)。

4.zookeeper目录介绍

  • bin:
  • config:
  • contrib:附加目录(一般情况用不到)。
  • dist-maven:mvn编译后的目录。
  • docs:文档帮助。
  • lib:需要依赖的jar包。
  • recipes:案例demo代码。
  • src:源码。

5.zoo.cfg配置

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

6.zookeeper的基本数据模型

  • 是一个树形结构。
  • 每一个节点都称为znode,可以有子节点,也可以有数据。
  • 每个节点分为临时节点和永久节点,临时节点在客户端断开后消失。
  • 每个zk节点都有自己的版本号,可以通过命令行来显示版本信息。
  • 每当节点数发生变化,那么该节点的版本号会累加(乐观锁)。
  • 删除/修改过时节点,版本不匹配则会报错。
  • 每个zk几点存储的数据不宜过大,几K接口。
  • 节点可以设置acl权限,可以通过权限来限制用户的访问。

7.zookeeper基本操作

  • ls /
  • ls /zookeeper/quota

8.zookeeper的作用

  • master节点选举,主节点挂掉之后,从节点就会接手工作,并且保证这个节点是唯一的,这就是首脑模式,从而保证我们的集群是高可用的。
  • 统一配置文件的管理,即只需要部署一台服务器,则可以把相同的配置文件同步更新到其他所有服务器,此操作在云计算中用到的比较多(例如修改了redis的统一配置)。
  • 发布与订阅,类似消息队列MQ,dubbo发布者将数据存在znode上,订阅者会读取这个消息。
  • 提供分布式锁,分布式环境中不同进程之间争夺资源,类似于多线程中的锁。
  • 集群管理,集群中保证数据的强一致性。

9.zookeeper的常用命令

  • ls:查看节点信息---ls /
  • ls2:查看zookeeper节点的状态信息 ---ls2 /zookeeper
  • get:get /
  • stat:stat /
  • create:
    • create /imooc imooc-data(默认:持久化节点)。
    • create -e /imooc/tmp imooc-tmp-data(临时节点session断开之后不会立即失效,与心跳时间有关)。
    • create -s /imooc/sec sec01(创建顺序节点)。
  • set:
    • set / imooc new-imooc-data(修改数据)
    • set /imooc new-imooc-data 1(指定版本,乐观锁,与当前版本对比,不一致不能修改)。
  • delete:
    • delete /imooc/sec0000001(直接删除)。
    • delete /imooc/sec0000002(添加乐观锁删除最新版本)。
    • rmr /node (删除节点包含子节点)
  • 状态中的属性(get/stat)
    • cZxid:zookeeper创建这个节点之后,为这个节点分配的一个id。
    • ctime:zookeeper的创建时间。
    • mZxid:修改后的zookeeper分配的id。
    • mtime:修改时间。
    • pZxid:子节点的id。
    • cversion:子节点版本
    • dataVersion:当前节点的数据版本号(修改数据后会加一)。
    • aclVersion:权限发生变化会加一。
    • ephemeralOwner:表示是临时节点还是持久化节点。
    • dataLength:数据长度。
    • numChildren:子节点的个数。

10.session的基本原理

  • 客户端与服务端之间的连接存在会话。
  • 每个会话都可以设置一个超时时间
  • 心跳结束,session则过期
  • session过期,则临时节点znode会被抛弃。
  • 心跳机制,客户端向服务端的ping包请求。

11.watcher机制

  • 针对每个节点,都会有一个监督者---watcher。
  • 当监控得某个对象(znode)发生了变化,则触发watcher事件。
  • zk中的watcher是一次性的,触发后立即销毁。
  • 父节点,子节点增删改都能够触发其watcher。
  • 针对不同类型的操作,触发的watcher事件也是不同的。
    • (子)节点创建事件。
    • (子)节点删除事件。
    • (子)节点数据变化事件。

12.watcher命令行

  • 通过 get path [watcher]设置watcher。
  • 父节点增删改操作触发watcher。
  • 子节点增删改操作触发watcher。

13.watcher事件类型

  • 创建父节点触发:NodeCreated。
  1. 针对imooc创建一个watcher事件: stat /imooc watcher。
  2. create /imooc 123 (先创建内容,后创建事件也可以)。

14.子节点watcher事件

  • 修改父节点数据触发:NodeDataChanged。
  • 删除父节点触发:NodeDeleted。
  • ls为父节点创建watcher,创建子节点触发NodeChildrenChanged。
  • ls为父节点创建 watcher,删除子节点触发NodeChildrenChanged。
  • ls为父节点创建 watcher,修改子节点不触发事件。

15.watcher使用场景(类似触发器)

  • 统一资源配置:主机节点更新配置信息,客户端监听到watcher事件,也更新客户端配置信息。

16.补充命令

  • zookeeper当节点还有子节点的时候,delete命令无法删除父节点,可以使用rmr命令 rmr = rm -rf
  • history查看历史命令

 

 

 

 

 

 

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值