zookeeper常见问题及答案

zookeeper概念

  • zookeeper是一个分布式的协调服务软件

协调服务:在分布式环境下,如何控制大家有序的去做某件事。
顺序
一致
共同
共享

  • zookeeper的本质:分布式的小文件存储系统
  • zookeeper是一个标准的主从架构集群。
  • zookeeper最重要的特性:全局数据一致性

可以类比关系型数据库的事务操作
事务(transaction):通俗理解 多个操作组成一个事务,要么一起成功,要么一起失败,不会存在中间的状态。如果中间失败了要进行回滚操作。即回到事务操作前的状态。

  • 存储系统:存储数据、存储文件 目录树结构
  • 小文件:上面存储的数据有大小限制
  • 分布式:可以部署在多台机器上运行,对比单机来理解。
  • 问题:zookeeper这个存储系统和我们常见的存储系统不一样。基于这些不一样产生了很多应用方式。

zookeeper节点类型

  • 临时节点
    会话结束节点删除(会话:就是一个客户端的连接状态,客户端连接成功,会话建立,客户端关闭,会话结束)
  • 永久节点
    创建后,节点永久存在
  • 序列化特征:
    当我们创建节点后,会自动进行编号,在同一个节点中不能出现同名子节点,此时如果我们使用的是序列化节点,则会自动编号避免重复
  • 节点的类型,在创建节点时及定义完成,后续不可修改
 create [-s] [-e] path data acl
 -s  序列化节点
 -e  临时节点
  • 普通节点和序列化节点的区别
[zk: node1(CONNECTED) 1] create /itcast 123  # 创建永久节点
Created /itcast
[zk: node1(CONNECTED) 2] create -s /itcast/qianyu 123 # 创建永久序列化节点
Created /itcast/qianyu0000000000  # 自动给节点编号,不会出现同名节点
[zk: node1(CONNECTED) 3] create -s /itcast/qianyu 123
Created /itcast/qianyu0000000001
[zk: node1(CONNECTED) 4] create -s /itcast/qianyu 123
Created /itcast/qianyu0000000002
[zk: node1(CONNECTED) 5] ls /itcast# 创建多个节点编号不同
[qianyu0000000000, qianyu0000000001, qianyu0000000002]
  • 永久节点和临时节点的区别
  1. 如果是永久节点
    会话地址为0
  2. 如果是临时节点
    回话地址为一段长字符串
    且会话结束的时候, 临时节点会被删除

zookeeper选举机制

在首次启动zookeeper的时候会进行投票
以五台机子为例
在这里插入图片描述

  1. node1先启动,将票投给自己

node1:1票

  1. node2再启动, 将票投给自己

node1: 1票node2: 1票
改票环节: 查询谁的zid值大就投给谁
node1: 0票node2: 2票

  1. node3启动, 将票投给自己

node1: 0票node2: 2票node3:1票
改票关节, 查询谁的zid值大,就投给谁
node1: 0票node2:0票, node3:3票
node3已经票数过半直接当选.其他服务自动分配follower角色

  1. node4启动直接变为follower
  2. node5启动直接变为follower
  • 如果leader宕机,则挑选zid大的值为新leader, 如果zid的值相同,则比较myid值的大小
  • 如果旧leader宕机后,又重新连接到集群中会做什么呢?
  1. 以follower的身份重新加入集群
  2. 对比自己的数据,如果与集群内其余服务不相同,则同步数据
    • 比较自身的数据日志中的编号是否一致,如果不一致则修改.

Zookeeper监听机制Watch

  • 监听实现需要几步?

#1、设置监听
#2、执行监听
#3、事件发生,触发监听 通知给设置监听的 回调callback

  • zookeeper中的监听是什么?
  1. 谁监听谁?

客户端监听zk服务
不是zk集群中的角色间互相监听,而是zk客户端监听zk服务端

  1. 监听什么事?

监听zk上目录树znode的变化情况。
znode增加了 删除了 增加子节点了 不见了

  • zk中监听实现步骤

#1、设置监听 然后zk服务执行监听
ls path [watch]
没有watch 没有监听 就是查看目录下子节点个数
有watch 有监听 设置监听子节点是否有变化
get path [watch]
监听节点数据是否变化
eg: get /itcast watch
#2、触发监听
set /itcast 2222 #修改了被监听的节点数据 触发监听
#3、回调通知客户端
WATCHER::
WatchedEvent state:SyncConnected type:NodeDataChanged path:/itcast
监听的属性 监听类型 监听节点

  • zk的监听特性

  • 先注册 再触发:客户端先在服务端注册监听,再等待事件触发

  • 一次性的监听:监听触发一次后立即失效

  • 异步通知:设置监听后可以进行其他操作,当监听被触发后立即回调监听通知

    • 同步: 按序执行
    • 异步(async): 无序执行
  • 通知是使用event事件来封装的

state:SyncConnected type:NodeDataChanged path:/itheima
type:发生了什么
path:哪里发生的

  • 所有的监听本质上是监控dataVersion,dataVersion改变了则监听触发

  • zk中监听类型

    • 连接状态事件监听 系统自动触发 用户如果不关心可以忽略不计
    • 上述所讲的是用户自定义监听 主要监听zk目录树的变化 这类监听必须先注册 再监听。
      在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值