文章目录
Zookeeper概述
1. zookeeper是什么?
- Zookeeper是一个分布式协调服务,致力于为分布式应用提供一个高性能、高可用、且具有严格顺序访问控制能力的分布式协调存储服务。
- 分布式应用程序可以基于Zookeeper做:数据发布与订阅(即:服务发现)、配置管理、分布式协调与通知、集群管理、Leader选举、分布式锁等。
- Zookeeper提供了一个类似于Linux文件系统的树形结构,同时提供了对每个节点的监控与通知机制。 - Zookeeper不适合存储大量文件或大文件;- 因为znode节点存储数据大小限制默认为1MB。- 官方说明ZK是用来存储KB级别的相关数据。
如果zk客户端发送的znode数据大小超过1MB的设置会怎样?
- 假如我们修改了ZK客户端的
maxBuffer
限制,使其可以发送超过1MB的数据,不过服务端的配置默认
还是1MB
。-Djute.maxbuffer=10485760
- 会导致主从同步过程中,所有的follower全部同步失败;- 从而造成状态不一致后的follower挂掉,最终leader认为follower都丢失之后,自己可能也不正常;- 于是,会重新进行选举,但只有自己又无法选举,进而ZK集群挂掉。
2. Zookeeper诞生的目的是什么?
- 高性能- 将全量数据存储在内存中,并直接服务于客户端的所有非事务请求,尤其适用于以读为主的应用场景。
- 高可用- 以集群的方式对外提供服务。- 若集群中一半的机器可以正常工作,则这个集群就能正常对外提供服务。
- 严格顺序执行- 对于来自客户端的每个更新请求,Zookeeper都会分配一个全局唯一的递增编号。- 这个编号反映了所有事务操作的前后顺序。
常用命令
1. 新增节点
# -s 为有序节点, -e 临时节点
create [-s][-e] path data
创建持久化节点并写入数据:
create /hadoop "123456"
创建持久化游戏节点,此时创建的节点名为指定节点名+ 自增序号
create -s /a "aaa"
create -s /b "bbb"
创建临时节点,临时节点会在会话过期后被删除
create -e /aa "aaaa"
创建临时有序节点,临时节点会在会话过期后被删除
create -s -e /aa "aaaa"
2. 更新节点
每次修改成功后,版本号会自动+1,初始为0
set /hadoop "hadoop"
也可以基于版本号进行更改,类似于乐观锁机制,当传入的数据版本号和当前节点的数据版本号不符合时,zookeepr会拒绝本次修改。
set /hadoop "123321"1
3. 删除节点
# version 为版本号
delete path [version]
如果path有子节点,那么delete命令无法删除,需要使用rmr path进行递归删除
rmr /a
4. 查看节点
get path
cZxid = 0xe0 # 数据节点创建时的事务ID
ctime = Thu Aug 1321:39:50 CST 2020# 数据接地那创建时的时间
mZxid = 0xe0 # 数据节点最后一次更新时的事务ID
mtime = Thu Aug 1321:39:50 CST 2020# 数据节点最后一次更新时的时间
pZxid = 0xe1 # 数据节点的子节点最后一次被修改时的事务ID
cversion =1# 子节点的更改次数
dataVersion =0# 节点数据的更改次数
aclVersion =0# 节点的ACL的更改次数
ephemeralOwner = 0x0 # 如果节点是临时节点,则表示创建该节点的会话的SessionID,如果节点是持久节点,则该属性值为0.
dataLength =3# 数据内容的长度
numChildren =1# 数据节点当前的子节点个数
4. 2 查看节点状态
# 查看节点状态,不包含节点数据stat path
4.3 查看节点列表
# 列出path的所有子节点ls path
# 列出path的所有子节点和path的信息
ls2 path
5. 监听器
5.1 监听器get path [watch]
使用get path[warch] 注册的监听器能够在节点内容发生改变的时候,向客户端发出通知。注:Zookeeper的触发器是一次性的(One-time trigger),即触发一次就会立即失效。
# 在第一个窗口
get /hadoop watch# 在另外一个窗口set /hadoop 345# 第一个窗口出现监视信息
WatchedEvent state:SyncConnected type:NodeDataChanged path:/hadoop
5.2 监听器stat path [watch]
使用stat path [watch] 注册的监听器能够在节点状态发生改变的时候,向客户端发送通知。
# 在第一个窗口stat /hadoop watch# 在另外一个窗口set /hadoop 12212# 在第一个窗口出现监视信息
WatchedEvent state:SyncConnected type:NodeDataChanged path:/hadoop
5.3 监听器ls/ls2 path [watch]
使用ls/ls2 path [watch] 注册的监听器能够监听该节点下的所有子节点的增加和删除操作。
# 在第一个窗口ls /hadoop watch# 在另外一个窗口
create /hadoop/saint "aaa"# 在第一个窗口出现监视信息
WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/hadoop
版权归原作者 秃秃爱健身 所有, 如有侵权,请联系我们删除。