Zookeeper3.7.0的权限控制以及内存数据持久化

本文详细解读了Zookeeper 3.7.0的ACL权限控制,包括范围验证与口令模式(密文/明文),以及内存数据的事务日志和快照机制。介绍了如何配置权限、关闭权限和超级管理员模式,以及事务日志的预分配和查看方法,以及快照文件的创建和查看。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、Zookeeper 的 ACL 权限控制

1.1、权限分类

Zookeeper 的 ACL 权限控制有两种模式
一种是范围验证,一种是口令验证

1.1.1、范围模式:

所谓的范围验证就是说 ZooKeeper 可以针对一个 IP 或者一段 IP 地址授予某 种权限。比如我们可以让一个 IP 地址为“ip:192.168.0.110”的机器对服务器上的某个数据节点具有写入的权限。或者也可以通过“ip:192.168.0.1/24”给一段 IP 地址的机器赋权。
详情如下:

使用IP段的方式进行权限控制:

先是在创建一个节点时直接加上可控制读写该节点的IP段
然后去访问就会失败

在这里插入图片描述

使用输入控制的ip段的ip远程去连接当前ip的zk
./zkCli.sh -server 192.168.231.131
在连接其它地址的zk时,一定要关闭被连接地址的防火墙
输入读写命令发现可以操作。
如下图所示:

在这里插入图片描述

1.1.2、口令模式

口令模式下分为两种授权方式,一种是密文,一种是明文,下来分别介绍两种授权方式。

1.1.2.1、密文模式

可以理解为用户名密码的方式。在 ZooKeeper 中这种验证方式是 Digest 认证,而 Digest 这种认证方式首先在客户端传送“username:password”这种形 式的权限表示符后,ZooKeeper 服务端会对密码部分使用 SHA-1 和 BASE64 算法进行加密, 以保证安全性。
设置权限模式如下


1、在任意一个类似于XShell工具执行如下命令,得到一串密钥。
echo -n user1:paas1 | openssl dgst -binary -sha1 | openssl base64
user和password可以自己定义

在这里插入图片描述

2、上面我们已经拿到了密文,下面我们可以使用密文对一个节点去加密。
如下图所示:
注意:
在创建节点时设置权限需要将数据先写上,不然zk会以为你写的权限信息为数据。

// 以密文的方式创建一个节点
create /zknode1 zknodedata digest:user1:7GHKMSnAdtZ69rqQSbnhUcWz1GE=:rw
// 登录用户
addauth digest user1:paas1

在这里插入图片描述

1.1.2.2、明文模式

登录一个用户
addauth digest user1:pass1
使用明文的方式对新创建的节点进行授权
create /zknode2 xxxx auth:user1:pass1:rw
看一下权限有没有被赋上去
getAcl /zknode2
看能否获取到节点的数据
get /zknode2

在这里插入图片描述

1.2、关闭权限

只需要在zoo.cfg文件中加入如下配置,即表示跳过权限检查。
skipACL=yes

在这里插入图片描述

上面我们修改了配置之后,然后再去连接服务并使用get的方式取值,则可以将数据取出来,如下图所示:

在这里插入图片描述

1.3、Super 超级管理员模式

如果你忘记了你的认证用户和密码,导致某些节点无法打开,这个时候我们可以设置一个超级管理员,来操作这些节点。
1、获取一个用户名密码的密文,在XShell下执行下面命令。
echo -n super:paas | openssl dgst -binary -sha1 | openssl base64

在这里插入图片描述

2、打开zkServer.sh文件并编辑,并添加下面的东西
‐Dzookeeper.DigestAuthenticationProvider.superDigest=super:MIqZXn9ZHKsA7oPtbk08zHiwv4A=
我的zk版本是3.7.0,粘贴在166行。

这里到时候粘贴配置

在这里插入图片描述

接下来我们测试一下
先创建一个节点并以密文的方式加权限,如下图所示:

// 以密文的方式创建一个节点
create /zknodeSuper dataOne digest:user1:7GHKMSnAdtZ69rqQSbnhUcWz1GE=:rw
// 获取节点
get /zknodeSuper
// 登录超级管理员
addauth digest super:paas
// 获取节点
get /zknodeSuper

在这里插入图片描述

2、ZooKeeper 内存数据和持久化

Zookeeper数据的组织形式为一个类似文件系统的数据结构,而这些数据都是存储在内存中的,所以我们可以认为,Zookeeper是一个基于内存的小型数据库
生成的事务日志文件和快照文件的路径配置如下图所示:
在zoo.cfg文件中

在这里插入图片描述

当我们进到这个文件夹下的 version-2 文件夹下,zk的6.0版本叫这个名字,后续就不知道叫什么名字了。

在这里插入图片描述

发现有这么多文件,以 log 开头的是事务日志文件,而以 snapshot 开头的是快照文件。
下面详解两个文件:

2.1、log. 事务日志

2.1.1、什么是事务日志?

就是说我们每在客户端输入一条写命令,都会保存在这个里面。

2.1.2、事务日志的知识点

1、为什么事务日志的每个文件大小都一样?

我们首先发现每个事务日志文件大小都一样,都是65MB,这是因为在创建事务日志文件的时候就进行文件空间的预分配- 即在创建文件的时候,就向操作系统申请一块大一点的磁盘块。这个预分配的磁盘大小可以通过系统参数 zookeeper.preAllocSize 进行配置。

2、如何查看事务日志?

我们进入到zk安装包的lib目录下,执行如下命令:
java -classpath .:slf4j-api-1.7.25.jar:zookeeper-3.5.9.jar:zookeeper-jute-3.5.9.jar org.apache.zookeeper.server.LogFormatter …/data/version-2/log.1
如下图所示:

在这里插入图片描述

2.2、snapshot. 快照文件

2.2.1、什么是快照文件?

每隔一段时间就会创建一个当前zk所有信息存成一个快照存起来,存起来的这个文件就叫快照文件。

2.2.2、快照文件的知识点

1、如何查看快照日志?

我们进入到zk安装包的lib目录下,执行如下命令:
java -classpath .:slf4j-api-1.7.25.jar:zookeeper-3.5.9.jar:zookeeper-jute-3.5.9.jar org.apache.zookeeper.server.SnapshotFormatter …/data/version-2/snapshot.0
如下图所示:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值