zookeeper详解

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
注册配置 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实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
7月前
|
存储 分布式计算 算法
ZooKeeper
【6月更文挑战第21天】ZooKeeper
175 39
|
7月前
|
消息中间件 分布式计算 负载均衡
ZooKeeper在哪些场景中被使用?
【6月更文挑战第21天】ZooKeeper在哪些场景中被使用?
145 38
|
8月前
|
存储 消息中间件 负载均衡
Zookeeper 简单介绍
Zookeeper 简单介绍
|
7月前
|
存储 Java 数据库
对于Zookeeper的一些理解
该文档介绍了如何使用ZooKeeper实现统一配置、命名服务和分布式锁以及集群管理。首先,为了解决多个系统重复配置的问题,提出了抽取公共配置到`common.yml`并存储在ZooKeeper中的方法,系统通过监听ZNode变化实时更新配置。接着,详细说明了配置管理的实现步骤,包括在服务器端将配置同步到ZooKeeper,以及客户端监听配置变更。此外,还解释了命名服务如何根据名称获取服务地址,并以域名访问为例进行了说明。最后,讨论了ZooKeeper实现的两种分布式锁策略,并阐述了其在集群管理中的应用,如检测节点状态变化和选举Master节点。
|
存储 算法 Linux
Zookeeper
 ZooKeeper 是一种分布式协调服务,用于管理大型主机。在分布式环境中协调和管理服务是一个复杂的过程。ZooKeeper 通过其简单的架构和 API 解决了这个问题。ZooKeeper 允许开发人员专注于核心应用程序逻辑,而不必担心应用程序的分布式特性。
156 0
|
JSON Linux Shell
zookeeper
zookeeper
170 0
|
存储 域名解析 负载均衡
Zookeeper—应用
前言 在前面的几篇文章中,我们讲解了ZooKeeper的组成,基本功能,集群选举,ZAB协议和数据一致性。所有的设计都因应用场景而生,不结合场景的方案都是耍流氓。在今天的文章中,我们将要去了解ZK的应用,加深对ZK的认识。
133 0
|
存储 设计模式 分布式计算
Zookeeper系列 (一)
Zookeeper 是 Apache 的一个分布式服务框架,是 Apache Hadoop 的一个子项目。
127 0
Zookeeper系列 (一)
|
消息中间件 存储 分布式计算
初识ZooKeeper
特点、应用场景
592 0
|
存储 Dubbo 网络协议
关于ZooKeeper,你好像还有不知道的事情
Dubbo 通过注册中心在分布式环境中实现服务的注册与发现,而注册中心通常采用 ZooKeeper,研究注册中心相关源码绕不开 ZooKeeper,所以学习了 ZooKeeper 的基本概念以及相关 API 操作。
关于ZooKeeper,你好像还有不知道的事情

热门文章

最新文章