Zookeeper基础知识

Zookeeper

是Apache开发的开源组件。是Hadoop的子间件之一,但是不只是支持Hadoop,支持常见的大部分的分布式框架。

分布式存在的问题

  1. 需要设置管理节点
  2. 如果管理节点只有一个,那么就存在单点问题:即这台服务器一旦宕机,那么入口被封闭。
  3. 为了解决单点问题,引入管理集群,就会产生多个管理者的情况
  4. 需要在管理集群中选出一个leader
  5. 确定一套选举机制
  6. 管理节点之间实现信息的共享
  7. 需要一套机制来确定一个唯一的leader
  8. 分布式锁:死锁,活锁(没有把持资源,占用CPU)。

搭建单机的Zookeeper

  1. 运行环境中必须安装了JDK1.6及以上
  2. 解压Zookeeper的压缩包
  3. 打开conf(配置)
  4. cp zoo_sample.cfg zoo.cfg — zookeeper在启动的时候需要自动寻找zoo.cfg
  5. cd …/bin
  6. 启动Zookeeper的服务器:sh zkServer.sh start
    1. jps:查看java进程,如果是单机的,可以用这种方式查看,如果是集群版本,则不意味着集群就搭建成功
    2. sh zkServer.sh status Standalone
  7. Zookeeper进行启动的时候,会在启动的目录下生成一个zookeeper.out,存储的就是启动的信息日志。

Zookeeper的默认端口号是2181

Zookeeper的结构

  1. Zookeeper本身一个树状结构
  2. 根节点是/
  3. 每一个节点都要存储数据
  4. 没有相对路径,只有绝对路径
  5. 每一个节点的路径是唯一的
  6. 任意一个持久节点都可以挂载子节点
  7. 所有的临时节点都不能挂载子节点
  8. 所有节点存储的数据是字节形式
  9. Zookeeper构成的这棵树是维系在内存中
  10. 每一个节点是一个znode节点

Zookeeper的基本命令

  1. ls 路径 查看指定路径下的所有的子节点
  2. create 路径 数据 创建节点
  3. create -e 路径 数据 创建临时节点
  4. get 路径 查看指定节点的信息
  5. set 路径 数据 修改指定节点的数据
  6. delete 路径 删除指定节点,但是要求节点下没有子节点
  7. rmr 路径 删除这个节点及其子节点

节点信息

Zookeeper会对每一次发生的事务(创建、更新、删除)进行一个编号,编号是依次递增1个

cZxid 创建事务id

ctime 创建时间

mZxid 修改事务id

mtime 修改时间

pZxid 最大事务id

cversion 创建版本

dataVersion 数据版本 节点的数据每修改依次,那么数据版本就+1

Zookeeper节点的类型

持久节点 - 0:可以挂载子节点

临时节点 - 1:不能挂载子节点,关机即没

持久顺序节点 - 2:会对节点顺次编号

临时顺序节点 - 3:-e -s

Zookeeper本身是基于Netty的

Zookeeper的API操作

pom文件需要加入的依赖:

<dependency>				<groupId>org.apache.zookeeper</groupId>		<artifactId>zookeeper</artifactId>
<version>3.4.8</version>
</dependency>

Zookeeper的集群配置

  1. 解压压缩包

  2. 进入conf目录

  3. cp zoo_sample.cfg zoo.cfg

  4. 编辑zoo.cfg,改变属性dataDir=/home/software/zookeeper-3.4.8/tmp

  5. server.编号=ip地址:2888:3888 — 2888是原子广播端口,3888是选举端口,只要端口不冲突就可以使用

  6. 需要在dataDir指定的目录下来创建一个文件:myid,文件内容就是当前服务器的编号

  7. 其他服务器依次做类似操作 scp -r 文件 ip地址:存放路径

    scp -r zookeeper-3.4.8 10.9.130.83:/home/software

    注意:如果在集群中只启动了一个节点,那么这个节点默认是失败的,至少出现一半以上的节点才能查看状态。

ZooKeeper的选举机制

  1. 数据恢复阶段:保证每一个节点都能找到当前节点的最大事务id
  2. 选举阶段:每一个节点都会提交自己的选举信息,并且推荐自己当leader。在选举的时候比较每一个节点所提交的选举信息(最大事务id—pZxid,选举id—myid,逻辑时钟 — 保证是同一轮选举),在选举的时候是先比较两个节点的最大事务id,谁大谁就胜出。如果事务id一致,那么就根据myid进行比较,谁大谁胜出。选举的时候不是一次胜出就能够当leader,而是要满足过半性原则。一旦选出leader,后续添加的节点无论事务id和myid是多少,都只能作为follower。每一个节点将会对应不同的状态:Looking(选举),Follower(追随),Leader(管理),Observer(观察)
  3. 集群要想对外提供服务,也需要满足过半性:即至少有一半以上有选举权的服务器还存活。
  4. 集群在选举过程中不对外提供服务。
Observer - 观察者

和follower一样具有对外提供事务的能力,但是不参加选举。适用于网络不稳定条件下的事务处理。

过半性的意义
  1. 选举要满足过半性
  2. 处理事务的时候需要有过半的节点同意才能处理
  3. 防止脑裂 — 通常都会将节点个数设置为奇数个

Zookeeper根据Paxos来进行选举的。

[外链图片转存失败(img-hO70Tt3t-1563594858658)(C:\Users\PC\AppData\Roaming\Typora\typora-user-images\1539937171529.png)]

[外链图片转存失败(img-LZw4XDCY-1563594858662)(C:\Users\PC\AppData\Roaming\Typora\typora-user-images\1539937533921.png)]

log文件的位置由dataDir来决定

节点的事务id实际上是有64位,前32和leader有关,后32位就是实际的事务id

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值