什么是zookeeper
zookeeper是一个开源的分布式协调服务。
zookeeper 的设计目标:简单的数据模型、可构建集群、顺序访问、高性能。
zookeeper的特点:顺序一致性、原子性、单一系统映像、可靠性
ZooKeeper 集群
集群角色
主节点Leader
既可以为客户端提供写服务又能提供读服务,主节点跟踪从节点状态和任务的有效性,并分配任务到从节点。如果是写请求,那么节点就会向 Leader 提交事务,Leader 接收到事务提交,会广播该事务。 只要超过半数节点写入成功,该事务就会被提交。
从节点 Follower
只能提供读服务
观察者Observer
只能提供读服务,不参与选举,不参与“过半写成功”策略
Leader选举算法-ZAB 协议
1、每次投票会包含所推举的服务器的myid和ZXID,然后各自将这个投票发给集群中其他机器。
2、各服务器接收到投票之后会进行进行检查,如检查是否是本轮投票、是否来自LOOKING状态的服务器。
3、规则是优先检查ZXID。ZXID比较大的服务器优先作为Leader。
4、如果ZXID相同,那么就比较myid。myid较大的服务器作为Leader服务器
zookeeper结构
zNode数据节点
Zookeeper将所有数据存储在内存中,这也就保证了 高吞吐量和低延迟。数据模型是一棵节点树,由斜杠(/)的进行分割的路径,就是一个Znode。 每个节点保存自己的数据内容,同时还会保存一系列属性信息
节点类型
持久节点:一旦这个ZNode被创建了,除非主动进行ZNode的移除操作,否则这个ZNode将一直保存在Zookeeper上
临时节点 :生命周期和客户端会话绑定,一旦客户端会话失效,那么这个客户端创建的所有临时节点都会被移除
zookeeper客户端命令
#打开客户端
zkCli.sh
zkCli.sh -server 127.0.0.1:2181,127.0.0.1:2182,127.0.0.01:2183
#查看znode节点
ls /
#创建znode节点
create /workers ""
#删除节点
delete /workers
#退出
quit
#创建临时节点
create -e /master "192.168.1.158:2223"
#获取节点信息
get /master
#设置监视点 stat命令得到一个znode节点的属性,并允许我们设置监视点
stat /master true