zookeeper简介

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集群有这样一个特性:集群中只要有过半的机器是正常工作的,那么整个集群对外就是可用的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值