文章目录
zookeeper简介
官网地址:http://ZooKeeper.apache.org/
官网 API 地址:http://ZooKeeper.apache.org/doc/r3.4.10/api/index.html
1:简介
ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,主要用来分布式同步,配置管理,集群管理,命名管理,队列管理。
1:zookeeper特点
-
1、 最终一致性:client 不论连接到哪个 Server,展示给它都是同一个视图,这是 ZooKeeper最重要的性能。
-
2、 可靠性:具有简单、健壮、良好的性能,如果消息 m 被到一台服务器接受,那么它将被所有的服务器接受。
-
3、 实时性:ZooKeeper 保证客户端将在一个时间间隔范围内获得服务器的更新信息,或者服务器失效的信息。但由于网络延时等原因,ZooKeeper 不能保证两个客户端能同时得到刚更新的数据,如果需要最新数据,应该在读数据之前调用 sync()接口。
-
4、 等待无关(wait-free):慢的或者失效的 client 不得干预快速的 client 的请求,使得每个client 都能有效的等待。
-
5、 原子性:更新只能成功或者失败,没有中间状态。
-
6、 顺序性:包括全局有序和偏序两种。
2:zookeeper架构
ZooKeeper 是集群的管理者,监视着集群中各节点的状态,根据节点提交的反馈进行下一步合理的操作。
Leader:
Zookeeper 集群工作的核心
事务请求(写操作) 的唯一调度和处理者,保证集群事务处理的顺序性;
集群内部各个服务器的调度者。
对于 create, setData, delete 等有写操作的请求,则需要统一转发给leader 处理, leader 需要决定编号、执行操作,这个过程称为一个事务。
Follower:
处理客户端非事务(读操作) 请求,
转发事务请求给 Leader;
参与集群 Leader 选举投票 2n-1台可以做集群投票。
此外,针对访问量比较大的 zookeeper 集群, 还可新增观察者角色。
Observer:
观察者角色,观察 Zookeeper 集群的最新状态变化并将这些状态同步过
来,其对于非事务请求可以进行独立处理,对于事务请求,则会转发给 Leader
服务器进行处理。
不会参与任何形式的投票只提供非事务服务,通常用于在不影响集群事务
处理能力的前提下提升集群的非事务处理能力。
扯淡:说白了就是增加并发的读请求
2.1:zookeeper文件系统设计
ZooKeeper 的命名空间就是 ZooKeeper 应用的文件系统,它和 linux 的文件系统很像,也是树状,这样就可以确定每个路径都是唯一的,对于命名空间的操作必须都是绝对路径操作。与linux文件系统不同的是,linux文件系统有目录和文件的区别,而ZooKeeper统一叫做znode。
1:Znode
znode 即是文件夹又是文件的概念,每个znode有唯一的路径标识,既能存储数据,也能创建子znode。但是 znode 只适合存储非常小量的数据,不能超过 1M,最好小于 1K。
Znode 有两种类型:
- 临时节点,连接是注册到znode,建立连接,服务器掉线就会删除注册的znode,断开连接
- 持久化 znode 节点,一旦创建这个 znode 点存储的数据不会主动
消失,除非是客户端主动的 delete
2.2:zookeeper监听机制
客户端注册监听它关心的目录节点,当目录节点发生变化(数据改变、节点删除、子目录节
点增加删除)时,ZooKeeper 会通知客户端。
3:zookeeper主要作用
- 命名服务:命名服务是分布式系统中较为常见的一类场景,分布式系统中,被命名的实体通常可以是集群中的机器、提供的服务地址或远程对象等。Zookeeper 可以实现一套分布式全局唯一 ID 的分配机制
- 集群管理:所谓集群管理无在乎两点:是否有机器退出和加入、选举 master。(临时节点注册实现)
4:集群安装
5:集群使用
bin/zkCli.sh IP:PORT 进入 ZooKeeper 的命令行客户端,也可以-server ip:port指定zk服务器连接
- help查看帮助
- ls / 查看节点下目录或者数据
- create /目录 “内容” :创建节点并写数据
- create -e /目录 “内容” :创建临时节点并写数据
- get /znode :获取该节点内容
- delete /zk :只能删除没有子 znode 的 znode
- rmr /zk :不管里头有多少 znode,统统删除
6:zookeeper常见面试题
6.1:zookeeper为什么建议是奇数个
建议最少是三个节点。
1:提高集群的容错性
2:减少资源浪费
Zookeeper容错指的是当宕掉几个Zookeeper节点服务器之后,剩下的个数必须大于宕掉的个数,也就是剩下的节点服务数必须大于n/2,这样Zookeeper集群才可以继续使用,无论奇偶数都可以选举Leader。例如5台Zookeeper节点机器最多宕掉2台,还可以继续使用,因为剩下3台大于5/2。
至于为什么最好为奇数个节点?
这样是为了以最大容错服务器个数的条件下,能节省资源。
比如,最大容错为2的情况下,对应的Zookeeper服务数,奇数为5,而偶数为6,也就是6个Zookeeper服务的情况下最多能宕掉2个服务。
所以从节约资源的角度看,没必要部署6(偶数)个Zookeeper服务节点。
Zookeeper集群有这样一个特性:集群中只要有过半的机器是正常工作的,那么整个集群对外就是可用的。