ZooKeeper 配额指南
部署和管理指南
配额
ZooKeeper 既有命名空间配额,也有字节配额。您可以使用 ZooKeeperMain 类设置配额。如果用户超出分配给他们的配额,ZooKeeper 会打印WARN消息。这些消息会打印在 ZooKeeper 的日志中。
注意:namespace
配额的含义是计数配额,它限制路径下的子项数量(包括路径本身)。
$ bin/zkCli.sh -server host:port**
上述命令为您提供了使用配额的命令行选项。
设置配额
-
您可以使用
setquota
在 ZooKeeper 节点上设置配额。它有一个使用-n
(用于命名空间/计数)和-b
(用于字节/数据长度)设置配额的选项。 -
ZooKeeper 配额存储在 ZooKeeper 本身的/zookeeper/quota中。为了禁止其他人更改配额,用户可以设置/zookeeper/quota的 ACL,以便只有管理员才能对其进行读写。
-
如果配额不存在于指定的路径中,则创建配额,否则更新配额。
-
用户设置的配额范围是指定路径下的所有节点(包括路径本身)。
-
为了简化对当前目录/层次结构中配额的计算,只能为一个完整树路径(从根节点到叶节点)设置一个配额。在为其父节点或子节点已设置配额的路径中设置配额时,
setquota
会拒绝并告知指定的父节点或子节点路径,用户可以根据具体情况调整配额分配(删除/上移/下移配额)。 -
与 Chroot 结合使用时,配额将在不同的应用程序之间具有更好的隔离效果。例如
# Chroot is: 192.168.0.1:2181,192.168.0.2:2181,192.168.0.3:2181/apps/app1 setquota -n 100000 /apps/app1
-
用户无法在/zookeeper/quota下的路径上设置配额
-
配额支持软配额和硬配额。当超过软配额时,软配额只会记录警告信息,但硬配额还会抛出
QuotaExceededException
。当在同一路径上设置软配额和硬配额时,硬配额具有优先级。
列出配额
您可以使用 listquota 在 ZooKeeper 节点上列出配额。
删除配额
您可以使用 delquota 删除 ZooKeeper 节点上的配额。