上一篇文章 手把手带你撸zookeeper源码(配置文件) 讲解了一下zookeeper里面的配置文件中都有哪些配置,可以结合自己公司的生产环境去配置相应的信息或者针对性的优化。当然有些配置会在以后讲解相关源码的地方讲到,本篇文章主要是带着大家一步步去使用一下zookeeper,以及简单的一些操作,还有如何去配置zookeeper里面的一些JVM参数
大家把之前下载好的apache-zookeeper-3.6.1-bin.tar.gz文件解压到本地磁盘文件中,然后进入到conf目录下, 把zoo_sample.cfg复制一份,改成zoo.cfg,然后修改zoo.cfg,当然你也可以不修改,直接启动也没有问题的,但是为了接下来方便寻找zookeeper相关日志数据,我添加了修改了两个配置信息如下图
其他的没有变动, 其他参数也都在上一篇文章中都有详细讲解,不懂什么意思的小伙伴可以看看上篇文章
修改完上面的配置文件之后,进入apache-zookeeper的根目录下的bin目录,里面有一系列的脚本文件,我们主要看三个脚本
zkCli.sh/zkCli.cmd: zk客户端,可以通过它来连接到zk服务端, *.sh为linux系统使用的脚本文件, *.cmd为windows使用脚本文件
zkEnv.sh/zkEnv.cmd: zk启动时的环境信息
zkServer.sh/zkServer.cmd: 启动一个zk服务进程
接下来我们使用./zkServer.sh start来启动一个服务,将会看到如下信息即为启动成功
我们可以通过使用jps命令来看一下当前启动的java进程
我把重要的信息给标注出来了,接下来这个QuorumPeerMain也将是我们去剖析zk源码的入口点,很重要
接下来就是使用zkCli.sh来连接客户端,你可以直接在bin目录下面执行./zkCli.sh命令,默认直接连接本地的zk服务,当你要连接远程服务时,需要加一些参数,./zkCli.sh -server localhost:2181, 指定你要连接的远程服务器和端口号即可
当你输入./zkCli.sh敲击回车之后,可以看到一堆的信息,有客户端zookeeper版本、客户端java环境信息、操作系统信息等
大家可以先输入一个help命令,来看看zk都有哪些操作
命令很多,但我们一般比较常用的也就那么几个
比如:
delete /xxx 删除某个路径, 此路径只能是数据节点路径,如果有子节点,则有异常
deleteall /xxx 删除/xxx下面所有的信息,包括子节点
get /xxx 查看/xxx路径的节点数据,只能看数据,如果没有data则返回null
history 看你曾经输入过得命令(和操作系统的history命令基本一样)
。。。
其他的我就不再一一列出,但是大家需要动手去操作一下,切勿眼高手低
平时我们可以在自己的本机部署一个zk单机版来玩玩,但是到了线上,必须对线上环境有一个预估,然后选择比较合适的服务器来部署,像zk这种中间件系统,最好使用高配物理机来去部署,比如8C 16G或者16C 32G, 再加上固态硬盘,8C 16G每秒并发几千是没有问题的, 16C 32G的机器,每秒并发上万没有什么问题,甚至几万都有可能
在部署到不同的机器同时,我们也需要对zookeeper的参数做一些优化,比如JVM参数,因为zookeeper全是基于内存来进行操作的,我们配置完JVM之后,还需要对zookeeper机器的GC进行监控,比如使用jstat来看jvm的运行情况, 新生代的对象增长速度,ygc的频率,老年代增长速度, fgc的频率等等,如果发现线上JVM频繁发生gc问题、oom问题,要对其进行合理的优化,进行jvm的调优,合理化jvm参数
说个例子:比如你的服务器是8C 16G的机器,可以给zk的堆内存分配个10G, 栈内存可以分配每个线程1M, 元数据空间分配512M即可,千万必要把堆内存分配各13G、15G的样子,这样子留给操作系统的内存会少的很可怜,再加上你有几百个线程、有512M的元数据空间, 基本上内存一直都是满的,一旦操作堆外内存,将无法申请足够的内存分配导致失败
回到zk的配置中来,我们可以看一下zkServer.sh启动服务的脚本文件
如下图:
这块配置就是在启动, ZOOMAIN参数,默认zk只启动了JMX本地连接,你可以开启远程JMX连接,然后使用JAVA自带的工具JConsole观察JVM信息
-Dcom.sun.management.jmxremote.port=2181 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false
接着往下看,到start命令的时候最终会执行什么?
其实简单来说还是执行的java -jar启动一个jar包,只是使用了nohup后台启动然后设置 2&1 < /dev/null 标准输出等信息
JVM的参数就是在这里配置的,你可以添加-Xms、-Xmx、-Xmn等参数的信息,然后去压测,使用jstat观察GC频率,再去适当的对JVM参数进行优化
总结
本篇文章主要讲了一下如何启动一个zk服务进程,如何通过客户端连接到zk服务端,如何进行一些简单的操作和JVM参数配置
下一篇文章我们将进入到zk的源码中去,看看如何通过源码来启动zk服务启动,以及启动时zk如何加载配置文件,在zk启动时都做了哪些事情