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

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

ZK四字命令

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

zk四字命令列表:

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

具体操作办法:

  • 编写配置文件zoo.cfg,并保存在./config目录下,内容如下所示:

    	dataDir=/data
    	dataLogDir=/datalog
    	tickTime=2000
    	initLimit=5
    	syncLimit=2
    	autopurge.snapRetainCount=3
    	autopurge.purgeInterval=0
    	maxClientCnxns=60
    	standaloneEnabled=true
    	admin.enableServer=true
    	server.1=localhost:2888:3888;2181
    	4lw.commands.whitelist=*
    
  • 编写docker-compose,配置volumes,添加以下内容:

volumes:
      - ./config:/conf
  • 启动测试,解决

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

转载于:https://my.oschina.net/u/4179512/blog/3083631

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值