Zookeeper

一、概述

 
(1)Zookeeper是一个分布式的、高性能的、开源的分布式系统协调服务,是一个为分布式应用提供一致性服务的软件,是Dubbo、Hadoop和Hbase的重要组件。
(2)Zookeeper是一个基于观察者模式设计的分布式服务管理框架,负责存储和管理数据,接受观察者注册。一旦这些数据的状态发生改变,Zookeeper将负责通知已在Zookeeper注册上的观察者,
并作出相应的反应,实现集群中类似主/从管理模式
(3)Zookeeper = 文件系统 + 通知机制。Zookeeper维护一个类似文件系统的数据结构,有名称,树节点,Key/Value
(4)一个节点对应一个应用,节点存储的数据就是应用需要的配置信息

二、作用

(1)统一命名服务:每个节点存储一个服务。如dubbo服务注册中心

(2)配置管理:一处更新处处更新。

 

 

 

(3)集群管理:如Hadoop分布式集群管理

(4)分布式消息同步和协调机制

(5)负载均衡

(6)对dubbo的支持

 

三、Zookeeper配置文件说明

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=/tmp/zookeeper
# the port at which the clients will connect
clientPort=2181

(1)tickTime:通信心跳数,Zookeeper服务心跳时间,单位毫秒。Zookeeper使用的基本时间,服务器之间或客户端之间维持心跳的时间间隔。每个tickTime时间都会发送一个心跳。

用于心跳机制,并设置最小session超时时间为两倍心跳时间(session最小超时时间=2*tickTime)

(2)initLimit:leader和follower初始通信时限。集群中follower服务器与leader领导服务器之间初始连接时能容忍的最多心跳数(tickTime的数量),用来限定集群中Zookeeper服务器连接到leader的时限

(3)syncLimit:leader和follower同步通信时限。集群中leader与follower之间最大响应时间单位。如果响应时间超过syncLimit * tickTime,leader认为follower死掉,从服务器列表中删除该follower

 

四、Zookeeper的使用

(一)ZNode节点介绍:Znode=path+nodeValue+Stat

1. Zookeeper的数据模型整体上可以看作是一棵树,每个节点成为ZNode,默认存储1MB数据,每个ZNode都有其路径唯一标识。

 

 

 

 

 

 

 

 

 

 

2. 数据模型

[zk: localhost:2181(CONNECTED) 3] get -s /testNode
sam1
cZxid = 0x4
ctime = Fri Nov 06 21:26:03 EST 2020
mZxid = 0x8
mtime = Fri Nov 06 21:40:41 EST 2020
pZxid = 0x4
cversion = 0
dataVersion = 3
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 4
numChildren = 0

 

每次修改Zookeeper状态都会收到唯一的一个zxid形式的时间戳,也就是Zookeeper的事务ID。

 

 

 

  3. 节点类型

  • 持久节点:默认值
    • 持久化目录节点:客户端与zookeeper断开连接后,该节点依旧存在
    • 持久化序号目录节点:客户端与zookeeper断开连接后,该节点依旧存在,节点名称按顺序编号
  • 临时节点:指定参数-e
    • 临时目录节点:客户端与zookeeper断开连接后,该节点被删除
    • 临时序号目录节点:客户端与zookeeper断开连接后,该节点被删除,节点名称按顺序编号

  4. 四字命令

  公式:echo 四字命令 | nc 主机IP zookeeper 端口

  ruok和envi比较常用

 

 

 

 

 

 

(二)常用命令:

#ls按日期排序
ls -ltr

#查看是否启动
ps -ef | grep [z]ookeeper

#测试是否启动成功
echo ruok | nc 127.0.0.1 2181
echo stat | nc 127.0.0.1 2181

#启动、重启、关闭zookeeper,首先要进入bin目录下
./zkServer.sh start/restart/stop

#连接客户端
./zkCli.sh
#退出客户端
quit

#连接客户端后,可以使用帮助命令
help

#常用命令 help ls ls2 stat set get create delete rmr

create /testNode linxw //不能重复create
get /testNode
set /testNode xwd //服务注册


 

 

(3)Zookeeper会话

客户端使用某种语言绑定创建一个到服务的句柄时,就建立了一个ZooKeeper会话。会话创建后,句柄处于CONNECTING状态,客户端库会试图连接到组成ZooKeeper服务的某个服务器;连接成功则进入到CONNECTED状态。通常操作中句柄将处于这两个状态之一。如果发生不可恢复的错误,如会话过期、身份鉴定失败,或者应用显式关闭,则句柄进入到CLOSED状态。

(4)Zookeeper通知机制:客户端注册监听它关系的目录节点,当目录节点发生变化(数据修改,被删除,子目录节点增加删除)时,zookeeper会通知客户端。

(5)Zookeeper事件:

  1. 一次触发:当数据发生变化时,zkserver向客户端发送一次性动作watch,即触发一次不再有效。要持续watch时,需要客户端重新设置watcher。
  2. 发往服务端:watcher是异步发往客户端的,zookeeper提供一个顺序保证:在看到watch事件之前绝不会看到变化。这样客户端看到是一致性的顺序。
  3. 为数据设置watch:节点有不同的改动方式,可认为zookeeper维护两个观察列表:数据观察和子节点观察
  4. 时序性和一致性:

posted @ 2020-11-10 07:08  wulinsam  阅读(97)  评论(0)    收藏  举报