zookeeper 的 leader 选举存在两个阶段,一个是服务器启动时 leader 选举,另一个是运行过程中 leader 服务器宕机。在分析选举原理前,先介绍几个重要的参数。
服务器 ID(myid):编号越大在选举算法中权重越大
事务 ID(zxid):值越大说明数据越新,权重越大
逻辑时钟(epoch-logicalclock):同一轮投票过程中的逻辑时钟值是相同的,每投完一次值会增加
选举状……继续阅读 »
2年前 (2022-07-26) 92浏览 0评论
0个赞
Linux 安装
zookeeper 下载地址为: https://zookeeper.apache.org/releases.html。
选择一稳定版本,本教程使用的 release 版本为3.4.14,下载并安装。
打开网址 https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz,看到如下……继续阅读 »
2年前 (2022-07-22) 219浏览 0评论
0个赞
zookeeper 命令用于在 zookeeper 服务上执行操作。
首先执行命令,打开新的 session 会话,进入终端。
$ sh zkCli.sh
下面开始讲解基本常用命令使用,其中 acl 权限内容在后面章节详细阐述。
ls 命令
ls 命令用于查看某个路径下目录列表。
格式:
ls path
path:代表路径。
以下实例查看 /runoob 节点:
$ ls /runoob
ls2 命令
l……继续阅读 »
2年前 (2022-07-21) 103浏览 0评论
0个赞
分布式锁是控制分布式系统之间同步访问共享资源的一种方式。
下面介绍 zookeeper 如何实现分布式锁,讲解排他锁和共享锁两类分布式锁。
排他锁
排他锁(Exclusive Locks),又被称为写锁或独占锁,如果事务T1对数据对象O1加上排他锁,那么整个加锁期间,只允许事务T1对O1进行读取和更新操作,其他任何事务都不能进行读或写。
定义锁:
/exclusive_lock/lock
实现方式:
利用 zook……继续阅读 »
2年前 (2022-06-28) 89浏览 0评论
0个赞
数据模型
在 zookeeper 中,可以说 zookeeper 中的所有存储的数据是由 znode 组成的,节点也称为 znode,并以 key/value 形式存储数据。
整体结构类似于 linux 文件系统的模式以树形结构存储。其中根路径以 / 开头。
进入 zookeeper 安装的 bin 目录,通过sh zkCli.sh打开命令行终端,执行 “ls /” 命令显示:
……继续阅读 »
2年前 (2022-06-21) 122浏览 0评论
0个赞
本章节将示范三台 zookeeper 服务端集群搭建步骤。
所需准备工作,创建三台虚拟机环境并安装好 java 开发工具包 JDK,可以使用 VM 或者 vagrant+virtualbox 搭建 centos/ubuntu 环境,本案例基于宿主机 windows10 系统同时使用 vagrant+virtualbox 搭建的 centos7 环境,如果直接使用云服务器或者物理机同理。
步骤一:准备三台 zooke……继续阅读 »
2年前 (2022-06-20) 157浏览 0评论
0个赞
zookeeper 的 watcher 机制,可以分为四个过程:
客户端注册 watcher。
服务端处理 watcher。
服务端触发 watcher 事件。
客户端回调 watcher。
其中客户端注册 watcher 有三种方式,调用客户端 API 可以分别通过 getData、exists、getChildren 实现,利用前面章节创建的 maven 工程,新建 WatcherDemo 类,以 e……继续阅读 »
2年前 (2022-06-19) 117浏览 0评论
0个赞
本章节介绍一下 zookeeper 的节点特性和简单使用场景,正是由于这些节点特性的存在使 zookeeper 开发出不同的场景应用。
1、同一级节点 key 名称是唯一的
实例:
$ ls /
$ create /runoob 2
已存在 /runoob 节点,再次创建会提示已经存在。
2、创建节点时,必须要带上全路径
实例:
$ ls /runoob
$ create /runoob/child 0
$ cr……继续阅读 »
3年前 (2022-06-03) 347浏览 0评论
0个赞
本教程使用的 IDE 为 IntelliJ IDEA,创建一个 maven 工程,命名为 zookeeper-demo,并且引入如下依赖,可以自行在maven中央仓库选择合适的版本,介绍原生 API 和 Curator 两种方式。
IntelliJ IDEA 相关介绍:
Intellij IDEA 使用教程
Maven IntelliJ
<dependency>
<groupId>……继续阅读 »
3年前 (2022-05-26) 214浏览 0评论
0个赞
在 Zookeeper 中,主要依赖 ZAB 协议来实现分布式数据一致性。
ZAB 协议分为两部分:
消息广播
崩溃恢复
消息广播
Zookeeper 使用单一的主进程 Leader 来接收和处理客户端所有事务请求,并采用 ZAB 协议的原子广播协议,将事务请求以 Proposal 提议广播到所有 Follower 节点,当集群中有过半的Follower 服务器进行正确的 ACK 反馈,那么Leader就会……继续阅读 »
3年前 (2022-05-15) 109浏览 0评论
0个赞
zookeeper 的 ACL(Access Control List,访问控制表)权限在生产环境是特别重要的,所以本章节特别介绍一下。
ACL 权限可以针对节点设置相关读写等权限,保障数据安全性。
permissions 可以指定不同的权限范围及角色。
ACL 命令行
getAcl 命令:获取某个节点的 acl 权限信息。
setAcl 命令:设置某个节点的 acl 权限信息。
addauth 命令:输入认……继续阅读 »
3年前 (2022-05-15) 91浏览 0评论
0个赞
zookeeper 支持某些特定的四字命令与其交互,用户获取 zookeeper 服务的当前状态及相关信息,用户在客户端可以通过 telenet 或者 nc(netcat) 向 zookeeper 提交相应的命令。
安装 nc 命令:
$ yum install nc # centos
或
$ sudo apt install netcat # ubuntu
四字命令格式:
……继续阅读 »
3年前 (2022-05-15) 139浏览 0评论
0个赞
客户端与服务端之间的连接是基于 TCP 长连接,client 端连接 server 端默认的 2181 端口,也就是 session 会话。
从第一次连接建立开始,客户端开始会话的生命周期,客户端向服务端的ping包请求,每个会话都可以设置一个超时时间。
Session 的创建
sessionID: 会话ID,用来唯一标识一个会话,每次客户端创建会话的时候,zookeeper 都会为其分配一个全局唯一的 sessi……继续阅读 »
3年前 (2022-05-15) 110浏览 0评论
0个赞