Zookeeper 的认识

本贴最后更新于 924 天前,其中的信息可能已经时过境迁

ZooKeeper 是什么 🎉 ?

ZooKeeper 是一个分布式的,开放源码的 分布式应用程序协调服务 ,主要为了解决分布式架构下数据一致性问题,典型的应用场景有分布式配置中心、分布式注册中心、分布式锁、分布式队列、集群选举、分布式屏障、发布/订阅等场景。

ZooKeeper 有哪些数据结构?

1、持久化目录节点:

客户端与 zookeeper 断开连接后,该节点依旧存在,只要不手动删除该节点,他将永远存在。

2、持久化顺序编号目录节点:

客户端与 zookeeper 断开连接后,该节点依旧存在,只是 zookeeper 给该节点名称进行顺序编号。

3、临时目录节点:

客户端与 zookeeper 断开连接后,该节点被删除。

4、临时顺序编号目录节点:

客户端与 zookeeper 断开连接后,该节点被删除,只是 zookeeper 给该节点名称进行顺序编号。

Zookeeper 的核心功能

监听机制

监听到七种类型变化:

1、None:连接建立事件

2、NodeCreated:节点创建
3、NodeDeleted:节点删除
4、NodeDataChanged:节点数据变化
5、NodeChildrenChanged:子节点列表变化
6、DataWatchRemoved:节点监听被移除
7、ChildWatchRemoved:子节点监听被移除

我们在开发中使用 Synchronized 就可以保证线程安全了,为什么还需要使用 zookeeper 来实现分布式锁呢?

如果我们是单机情况下也就是只有一个进程的情况下使用 Synchronized 是可以保证线程安全的。但是分布式情况下是多个不同的进程,而不是一个进程里面不同的线程,所以 Synchronized 是无法保证多个进程安全的。

zookeeper 节点有哪些重要信息呢,怎么进行查看?

1、cZxid:创建 znode 的事务 id(Zxid 的值)。

2、mZxid:最后修改 znode 的事务 id。

3、pZxid:最后添加或删除子节点的事务 id(子节点列表发生变化才会发生改变)。

4、ctime:znode 创建时间。

5、mtime:znode 最近修改时间。

6、dataVersion:znode 的当前数据版本。

7、cversion:znode 的子节点结果集版本(一个节点的子节点增加、删除都会影响这个版本)

8、aclVersion:表示对此 znode 的 acl 版本。

9、ephemeralOwner:znode 是临时 znode 时,表示 znode 所有者的 sessionid,如果 znode 不是临时节点,则该字段设置为零。

10、dataLength:znode 数据字段的长度。

zookeeper 创建节点,和监听节点有哪些命令?

1、创建持久节点:create /节点名称
2、创建持久顺序节点:create -s /节点名称
3、创建临时节点:create -e /节点名称
4、创建临时顺序节点:create -e -s /节点名称
5、监听节点:get -w /节点名称

Zookeeper 有哪些权限控制 ACL(Access Control List)

权限模式

就是 zookeeper 服务器进行权限验证的方式,比如手机解锁是用指纹还是用密码呢,如果用密码,知道密码的都可以解锁你的手机,如果用指纹,只有你自己的手指头可以解锁。所以权限模式大体分为两种类型:

1、范围验证:

范围就是 zookeeper 可以针对一个 ip 或者一段 ip 地址授予权限,相当于指纹解锁,我给我一个手指头,或者所有的脚指头都授予权限。

2、口令验证:

可以理解为用户名密码的方式,这种就相当于密码解锁了,知道了用户名密码后所有的人都相当于授予了权限。

授权对象:

授权对象就是把权限授予给谁,如果是范围验证方式,那么授权对象就是 ip 地址,如果是口令验证,授权对象就是用户名。

授权信息:

授权信息就是指我们具体的权力是什么,比如我们解锁手机后可以打游戏还是可以听歌,还是可以用手机砸核桃呢。

zookeeper 中定义好的权限有 5 种:

1、数据节点(c:create)创建权限,授予权限的对象可以在数据节点下创建子节点。
2、数据节点(w:wirte)更新权限,授予权限的对象可以更新该数据节点。
3、数据节点(r:read)读取权限,授予权限的对象可以读取该节点的内容以及子节点的列表信息。
4、数据节点(d:delete)删除权限,授予权限的对象可以删除该数据节点的子节点。
5、数据节点(a:admin)管理者权限,授予权限的对象可以对该数据节点体进行 ACL 权限设置。

怎么查看和设置某个节点的 ACL 权限信息呢

可以通过 getAcl 来获取某个节点的权限信息,通过 setAcl 来设置某个节点的权限信息。

Zookeeper 数据持久化

持久化也是两种方式,一种是记录事务日志,一种是快照方式。

记录事务日志:

磁盘会进行 IO 操作,事务日志的不断增多会触发磁盘为文件开辟新的磁盘块,所以为了提升磁盘的效率,可以在创建文件的时候就向操作系统申请一块大一点的磁盘块,通过参数 zookeeper.preAllocSize 配置。

事务日志的存放地址通过 zoo.cfg 配置文件中的 dataDir 来指定。

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3190 引用 • 8214 回帖 • 1 关注
  • 分布式
    80 引用 • 149 回帖 • 4 关注
  • ZooKeeper

    ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 HBase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

    59 引用 • 29 回帖 • 14 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...