zookeeper笔记,仅是个人记录不是很全面,部分有借鉴到网上的知识

Zookeeper是一个开源的分布式协调服务,解决集群中的一致性问题。它提供全局数据一致性、可靠性、顺序性和原子性等特性,包括命名服务、配置管理、消息队列等功能。Zookeeper集群由Leader、Follower和Observer角色构成,确保数据一致性和高可用性。Znode是Zookeeper的基本数据单元,支持临时和永久节点,具备Watch机制实现事件监听。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#Zookeeper

Zookeeper是一个分布式协调服务的开源框架,主要用来解决分布式集群中应用系统的一致性问题。

#Zookeeper本质

是一个分布式的小文件存储系统,提供基于类似文件系统的目录树方式的数据存储,且可以对树中的节点进行有效管理。

集群管理的功能:统一命名服务、分布式配置管理、分布式消息队列、分布式锁、分布式协调等。

#Zookeeper特性

全局数据一致性(每个服务器都保存一份相同的数据副本,客户端连接到任意节点,数据都是一致的)

可靠性(对目录结构的增删改查等消息,只要有一台服务器接收了,那么其他台,也就是所有服务器也接收到了)

顺序性:

全局有序(全局有序指如果在一台服务器上消息A在消息B前发布,则在所有服务器上消息A都将在消息B前被发布;)

全局偏序(偏序是指如果一个消息B在消息A后被同一个发送者发布,A必将排在B前面,无论全局有序还是偏序,其目的都是为了保证Zookeeper全局数据一致。)

原子性(一次数据更新要么成功,要么失败)

实时性(在一个时间间隔范围内,获得服务器的更新信息或者服务器失效信息)

#Zookeeper集群角色

Leader(领导者):是Zookeeper集群工作的核心,也是事务性(写操作)的唯一调度和处理者。

Follower(跟随者):负责处理客户端的请求,但是不负责处理,是Leader来处理。

Observer(观察者):事务性请求转交Leader处理,不过非事务性请求可以处理。通常用于在不影响集群事务处理能力的前提下,提升集群的非事物处理能力(提高集群读的能力,也降低了集群选主的复杂程度)

Zookeeper是由节点组成的树(采用的是树状层次结构),每个节点被称为Znode。每个Znoed默认能存储1MB的数据,每个Znode都是由3部分组成,分别是stat(状态信息,描述该Znode的版本,权限信息等组成)、date(与该Znode关联的数据)和children(该Znode下的子节点)。

#Znode类型 

临时节点:一旦会话结束,临时节点将会被自动删除,当然也可以手动删除。

永久节点:只有在客户端显示执行删除操作的时候,它们才能被删除。

#Znode的属性 

czxid 节点被创建的Zxid 值

ctime 节点被创建的时间

mzxid 节点最后一次修改的Zxid值

mtime 节点最后一次的修改时间

pZxid 与该节点的子节点最后一次修改的Zxid值

cversion 子节点被修改的版本号

dataVersion 数据版本号

aclVersion ACL 版本号

ephermeralOwner 如果此节点为临时节点,那么该值代表这个节点拥有者的会话ID;否则值为0 

dataLength 节点数据域长度 

numChildren 节点拥有的子节点个数

#Zookeeper的Watch机制 

Watch机制的简介:

Zookeeper提供了分布式数据发布/订阅功能,典型的发布/订阅模型系统定义了一种一对多的订阅关系,能让多个订阅者同时监听某一主题对象。

Watch机制的特点:

一次性触发(当Watch的对象发生改变时,会触发此对象上的Watch所对应的事件,但只有一次。)

事件封装(Zookeeper 使用WatchedEvent 对象来封装服务端事件并传递 包含了 3个基本属性 即通知状态(keeperState)、事件类型(EventType)和节点路径(path) 。)

异步发送(Watch的通知事件是从服务端异步发送到客户端的)

先注册再触发(必须由客户端先去服务端注册监听,这样才会触发事件的监听,并通知给客户端。)

Watch机制的通知状态和事件类型

Zookeeper连接状态和事件类型:

Disconnected 连接失败

NodeCreated 节点被创建 

SyncConnected 连接成功 

NodeDataChanged 节点数据变更 

AuthFailed 认证失败

NodeChildrenChanged 子节点数据变更 

Expired 会话过期

NodeDeleted 节点被删除

当客户端与服务器的某一节点建立连接,要再完成一次version、zxid的同步,此时显示SyncConnected才是连接成功。

#Zookeeper环境配置

zookeeper环境配置(在etc的profile下,vim profile打开即可)

export ZOOKEEPER_HOME=/opt/module/zookeeper-3.4.5/ 

export PATH=$PATH:$ZOOKEEPER_HOME/bin

Zookeeper安装目录复制到另外两台上去;

scp -r /opt/module/zookeeper-3.4.5/hadoop102:/opt/module/

scp -r /opt/module/zookeeper-3.4.5/hadoop103:/opt/module/

将myid分发到另外两台上去:

scp -r /opt/module/zookeeper-3.4.5/zkData/hadoop102:/opt/module/

scp -r /opt/module/zookeeper-3.4.5/zkData/hadoop103:/opt/module/

将profile文件也分发到另外两台服务器:

scp /etc/profile hadoop102:/etc/profile

scp /etc/profile hadoop103:/etc/profile

环境变量生效:

source /etc/profile

启动Zookeeper服务:

zkServer.sh start

启动需要三台虚拟机一起启动起来,并且要在30秒以内启动好,超过30秒则过期!!!

查看是否启动成功:

zkServer.sh status

关闭Zookeeper服务:

zkServer.sh stop

#Shell的相关操作 

ls /(查看Zookeeper中所包含的内容)

ls2 /(查看当前节点数据,且能看到更新次数等数据)

ls -s / (查看当前节点)

help(帮助看到其他命令)

ceate /节点 "子节点"(在当前目录下创造一个节点(Znode)以及它的子节点)

eg:

create -s /testnode test(创建序列化永久节点)

create -e /testnode-temp testtemp(创建临时节点)

get /节点(获取节点包含的信息)

set /节点 "子节点"(对节点关联的子节点进行设置)

delete /节点(将节点删除)

rmr 子节点(将节点递归删除)

eg:

delete path [version] (普通删除的命令)

rmr path [version](递归删除的命令)

zkCli.sh -server localhost:2181 (连接客户端)

set /节点名-子节点 被改成的子节点(修改节点)

eg:

ls -s / 

get -s /testnode-temp 

set /testnode-temp 123 

get -s /testnode-temp

(将temp修改为123)

get 节点名(获取节点名)

eg:

ls path [watch] 

get path [watch] 

ls -s path [watch] 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值