手把手带你撸zookeeper源码(如何启动一个zookeeper服务)

前言

上一篇文章 手把手带你撸zookeeper源码(配置文件) 讲解了一下zookeeper里面的配置文件中都有哪些配置,可以结合自己公司的生产环境去配置相应的信息或者针对性的优化。当然有些配置会在以后讲解相关源码的地方讲到,本篇文章主要是带着大家一步步去使用一下zookeeper,以及简单的一些操作,还有如何去配置zookeeper里面的一些JVM参数

 

启动zookeeper进程

第一步: 修改配置文件

大家把之前下载好的apache-zookeeper-3.6.1-bin.tar.gz文件解压到本地磁盘文件中,然后进入到conf目录下, 把zoo_sample.cfg复制一份,改成zoo.cfg,然后修改zoo.cfg,当然你也可以不修改,直接启动也没有问题的,但是为了接下来方便寻找zookeeper相关日志数据,我添加了修改了两个配置信息如下图

其他的没有变动, 其他参数也都在上一篇文章中都有详细讲解,不懂什么意思的小伙伴可以看看上篇文章

第二步: 启动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源码的入口点,很重要

第三步: 客户端连接到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命令基本一样)

。。。

其他的我就不再一一列出,但是大家需要动手去操作一下,切勿眼高手低

 

如何配置zookeeper启动JVM参数

平时我们可以在自己的本机部署一个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启动时都做了哪些事情

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值