Zookeeper学习笔记(一)

zookeeper是什么?

引用百科的一段话:

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务。

zookeeper有什么用?

分布式应用程序可以基于ZooKeeper实现数据发布与订阅、负载均衡、命名服务、分布式协调与通知、集群管理、Leader选举、分布式锁、分布式队列等功能。

命名服务

Zookeeper的命名服务功能主要是根据指定名字来获取资源或服务的地址,提供者等信息,依靠它的znode的特点和watcher机制,将其作为动态注册和获取服务信息的注册中心,统一管理服务名称和它的对应的服务器列表信息。

配置管理

Zookeeper也可以作为配置中心来使用,通过修改节点配置来更新配置信息,动态修改系统中的配置。

集群管理

Zookeeper可以集群管理,它可以通过watcher机制来实现对机器的加入和离开进行监听,从而采取相应的措施。

等等。。。

使用Zookeeper

使用环境
环境下载地址
Java8https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
Zookeeper3.6.2https://downloads.apache.org/zookeeper/zookeeper-3.6.2/
配置

解压下载的Zookeeper压缩包,在其目录下创建***data目录和log目录***,随后在/conf目录下复制zoo_sample.cfg并粘贴到当前目录下,命名zoo.cfg。
修改下列配置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bDlEqIqN-1600779173739)(/images/pasted-89.png)]

随后运行/bin目录下的zkServer命令,如果配置没有出现问题,启动就是正常滴。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jkZnN7tG-1600779173741)(/images/pasted-90.png)]

zookeeper概念

zookeeper=znode+watcher

文件系统

引用一波网上的结构图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i1EY92ce-1600779173744)(/images/pasted-91.png)]

znode名字描述
PRESISTENT持久化目录节点Client与Zookeeper断开连接后,该类型节点依然存在
PERSISTENT_SEQUENTIAL持久化顺序编号目录节点Client与Zookeeper断开连接后,该类型节点依然存在,并给节点名称进行顺序编号
EPHEMERAL临时目录节点Client与Zookeeper断开连接后,该节点被删除
EPHEMERAL_SEQUENTIAL临时顺序编号目录节点Client与Zookeeper断开连接后,该节点被删除,并给节点名称进行顺序编号
监听通知机制

客户端注册监听它关心的目录节点,当目录节点发生变化(数据改变、被删除、子目录节点增加删除)时,zookeeper会通知客户端。

Zookeeper命令

ls (列出该节点下的子节点)
参数作用
-s列出节点的状态信息
-R递归的显示子节点
-w呃现在没搞懂
[zk: localhost:2181(CONNECTED) 49] ls -s /zookeeper/node1
[]
cZxid = 0xd
ctime = Wed Sep 16 19:54:04 CST 2020
mZxid = 0xd
mtime = Wed Sep 16 19:54:04 CST 2020
pZxid = 0xd
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0
字段意义
cZxid节点创建时的zxid
ctime节点创建时间
mZxid节点最近更新一次时的zxid
mtime节点最近更新一次时间
cversion子节点数据更新次数
dataVersion本节点数据更新次数
aclVersion节点ACL(授权信息)的更新次数
ephemeralOwner如果该节点为临时节点,ephemeralOwner值表示与该节点绑定的session id. 如果该节点不是临时节点,ephemeralOwner值为0
dataLength节点数据长度,本例中为“qwe”的长度
numChildren子节点个数

小知识:网上有些博客说使用***ls2命令***查看节点的状态信息,但新版本是没有滴。我们使用***ls -s 命令***就可以拉。

create (创建一个节点)
参数作用
-s创建顺序节点
-e临时节点
-w呃现在没搞懂
创建一个PERSISTENT_NODE
[zk: localhost:2181(CONNECTED) 15] create /persistent_node persistent_node_data
Created /persistent_node
[zk: localhost:2181(CONNECTED) 16] ls /persistent_node
[]
[zk: localhost:2181(CONNECTED) 17] get /persistent_node
persistent_node_data

创建一个PERSISTENT_SEQUENTIAL
[zk: localhost:2181(CONNECTED) 18] create -s /persistent_node persistent_node_data
Created /persistent_node0000000005
[zk: localhost:2181(CONNECTED) 19] get /persistent_node0000000005
persistent_node_data
创建一个EPHEMERAL_NODE
[zk: localhost:2181(CONNECTED) 20] create -e /ephemeral_node ephemeral_node_data
Created /ephemeral_node
[zk: localhost:2181(CONNECTED) 21] get /ephemeral_node
ephemeral_node_data

创建一个EPHEMERAL_SEQUENTIAL
[zk: localhost:2181(CONNECTED) 22] create -s -e /ephemeral_node ephemeral_node_data
Created /ephemeral_node0000000007
[zk: localhost:2181(CONNECTED) 23] get /ephemeral_node0000000007
ephemeral_node_data
delete(删除一个节点)
[zk: localhost:2181(CONNECTED) 27] delete /ephemeral_node0000000007
[zk: localhost:2181(CONNECTED) 28] ls /ephemeral_node0000000007
Node does not exist: /ephemeral_node0000000007
get (获得目录下的值)
参数作用
-s列出节点的状态信息
-w设置观察数据变化的watcher
[zk: localhost:2181(CONNECTED) 10] get /2020-09-22
I am Tom
getAllChildrenNumber (获得目录下的子目录个数)
[zk: localhost:2181(CONNECTED) 16] getAllChildrenNumber /2020-09-22
1
getEphemerals(获得目录下的临时节点)
[zk: localhost:2181(CONNECTED) 20] getEphemerals /2020-09-22
[/2020-09-22/child]

总结

***我们需要一个用起来像单机但是又比单机更可靠的东西。 ***

下一步就去学java调用Zookeeper的Api拉~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值