zk执行echo ruok | nc 127.0.0.1 2181报错了:
ruok is not executed because it is not in the whitelist.
解决方法:
出现 ruok is not executed because it is not in the whitelist
错误,说明 ZooKeeper 的 ruok
命令被限制执行,这是因为 ZooKeeper 的 四字命令 受到了白名单的控制。
从 ZooKeeper 3.5.x 版本开始,ZooKeeper 引入了一个白名单机制,用于限制可以执行的四字命令。默认情况下,某些命令可能被禁用。
要解决这个问题,你可以通过以下步骤启用四字命令的白名单。
1. 修改 ZooKeeper 配置文件
找到 ZooKeeper 的配置文件(通常是 zoo.cfg
),并添加或修改以下配置项来允许 ruok
命令执行:
4lw.commands.whitelist=*
这将允许所有四字命令执行。如果你只想启用特定的命令,比如 ruok
,可以将配置项设为:
4lw.commands.whitelist=ruok,srvr,stat
2. 重启 ZooKeeper
修改配置文件后,重启 ZooKeeper 服务以使配置生效:
# 停止 ZooKeeper
zkServer.sh stop
# 启动 ZooKeeper
zkServer.sh start
3. 再次执行 ruok
命令
在重启后,重新执行以下命令来检查 ZooKeeper 节点的健康状态:
echo ruok | nc 127.0.0.1 2181
如果配置正确,应该会返回 imok
,表示节点正常运行。
4. 检查其他命令是否可用
根据你的需求,你还可以检查其他四字命令是否正常工作,例如:
echo srvr | nc 127.0.0.1 2181
echo stat | nc 127.0.0.1 2181
如果你有其他特定命令需要启用,只需将它们加入白名单。
通过这种方式,可以灵活管理哪些命令可以被执行,同时确保集群的安全性