05-ZooKeeper

一、Zookeeper的简介

1、简介

Zookeeper是java编写的一个开源的分布式的存储中间件!

Zookeeper可以用来存储分布式系统中各个进程都关心的核心数据!

Zookeeper采取观察者模式设计,可以运行客户端在读取数据时,设置一个观察者一旦观察的节点触发了指定的事件,服务端会通知客户端线程,客户端可以执行回调方法,执行对应的操作!

Zookeeper=文件系统+通知机制

2、数据结构

在Zookeeper中每个存储数据的基本单位称为znode,每个znode都有一个路径标识,还可以保存byte[]类型的数据,这个数据默认为1m。

所有的znode都挂载在/节点上

3、安装

① 必须保证环境变量有JAVA_HOME

② 解压,后配置conf/zoo.cfg文件,配置dataDir=非/tmp目录即可

③ 集群模式,需要将集群中所有的zk实例进行配置

④ 如果是集群模式,需要在dataDir中,配置myid文件,myid中需要编写zk的serverid

4、使用

启动: bin/zkServer.sh start
bin/zkCli.sh -server host:port

停止: bin/zkServer.sh stop
bin/zkCli.sh -server host:port close|exit

5、常用的命令

增: create [-s] [-e] path data
  -s: 创建一个带序号的znode
  -e: 创建一个临时znode,临时的znode被所创建的session拥有,一旦session关闭,临时节点会被删除

删: delete path
   rmr path

改: set path data

查: get path
   stat path
   ls path
   ls2 path

6、支持四字命令

nc hadoop101 2181 ruok

7、设置观察者

get path watch: 监听指定节点数据的变化

ls path watch: 监听当前路径子阶段数据的变化,一旦新增或删除了子节点,会触发事件

注意: 观察者在设置后,只有当次有效!

二、ZK集群的注意事项

1. ZK在设计时,采用了paxos协议设计,这个协议要求,集群半数以上服务实例存储,集群才可以正常提供服务

2. ZK集群中,server有Leader 和Followwer两种角色,Leader只有一个,在集群启动时,自动选举产生!

选举Leader时,只有数据和Leader保持同步的Follower有权参与竞选Leader!

在竞选Leader时,serverid大的Server有优势!

3. 集群模式ZK的写流程

①客户端可以连接任意的zkserver实例,向server发送写请求命令
②如果当前连接的server不是Leader,server会将写命令发送给Leader
③Leader将写操作命令广播到集群的其他节点,所有节点都执行写操作命令
④一旦集群中半数以上的节点写数据成功,Leader会响应当前Server,让当前Server
响应客户端,写操作完成!

posted @ 2022-03-06 21:46  bug开发工程师  阅读(33)  评论(0编辑  收藏  举报