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
响应客户端,写操作完成!