12. ZooKeeper配额和认证

ZooKeeper具有与其数据模型相关的可配置配额(quota)。 可以设置znode上的配额限制和存储的数据量。如果ZooKeeper命名空间中的一个子树超出与其关联的配额,ZooKeeper会在日志中打印警告消息。但是,如果超出指定的配额,操作并不会取消。

ZooKeeper配额存储在/zookeeper/quota路径的ZooKeeper树中。 可以从ZooKeeper客户端API和ZooKeeper Java shell中设置,列出和删除配额。 以下截图显示了使用对应setlistdel命令的结果:
12. ZooKeeper配额和认证

在上面的示例中,创建了一个/quota_example的新建znode,并设置了两个子znode的配额。 然后,列出了分配的配额,以及如何删除分配的配额。

当我们在/quota_example下面创建第三个子节点时,ZooKeeper日志文件中会显示以下警告消息,通知我们超出了配额:
12. ZooKeeper配额和认证

ZooKeeper还提供可配置的选项来控制服务的身份验证和授权。
zookeeper.DigestAuthenticationProvider.superDigest参数使ZooKeeper ensemble管理员能够以超级用户身份访问znode层次结构。 ZooKeeper服务不对通过身份验证的用户进行任何ACL检查。 此功能在默认情况下是禁用的。

要为超级用户生成Digest认证,可以使用参数super:<password>调用org.apache.zookeeper.server.auth.DigestAuthenticationProvider的Java系统属性。 一旦生成了Digest认证,需要在启动ZooKeeper服务器时提供super:<data>作为系统属性。

ZooKeeper客户端需要传递super:<password> Digest和认证数据方案来与ZooKeeper服务器进行认证。 在使用ZooKeeper shell时,可以使用addauth命令。