前阵子写过一篇文章,用来记录如何在 docker 中启动 ZooKeeper 的单机或者集群节点,最近收到一个 issue,大意是说项目启动后,测试 ZK 的四字命令无效,这篇文章记录一下解决办法 ZK 四字命令 四字命令其实就是通过类似 echo stat | nc 127.0.0.1 2181 这样的指令,来与 z ..

在 Docker 中运行的 ZooKeeper 无法使用四字命令问题解决

前阵子写过一篇文章,用来记录如何在 docker 中启动 ZooKeeper 的单机或者集群节点,最近收到一个 issue,大意是说项目启动后,测试 ZK 的四字命令无效,这篇文章记录一下解决办法

ZK 四字命令

四字命令其实就是通过类似 echo stat | nc 127.0.0.1 2181 这样的指令,来与 zk 节点交互,获取或者设置数据的指令

zk 四字命令列表:

命令 示范 解释
conf echo conf | nc 127.0.0.1 2181 输出相关服务配置的详细信息。比如端口、zk 数据及日志配置路径、最大连接数,session 超时时间、serverId 等
cons echo cons | nc 127.0.0.1 2181 列出所有连接到这台服务器的客户端连接/会话的详细信息 包括“接受/发送”的包数量、session id 、操作延迟、最后的操作执行等信息
crst echo crst | nc 127.0.0.1 2181 重置当前这台服务器所有连接/会话的统计信息
dump echo dump | nc 127.0.0.1 2181 列出未经处理的会话和临时节点(只在 leader 上有效)
envi echo envi | nc 127.0.0.1 2181 输出关于服务器的环境详细信息(不同于 conf 命令),比如 host.name、java.version、java.home、user.dir=/data/zookeeper-3.4.6/bin 之类信息
ruok echo ruok | nc 127.0.0.1 2181 测试服务是否处于正确运行状态。如果正常返回"imok",否则返回空
srst echo srst | nc 127.0.0.1 2181 重置服务器的统计信息
srvr echo srvr | nc 127.0.0.1 2181 (New in 3.3.0)输出服务器的详细信息。zk 版本、接收/发送包数量、连接数、模式(leader/follower)、节点总数
stat echo stat | nc 127.0.0.1 2181 输出服务器的详细信息:接收/发送包数量、连接数、模式(leader/follower)、节点总数、延迟。 所有客户端的列表
wchs echo wchs | nc 127.0.0.1 2181 列出服务器 watches 的简洁信息:连接总数、watching 节点总数和 watches 总数
wchc echo wchc | nc 127.0.0.1 2181 通过 session 分组,列出 watch 的所有节点,它的输出是一个与 watch 相关的会话的节点列表。如果 watches 数量很大的话,将会产生很大的开销,会影响性能,小心使用
wchp echo wchp | nc 127.0.0.1 2181 通过路径分组,列出所有的 watch 的 session id 信息。它输出一个与 session 相关的路径。如果 watches 数量很大的话,将会产生很大的开销,会影响性能,小心使用
mntr echo mntr | nc 127.0.0.1 2181 列出集群的健康状态。包括“接受/发送”的包数量、操作延迟、当前服务模式(leader/follower)、节点总数、watch 总数、临时节点总数

Docker 容器中的 ZooKeeper 不响应四字命令

随着 ZooKeeper 的官方 Docker 镜像推出,大家也都纷纷按照官方介绍的那样,用 Docker 来运行 ZooKeeper,开始用着很爽,直到有人发现四字命令出问题:“输了命令没有响应”

百度谷歌各家论坛也没有找到解决办法,直到认真翻了一遍 ZooKeeper 的官方文档:zookeeper-doc

才发现,使用 Docker 镜像启动的 ZK 容器,默认是没有配置四字命令白名单列表的,说白了,你只有在这个 docker 容器内部才能使用四字命令,而到了宿主机上,则会被禁止掉,所以就会出现无响应这种问题

那么解决办法也很简单,我们可以利用 volumes 指令,在宿主机上配置好 zk 镜像,再映射到容器中来启动 zk 即可解决

具体操作办法:

volumes:
      - ./config:/conf

如果这篇文章没有帮助您解决问题的话,欢迎来:docker-compose-zookeeper 发布 issue

  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架或包括系统。

    236 引用 • 474 回帖 • 621 关注
  • ZooKeeper

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

    46 引用 • 28 回帖 • 1 关注
回帖
请输入回帖内容...