本文作者:HelloGitHub-老荀
Hi,这里是HelloGitHub推出的HelloZooKeeper系列,免费开源、有趣、入门级的ZooKeeper教程,面向有编程基础的新手。
今天我要介绍些ZK的隐藏功能,废话不多,让我们开始吧~
一、JMX
JMX(JavaManagementExtensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活地开发无缝集成的系统、网络和服务管理应用。
是不是听不懂?听不懂就对了,如果你从来没有开发过JMX或者应用过的话,我这里就简单介绍下:JMX就是Java提供的一个标准,这个标准可以将一些有需要的Java对象运行时的状态暴露出去(这些对象可以叫MBean),一般是用于监控或者运行时修改一些配置信息。
我们既然是讲解ZK,那么我现在就有问题了,现在我手里有一个简单ZK集群正在运行,我想知道哪个节点是Leader,怎么办?
首先ZK本身在启动的时候就会主动将一些对象注册成为MBean,而我们直接使用Java自带的工具jconsole就能查看,下面我演示下,我这里有一个简单的ZK集群:
可以看到有三个QuorumPeerMain的进程,就代表了这个集群的三个节点。
下面我们使用jconsole打开该工具(安装了jdk,这个工具就自动拥有了)
$jconsole
随便选择一个ZK的进程,选择连接即可。
JMX不光光可以看对象的属性也可以执行一些方法,比如:
图中显示操作的地方都是可以在右侧找到一个按钮进行调用的(还可以传参),关于ZK中JMX更多的细节,我这里暂时不披露了,之后有机会单独讲解,反正大家只需要知道JMX就是将一些普通Java对象暴露出去,可以通过工具查看属性或者调用该对象的方法的一个标准。
二、四字命令与AdminServer
刚刚那个JMX查看还是比较麻烦的,因为现在我们测试访问的是我本地的进程,如果是远程的JVM进程,用jconsole访问起来就更麻烦了,有没有简单一点的方法。肯定是有!ZK本身支持了一些四字命令(4lw)用于和服务端进行交互。
我这里做一个简单的演示,我本地的集群的客户端端口分别是:、、,我通过telnet命令随便连接上一个节点:
$telnetlocalhostTrying::1...
Connectedtolocalhost.
Escapecharacteris^].
就会进入交互模式,然后输入srvr按下回车,就能得到以下输出
srvr命令就是用来查看服务节点的状态的,从输出中的Mode字段就能看到,监听端口的这个节点就是Leader,我们再换一个节点看看,Mode就是Follower。
这里要提一下默认的四字命令不是全部打开的,如果想要启用所有的四字命令需要在环境变量中指定zookeeper.4lw.