摘要:Zookeeper 是什么 ? 它适合那些常见的应用场景 ? 它是如何提供管理服务的 ? 它的核心原理又是什么 ? 它又为何得到大数据应用 Kafka / Hbase / Hadoop 的青睐 ? 它能使你更好的理解集群模式下的架构思维
1)Zookeeper (文中后续简称 ZK)是一个开源的分布式服务协调系统,最初由雅虎公司开发,后成为 Apache 基金会顶级开源项目。
2)设计 ZK 目的是集中管理纷繁复杂的分布式服务,将其组成一个高效可靠的集群对外提供稳定的服务。
3)ZK 系统服务中间件为我们提供了一系列 API 接口供业务方调用。
ZK 主要是用来解决分布式系统架构中经常遇到的一些数据管理问题:
/
"开头。ZK 节点类型(4 种)如下图所示:
1)持久节点 —— 客户端断开时,节点保留
2)临时节点 —— 客户端断开时,节点删除,不存在子节点
3)持久顺序节点 —— 客户端断开时,节点保留
4)临时顺序节点 —— 客户端断开时,节点删除
备注:顺序节点一般存在持久节点下面,创建的顺序节点是由 ZK 服务器生成的有序递增节点。
注册监听 ——> 事件触发图解如下:
客户端注册在 ZK 上,并监听 ZK 上某个 Znode 节点的变化,具体如下所示:
Znode
是否存在(创建、删除)Znode
的数据变化Znode
的子节点的变化ZK 的安装可以参考:《分布式系统「全链路日志追踪」实战之 RestTemplate & Feign》的 3.1.2 小节内容。
环境准备:Mac OS + Zookeeper
1)打开 iTerm 2 客户端,输入 zkServer start
,启动 ZK 如下:
3)Zookeeper 的常用基本命令
增删改查,演示如下:
ls path
或 ls2 path
,其中 ls
列出当前目录下的所有子目录,ls2
会多一些节点相关的状态信息,如下:create path data
,创建 zk 持久节点 Znode
,并存放数据 data,如下:
create -e path data
,创建 zk 临时节点 Znode
,并存放数据 data,如下:
create -s -e path data
,创建 zk 临时顺序节点,其中 path
以 /
结尾,如下:
get path
,获取节点 path
上存储的数据,如下:
set path data
,设置节点 path
的数据,如下:
delete path
,删除节点 path
,如下:
见上图,删除 /test
节点没有成功,因为该节点下存在临时顺序节点,故无法删除。需将该节点下的临时顺序节点删除完,才能删除该节点,具体操作如下:
stat path
,列出节点path
当前状态,即 ls2 = ls + stat
Znode
节点的状态含义解释如下:注册监听相关的常用命令如下:
stat path watch
:注册监听 Znode
,包括新增和删除,注:Znode
可以是一个不存在的节点。开启 2 个 iTerm 窗口,分别连接 ZK,如下所示:
get path watch
:注册监听 Znode
保存的数据变化。ls path watch
:注册监听 Znode
下的子节点变化,包括新增和删除4)常见 zk 基础操作命令如下图所示(help 命令):
详见下图所示:
1)Zab 协议简介
Zab 协议是 ZK 为分布式协调服务专门设计的一种支持容错、崩溃、恢复的原子广播协议,是 ZK 保证数据一致性的核心算法。
2)Zab 协议详解
详见下图所示:
1)选举规则
2)选举指标
Serverid
服务器编号 ID(即 myid 存储的值),该值越大权重越大;Zxid
全局事务 ID,该值越大权重越大,优先级大于 Serverid
;Epoch
逻辑时钟,也称为投票周期,该值越大权重越大,优先级大于 Zxid
。3)图解 zk Leader 选举过程
下面通过 3 个 Zookeeper 服务器 Zk Server-1、Zk Server-2、Zk Server-3 为例,启动顺序依次是Zk Server-1 ——> Zk Server-2 ——> Zk Server-3 ,其中选举参数 (Epoch,Serverid,Zxid)
,选举过程如下所示:
在 ZK 集群运行过程中,如果 Follower 节点(Zk Server-3)宕机了,zk 无需重新选举,但是如果 Leader 节点(Zk Server-2)宕机了,那么 zk 服务器需要重新选举,过程如下图所示:
1)ZK 集群是一个主从复制结构,具有高可用、强一致性的协同系统。
2)ZK 集群有三种角色,如下:
3)集群搭建的一般步骤如下:
mv zoo_sample.cfg zoo.cfg
;vim zoo.cfg
;
ZK 配置文件内容相关解析:./zkServer.sh start
;zkServer.sh status
;./zkCli.sh
可参考之前写的 GitChat 文章《Zookeeper 与 Solr 集群搭建详细图文教程》,访问网址:
https://gitbook.cn/gitchat/activity/5b000ffb0b9abe23960f1ac1
后续内容请关注:《分布式系统架构你必会的 Zookeeper 之基础模块-常用命令-核心原理-集群搭建-实战演练(下)》,敬请期待!
【备注:分布式同步锁实现、服务注册与发现实现、分布式系统配置中心案例等。】
加油