欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

zookeeper 特性和节点说明

程序员文章站 2022-04-04 11:09:23
...

一 zookeeper 概要、背景及作用

zookeeper 产生背景
项目从单体到分布式转变之后,将会产生多个节点之间协同的问题。如:
1.RPC调用时服务的注册与发现 、上线、下线
2.如何保证并发请求时接口的幂等性
3.每天的定时任务由哪个节点执行
等等。。。
这些问题可以同一归纳为多节点协调问题,如果靠节点自身进行协调这是非常不可靠的,性能也相对比较差。必须由一个独立的服务做协调工作,它必须可靠,而且保证性能。至此我们的zookeeper应运而生

zookeeper 概要
zookeeper 适用于分布式应用程序的协调服务,它公开了一组API,分布式应用可以基于这些API用于同步,节点状态、配置、服务注册等信息。是由java编写,支持java与C两种语言的客户端
zookeeper 特性和节点说明
znode 节点
zookeeper 中基本单元叫节点,节点之下包含子节点,最后以树级方式呈现,每个节点拥有唯一的路径path。客户端基于path上传的节点数据,zookeeper收到后会实时通知对该路径上监听的客户端。
zookeeper 特性和节点说明

二 安装与配置

部署与常规配置
下载地址:zookeeper
zookeeper需要JVM环境 默认端口为2181
安装启动几个注意点
1.conf下zoo_sample.cfg 名字更换为zoo.cfg
zookeeper 特性和节点说明
2.需要再JVM环境中启动
3.启动命令 ./bin/zkServer.sh start
4.客户端进入命令
zookeeper 特性和节点说明
配置文件参数说明

# The number of milliseconds of each tick
#zookeeper时间配置的基本单位(毫秒)
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
#允许follower初始化连接到leader最大时长,它标识ticktime的倍数 即:initLimit*tickLimit
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
#允许follower与leader数据同步的最大时长 
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
#数据存储目录
dataDir=../data
# the port at which the clients will connect
#端口号
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#单个客户端与zookeeper最大并发连接数
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#保存的数据快照数量 之外的将会被清除
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#自动触发清除任务时间间隔,小时为单位,默认为0,表示不自动清除
#autopurge.purgeInterval=1

常用命令

列出子节点   ls /
创建节点 (永久)  create /sanguo  "sanguo"
查看节点  get /sanguo
创建子节点  create /sanguo/shuguo   "刘备"
删除节点  delete  /sanguo/shuguo     (不能递归删除)
删除所有节点  deleteall  /sanguo
查看历史命令   history    配和redo使用
		[zk: localhost:2181(CONNECTED) 20] history
		10 - clear
		11 - ls /
		12 - ls
		13 - get /shilei
		14 - set /shilei shilei is good man
		15 - set /shilei "shilei is good man"
		16 - get /shilei
		17 - get /zookeeper
		18 - create /shilei/sanguo "刘备"
		19 - get /shilei/sanguo
		20 - history
		[zk: localhost:2181(CONNECTED) 21] redo 11
		[zookeeper, shilei]


三 节点介绍

zookeeper 中节点叫znode存储结构上和文件系统类似,以树形结构进行存储,不同之处在于znode没有目录的概念,不能执行类似与cd之类的命令,znode结构包含如下:
path:唯一路径
childNode : 子节点
stat:状态属性
type:节点类型

1.节点类型

类型 描述
PERSISTENT 持久节点
PERSISTENT_SEQUENTIAL 持久序号节点 create -s
EPHEMERAL 临时节点(不可再拥有子节点) create -e
EPHEMERAL_SEQUENTIAL 临时序号节点(不可再拥有子节点)create -e -s

2.节点属性

[zk: localhost:2181(CONNECTED) 5] get /ll0000000001
ll     //节点的值
cZxid = 0x16    //创建节点时的事务id
ctime = Sun Nov 17 04:14:13 CST 2019   //  接待你的创建时间
mZxid = 0x16    //最后数据变更时 事务id
mtime = Sun Nov 17 04:14:13 CST 2019  //最后数据变更时间
pZxid = 0x16   // 子节点 最后一次增加或者删除 的事务id
cversion = 0   //  子节点变更次数
dataVersion = 0    //版本号  即当前节点数据更新几次
aclVersion = 0   //  权限变化
ephemeralOwner = 0x1000067edb80007    //代表是一个临时节点  值为创建该节点的session值
dataLength = 2   //数据长度
numChildren = 0  //有几个子节点

添加监听

命令 描述
ls /path watch 监听子节点的变化(增、删)
get /path watch 监听节点数据的变化
stat /path watch 监听节点属性的变化

acl权限设置
ACL全程为Access Control list (访问控制列表) ,用于控制资源的访问权限,zookeeper使用acl来控制对其znode的访问,基于scheme:Id:permission的方式进行权限控制。scheme表示授权模式,id模式对应的值,permission即具体的增删改权限位

scheme 权限位

方案 描述
world 开放模式 ,world表示全世界都可以访问(这是默认设置)
ip ip模式,限定客户端ip访问
auth 用户名密码认证模式,只有在会话中添加了认证才能访问
digest 与auth类似,区别时zuth用的是明文,而digest用sha-1+base64加密后的密码

permission权限位

权限位 权限 描述
c CREATE 可以创建一个子节点
d DELETE 可以删除一个子节点
r READ 可以读取子节点数据以及显示子节点列表
w WRITE 可以设置节点数据
a ADMIN 可以设置节点访问控制列表权限

acl相关命令

命令 使用方式 描述
getAcl getAcl /path 读取ACL权限
setAcl setAcl /shilei world:anyone:rwa 设置ACL权限
addauth addauth 添加认证用户