zookeeper详解

本文涉及的产品
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: zookeeper详解

先看一张hadoop的HA工作机制示意图

1ecd1b2606ed46e9956a89f231c9802c.png

可以看到zookeeper(基础组件)在HA的集群中,帮助管理日志系统,解决单点故障问题。

zookeeper的基本功能和应用场景

1ecd1b2606ed46e9956a89f231c9802c.png

zookeeper的功能:

1.可以为客户端管理少量数据(k,v)

2.可以为客户端监听指定数据节点的状态并在数据节点发生变化时通知客户端。

应用场景:

服务器上下线的动态感知

zookeeper的整体运行机制

1ecd1b2606ed46e9956a89f231c9802c.png

zookeeper的数据存储机制

数据存储形式

zookeeper中对用户的数据采用kv形式存储,只是zk有点特别:


key:是以路径的形式表示的,意味着各key之间有父子关系,比如


/ 是顶层key


用户建的key只能在 / 下作为子节点,比如建一个key: /aa  这个key可以带value数据


也可以建key: /aa/xx


zookeeper中,对每一个数据key,称作一个znode

综上所述,zk中的数据存储形式如下:

1ecd1b2606ed46e9956a89f231c9802c.png

znode类型

zookeeper中的znode有多种类型:


PERSISTENT  持久的:创建者就算跟集群断开联系,该类节点也会持久存在与zk集群中


EPHEMERAL  短暂的:创建者一旦跟集群断开联系,zk就会将这个节点删除


SEQUENTIAL  带序号的:这类节点,zk会自动拼接上一个序号,而且序号是递增的


组合类型:

PERSISTENT  :持久不带序号


EPHEMERAL  :短暂不带序号


PERSISTENT  且 SEQUENTIAL   :持久且带序号


EPHEMERAL  且 SEQUENTIAL  :短暂且带序号

zookeeper的集群部署

1.上传安装包到集群服务器


2.解压


3.修改配置文件


进入zookeeper的安装目录的conf目录


cp zoo_sample.cfg zoo.cfg


vi zoo.cfg

# The number of milliseconds of each tick
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/root/zkdata #改目录
clientPort=2181
#autopurge.purgeInterval=1
#加zookeeper集群节点
server.1=hdp20-01:2888:3888
server.2=hdp20-02:2888:3888
server.3=hdp20-03:2888:3888

对3台节点,都创建目录 mkdir /root/zkdata


对3台节点,在工作目录中生成myid文件,但内容要分别为各自的id: 1,2,3


hdp20-01上:  echo 1 > /root/zkdata/myid


hdp20-02上:  echo 2 > /root/zkdata/myid


hdp20-03上:  echo 3 > /root/zkdata/myid

从hdp20-01上scp安装目录到其他两个节点

scp -r zookeeper-3.4.6/ hdp20-02$PWD
scp -r zookeeper-3.4.6/ hdp20-03:$PWD

 启动zookeeper集群

zookeeper没有提供自动批量启动脚本,需要手动一台一台地起zookeeper进程

在每一台节点上,运行命令:

bin/zkServer.sh start

自动启动批量脚本:vi zkmanage.sh

#!/bin/bash
for host in  hdp1 hdp2 hdp3 
do
echo "${host}:$1ing..."
ssh $host "source  /etc/profile; /root/apps/zookeeper-3.4.10/bin/zkServer.sh $1"
done
sleep 2
for host in hdp1 hdp2 hdp3
do
echo "${host}:status"
ssh $host "source /etc/profile;/root/apps/zookeeper-3.4.10/bin/zkServer.sh status"
done

启动:./zkmanage.sh start

启动后,用jps应该能看到一个进程:QuorumPeerMain,但是,光有进程不代表zk已经正常服务,需要用命令检查状态:

bin/zkServer.sh status

能看到角色模式:为leader或follower,即正常了:

1ecd1b2606ed46e9956a89f231c9802c.png

2020062310470442.png

zookeeper的命令行客户端操作

连接客户端

#指定某个节点连接
bin/zkCli.sh -server hdp1:2128
#或localhost连接
bin/zkCli.sh

数据管理功能:


创建节点: create /aaa 'ppppp'


查看节点下的子节点:   ls /aaa


获取节点的value: get /aaa


修改节点的value: set /aaa 'mmmmm'


删除节点:rmr /aaa


数据监听功能:


ls /aaa watch  


查看/aaa的子节点的同时,注册了一个监听“节点的子节点变化事件”的监听器


get /aaa watch


获取/aaa的value的同时,注册了一个监听“节点value变化事件”的监听器

1ecd1b2606ed46e9956a89f231c9802c.png

再连接一个客户端,修改value,监听的节点就会有变化

1ecd1b2606ed46e9956a89f231c9802c.png

注意: 注册的监听器在正常收到一次所监听的事件后,就失效

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
5月前
|
消息中间件 分布式计算 负载均衡
ZooKeeper在哪些场景中被使用?
【6月更文挑战第21天】ZooKeeper在哪些场景中被使用?
115 38
|
6月前
|
存储 分布式计算 资源调度
ZooKeeper详解
ZooKeeper是大数据组件中的协调器,确保高可用性和一致性。它用于监控主备节点切换(如Hadoop YARN的ResourceManager,HBase的RegionServer,Spark的Master)并实现数据同步。设计基于文件系统和通知机制,通过Znodes的状态变化(创建、删除、更新、子节点变化)进行协调。ZooKeeper使用观察者模式,当Znode变化时,通知客户端。其数据结构为树形,提供CLI工具如`zkCli.sh`进行交互。ZooKeeper有三个默认端口:2181(客户端连接),2888(服务器间同步),3888(选举)。选举采用半数机制,确保集群稳定性。
103 1
ZooKeeper详解
|
5月前
|
算法 Java Apache
你真的了解Zookeeper吗?
你真的了解Zookeeper吗?
41 0
|
12月前
|
运维 分布式计算 算法
Zookeeper解读
Zookeeper解读
67 0
|
存储 算法 Linux
Zookeeper
 ZooKeeper 是一种分布式协调服务,用于管理大型主机。在分布式环境中协调和管理服务是一个复杂的过程。ZooKeeper 通过其简单的架构和 API 解决了这个问题。ZooKeeper 允许开发人员专注于核心应用程序逻辑,而不必担心应用程序的分布式特性。
146 0
|
JSON Linux Shell
zookeeper
zookeeper
159 0
|
存储 域名解析 负载均衡
Zookeeper—应用
前言 在前面的几篇文章中,我们讲解了ZooKeeper的组成,基本功能,集群选举,ZAB协议和数据一致性。所有的设计都因应用场景而生,不结合场景的方案都是耍流氓。在今天的文章中,我们将要去了解ZK的应用,加深对ZK的认识。
119 0
|
SQL 存储 关系型数据库
|
消息中间件 存储 分布式计算
初识ZooKeeper
特点、应用场景
586 0
|
存储 消息中间件 算法
ZooKeeper 到底解决了什么问题?
目标 ZooKeeper 很流行,有个基本的疑问: ZooKeeper 是用来做什么的? 之前没有ZK,为什么会诞生 ZK?
335 0
ZooKeeper 到底解决了什么问题?