zookeeper详解

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生网关 MSE Higress,422元/月
简介: 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实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
6月前
|
存储 分布式计算 算法
ZooKeeper
【6月更文挑战第21天】ZooKeeper
173 39
|
6月前
|
消息中间件 分布式计算 负载均衡
ZooKeeper在哪些场景中被使用?
【6月更文挑战第21天】ZooKeeper在哪些场景中被使用?
133 38
|
6月前
|
算法 Java Apache
你真的了解Zookeeper吗?
你真的了解Zookeeper吗?
49 0
|
运维 分布式计算 算法
Zookeeper解读
Zookeeper解读
72 0
|
存储 监控 Unix
一文了解Zookeeper
一文了解Zookeeper
267 0
一文了解Zookeeper
|
消息中间件 存储 分布式计算
初识ZooKeeper
特点、应用场景
591 0
|
存储 Dubbo 网络协议
关于ZooKeeper,你好像还有不知道的事情
Dubbo 通过注册中心在分布式环境中实现服务的注册与发现,而注册中心通常采用 ZooKeeper,研究注册中心相关源码绕不开 ZooKeeper,所以学习了 ZooKeeper 的基本概念以及相关 API 操作。
关于ZooKeeper,你好像还有不知道的事情
|
存储 消息中间件 算法
ZooKeeper 到底解决了什么问题?
目标 ZooKeeper 很流行,有个基本的疑问: ZooKeeper 是用来做什么的? 之前没有ZK,为什么会诞生 ZK?
344 0
ZooKeeper 到底解决了什么问题?
|
存储 分布式计算 监控
Zookeeper介绍
一、Zookeeper概述
483 0
Zookeeper介绍
zookeeper理解与应用
它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。
109 0
下一篇
DataWorks