zookeeper 特性和节点说明
一 zookeeper 概要、背景及作用
zookeeper 产生背景
项目从单体到分布式转变之后,将会产生多个节点之间协同的问题。如:
1.RPC调用时服务的注册与发现 、上线、下线
2.如何保证并发请求时接口的幂等性
3.每天的定时任务由哪个节点执行
等等。。。
这些问题可以同一归纳为多节点协调问题,如果靠节点自身进行协调这是非常不可靠的,性能也相对比较差。必须由一个独立的服务做协调工作,它必须可靠,而且保证性能。至此我们的zookeeper应运而生
zookeeper 概要
zookeeper 适用于分布式应用程序的协调服务,它公开了一组API,分布式应用可以基于这些API用于同步,节点状态、配置、服务注册等信息。是由java编写,支持java与C两种语言的客户端
znode 节点
zookeeper 中基本单元叫节点,节点之下包含子节点,最后以树级方式呈现,每个节点拥有唯一的路径path。客户端基于path上传的节点数据,zookeeper收到后会实时通知对该路径上监听的客户端。
二 安装与配置
部署与常规配置
下载地址:zookeeper
zookeeper需要JVM环境 默认端口为2181
安装启动几个注意点
1.conf下zoo_sample.cfg 名字更换为zoo.cfg
2.需要再JVM环境中启动
3.启动命令 ./bin/zkServer.sh start
4.客户端进入命令
配置文件参数说明
# 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 | 添加认证用户 |
上一篇: 黑莓一个季度居然亏了这么多