文章目录

  • 概述
  • ZK产生的背景
  • 安装
    • JDK依赖
    • 下载
    • 解压
    • 修改配置文件
    • 启动 / 停止
    • 连接服务器
  • 配置文件说明
  • ZK 核心概念 (文件系统数据结构+监听通知机制)
    • 文件系统数据结构
    • 6种Node类型
    • 监听通知机制
  • ZK的应用场景


概述

说点正确的废话

zookeeper是一个分布式协调框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。

ZK由JAVA编写,支持JAVA 和C两种语言的客户端。


ZK产生的背景

通常情况下,单个物理节点很容易达到性能,计算或者容量的瓶颈,所以这个时候就需要多个物理节点来共同完成某项任务,一个分布式系统的本质是分布在不同网络或计算机上的程序组件,彼此通过信息传递来协同工作的系统,而Zookeeper正是一个分布式应用协调框架,在分布式系统架构中有广泛的应用场景。

项目从单体到分布式转变之后,将会产生多个节点之间协同的问题

  1. 每天的定时任务由谁哪个节点来执行
  2. RPC调用时的服务发现
  3. 如何保证并发请求的幂等

这些问题可以统一归纳为多节点协调问题,如果靠节点自身进行协调这是非常不可靠的,性能上也不可取。必须由一个独立的服务做协调工作,它必须可靠,而且保证性能。


安装

JDK依赖

Java编写,依赖JDK, JDK Version >=8


下载

官网下载: https://zookeeper.apache.org/releases.html#download

当然了,国内也有镜像可以下载,比如

3.5.8 版本

[root@localhost ~]# wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.5.8/apache-zookeeper-3.5.8-bin.tar.gz

3.6.2 版本

[root@localhost ~]# wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.6.2/apache-zookeeper-3.6.2-bin.tar.gz

这里我们选用3.5.8的版本


解压

[root@localhost ~]# tar -xvzf apache-zookeeper-3.5.8-bin.tar.gz 

修改配置文件

cd  {zookeeper_home}/conf   # 按实际路径调整
cp zoo_sample.cfg zoo.cfg  

启动 / 停止

 {zookeeper_home}/bin/zkServer.sh  # 按实际路径调整,查看启动支持哪些参数[root@localhost bin]# ./zkServer.sh
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /root/apache-zookeeper-3.5.8-bin/bin/../conf/zoo.cfg
Usage: ./zkServer.sh [--config <conf-dir>] {start|start-foreground|stop|restart|status|print-cmd}
[root@localhost bin]# 

启动,采用默认的配置文件

[root@localhost bin]# ./zkServer.sh start
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /root/apache-zookeeper-3.5.8-bin/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@localhost bin]# 

停止

[root@localhost bin]# ./zkServer.sh stop
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /root/apache-zookeeper-3.5.8-bin/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED
[root@localhost bin]# 

也可以指定配置文件,不指定的话默认使用 conf/zoo.cfg

[root@localhost bin]# ./zkServer.sh  start ../conf/zoo.cfg 

连接服务器

bin/zkCli.sh ‐server ip:port

例子

[root@localhost bin]# ./zkCli.sh -server 192.168.126.129:2181
/usr/bin/java
Connecting to 192.168.126.129:2181
2020-11-15 23:43:05,472 [myid:] - INFO  [main:Environment@109] - Client environment:zookeeper.version=3.5.8-f439ca583e70862c3068a1f2a7d4d068eec33315, built on 05/04/2020 15:07 GMT
........
........
........
Welcome to ZooKeeper!........
........
........WATCHER::WatchedEvent state:SyncConnected type:None path:null
[zk: 192.168.126.129:2181(CONNECTED) 0] 

配置文件说明

# zookeeper时间配置中的基本单位 (毫秒)
tickTime=2000
# 允许follower初始化连接到leader最大时长,它表示tickTime时间倍数 即:initLimit*tickTime
initLimit=10
# 允许follower与leader数据同步最大时长,它表示tickTime时间倍数
syncLimit=5
#zookeper 数据存储目录
dataDir=/tmp/zookeeper
#对客户端提供的端口号
clientPort=2181
#单个客户端与zookeeper最大并发连接数
maxClientCnxns=60
# 保存的数据快照数量,之外的将会被清除
autopurge.snapRetainCount=3
#自动触发清除任务时间间隔,小时为单位。默认为0,表示不自动清除。
autopurge.purgeInterval=1

ZK 核心概念 (文件系统数据结构+监听通知机制)

可以先把Zookeeper 理解为 是一个用于存储少量数据的基于内存的数据库,主要有如下两个核心的概念:文件系统数据结构+监听通知机制


文件系统数据结构

Zookeeper维护一个类似文件系统的数据结构

每个子目录项都被称作为 znode(目录节点),和文件系统类似,可以自由的增加、删除znode,在一个znode下增加、删除子znode。


6种Node类型

  • PERSISTENT-持久化目录节点

客户端与zookeeper断开连接后,该节点依旧存在,只要不手动删除该节点,永远存在


  • PERSISTENT_SEQUENTIAL-持久化顺序编号目录节点

客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号 ,非常适合用于分布式锁、分布式选举等场景


  • EPHEMERAL-临时目录节点

客户端与zookeeper断开连接后,该节点被删除 适用于心跳,服务发现等场景。


  • EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点

客户端与zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号


  • Container 节点

3.5.3 版本新增,如果Container节点下面没有子节点,则Container节点在未来会被Zookeeper自动清除,定时任务默认60s 检查一次


  • TTL 节点 (Time To Life)

默认禁用,只能通过系统配置 zookeeper.extendedTypesEnabled=true 开启,不稳定



监听通知机制

客户端注册监听它关心的任意节点,或者目录节点及递归子目录节点

  1. 如果注册的是对某个节点的监听,则当这个节点被删除,或者被修改时,对应的客户端将被通知

  2. 如果注册的是对某个目录的监听,则当这个目录有子节点被创建,或者有子节点被删除,对应的客户端将被通知

  3. 如果注册的是对某个目录的递归子节点进行监听,则当这个目录下面的任意子节点有目录结构的变化(有子节点被创建,或被删除)或者根节点有数据变化时,对应的客户端将被通知。

注意:

  1. 所有的通知都是一次性的,及无论是对节点还是对目录进行的监听,一旦触发,对应的监听即被移除。
  2. 递归子节点,监听是对所有子节点的,所以,每个子节点下面的事件同样只会被触发一次。

ZK的应用场景

  1. 分布式配置中心
  2. 分布式注册中心
  3. 分布式锁
  4. 分布式队列
  5. 集群选举
  6. 分布式屏障
  7. 发布/订阅

Apache ZooKeeper - ZK的基本特性与节点应用场景一览相关推荐

  1. Apache ZooKeeper - ZK的内存数据 + 持久化事务日志 + 数据快照 初探

    文章目录 内存数据 源码实现 事务日志 配置项 查看事务日志数据 LogFormatter 写入日志的优化 (预分配) 数据快照 查看数据快照数据 SnapshotFormatter 事务日志 VS ...

  2. Apache ZooKeeper - ZK的ACL权限控制( Access Control List )

    文章目录 概述 权限模式(Scheme) 口令验证 范围验证 Super权限模式 授权对象(ID) 权限信息(Permission) ACL相关命令 跳过ACL检测 实操ACL 生成授权ID 方式一 ...

  3. Apache ZooKeeper - ZK的数据和文件

    文章目录 目标 内存数据 事务日志 数据快照 小结 目标 本篇博文,我们主要聚焦在ZooKeeper 程序运行期间,都会处理哪些数据,以及他们的存储格式和存储位置. ZooKeeper 服务提供了创建 ...

  4. Apache ZooKeeper - 使用原生的API操作ZK_ACL权限

    文章目录 Pre Code 创建world模式的节点 使用授权模式创建节点 使用授权模式获取节点数据 Pre Apache ZooKeeper - ZK的ACL权限控制( Access Control ...

  5. Apache ZooKeeper - 使用Apache Curator操作ZK

    文章目录 原生ZK API VS Curator Curator 概述 Maven依赖 会话创建 静态工厂方式创建会话 使用 fluent 风格创建会话 创建节点 protection 模式 ,规避僵 ...

  6. Apache ZooKeeper - 使用ZK实现分布式锁(非公平锁/公平锁/共享锁 )

    文章目录 什么是分布式锁 分布式死锁 分类 排他锁 共享锁 实现 创建锁 获取锁 释放锁 Demo Jmeter配置 方案零 缺陷版本 方案一 非公平锁方案 缺陷 (羊群效应) 方案二 公平锁方案 方 ...

  7. Apache ZooKeeper - 使用源码启动ZK集群模式

    文章目录 Pre 配置总览 端口说明 Node 1 [zoo1.cfg ] [myid] Node 2 [zoo2.cfg ] [myid] Node 3 [zoo3.cfg ] [myid] 启动集 ...

  8. Apache ZooKeeper - 使用原生的API操作ZK

    文章目录 概述 maven依赖 验证 测试基类 ZK构造函数参数 connectString:ZooKeeper服务器列表 sessionTimeout:会话的超时时间, "毫秒" ...

  9. Apache ZooKeeper - Leader 选举 如何保证分布式数据的一致性

    文章目录 Pre 流程图 Leader 的协调过程 ZK 是如何实现的 广播模式 恢复模式 源码实现 小结 Pre Apache ZooKeeper - 选举Leader源码流程深度解析 在 ZooK ...

最新文章

  1. 老师买50斤小龙虾给学生上实验课,网友:我还能有心思上课?
  2. EIGRP的等价负载均衡
  3. requests基础3
  4. 特斯拉宣布将在欧洲建设第二座超级工厂
  5. 我们正在经历一个应用疲惫时代?
  6. 【TensorFlow】TensorFlow函数精讲之tf.constant()
  7. 已知背景和物体的均值方差,求最佳分割阈值
  8. 当线程在捕捉异常,即使马上杀掉线程,捕捉到异常之后仍然执行异常处理程序...
  9. 计算机专业计算机二级java有用吗_计算机二级java含金量如何 对就业有帮助吗
  10. 常见电脑故障自检指南(南城ZW)
  11. 主板检测卡c5_主板检测卡显示41这是哪坏了
  12. c语言频谱图,c-实时绘制频谱图?
  13. 按季度求和或平均值等例子
  14. [导入]陈冠希蛰伏35天后闪电复出 将与舒淇演爱情片
  15. SVG是什么?SVG有什么用途?
  16. hdwiki中lib文件目录功能
  17. win10照片查看器_解决“Windows照片查看器无法显示此图片,因为计算机上的可用内存可能不足……”...
  18. Google Maps谷歌地图车辆位置描点、位置详情查看
  19. 题解动态规划:蓝桥杯2022国赛B组 题解 A题目
  20. 计算机还原桌面的文件会不会丢失,在用系统还原后会丢失文件吗?谢谢

热门文章

  1. 39. Leetcode 110. 平衡二叉树 (二叉树-二叉树性质)
  2. Leetcode 74. 搜索二维矩阵 (每日一题 20210907)
  3. Leetcode 6.Z 字形变换 (每日一题 20210630)
  4. 语音预处理:服务器平台“部署”
  5. 机器学习笔记:梯度消失
  6. 数据中台应用实战50篇(一)-带你概览BI、数据仓库、数据湖与数据中台之间有什么关联关系?(建议收藏)
  7. Python应用实战-从pandas的角度来对比MySQL,教你如何更快更好的学习sql
  8. 过拟合(原因、解决方案、原理)
  9. python ip代理池_python实现ip代理池功能示例
  10. qt listwidget 关键字颜色_关键字排名优化工具方案