解决Zookeeper没法启动的问题

      今天在启动zookeeper集群的单个zookeeper节点时老是报以下错误html

[root@zookeeper1 zookeeper-3.4.5]# bin/zkServer.sh status
JMX enabled by default
Using config: /usr/local/zookeeper-3.4.5/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.
[root@zookeeper1 zookeeper-3.4.5]#

      因而尝试解决它,首先要想到的是是否安装了JDK,由于zookeeper的运行须要JVM环境,可使用java和java -version命令来验证,以下所示,能够看到JDK已经正确安装。

[root@zookeeper1 zookeeper-3.4.5]# java
用法: java [-options] class [args...]
           (执行类)
   或  java [-options] -jar jarfile [args...]
           (执行 jar 文件)
其中选项包括:
    -d32	  使用 32 位数据模型 (若是可用)
    -d64	  使用 64 位数据模型 (若是可用)
    -server	  选择 "server" VM
                  默认 VM 是 server.

    -cp <目录和 zip/jar 文件的类搜索路径>
    -classpath <目录和 zip/jar 文件的类搜索路径>
                  用 : 分隔的目录, JAR 档案
                  和 ZIP 档案列表, 用于搜索类文件。
    -D<名称>=<值>
                  设置系统属性
    -verbose:[class|gc|jni]
                  启用详细输出
    -version      输出产品版本并退出
    -version:<值>
                  警告: 此功能已过期, 将在
                  将来发行版中删除。
                  须要指定的版本才能运行
    -showversion  输出产品版本并继续
    -jre-restrict-search | -no-jre-restrict-search
                  警告: 此功能已过期, 将在
                  将来发行版中删除。
                  在版本搜索中包括/排除用户专用 JRE
    -? -help      输出此帮助消息
    -X            输出非标准选项的帮助
    -ea[:<packagename>...|:<classname>]
    -enableassertions[:<packagename>...|:<classname>]
                  按指定的粒度启用断言
    -da[:<packagename>...|:<classname>]
    -disableassertions[:<packagename>...|:<classname>]
                  禁用具备指定粒度的断言
    -esa | -enablesystemassertions
                  启用系统断言
    -dsa | -disablesystemassertions
                  禁用系统断言
    -agentlib:<libname>[=<选项>]
                  加载本机代理库 <libname>, 例如 -agentlib:hprof
                  另请参阅 -agentlib:jdwp=help 和 -agentlib:hprof=help
    -agentpath:<pathname>[=<选项>]
                  按完整路径名加载本机代理库
    -javaagent:<jarpath>[=<选项>]
                  加载 Java 编程语言代理, 请参阅 java.lang.instrument
    -splash:<imagepath>
                  使用指定的图像显示启动屏幕
有关详细信息, 请参阅 http://www.oracle.com/technetwork/java/javase/documentation/index.html。
[root@zookeeper1 zookeeper-3.4.5]# java -version
java version "1.8.0_112"
Java(TM) SE Runtime Environment (build 1.8.0_112-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.112-b15, mixed mode)
[root@zookeeper1 zookeeper-3.4.5]#

       那么下面咱们便查看zookeeper的端口2181是否已经被占用了(固然,有可能你们已经改用其它端口了,这个根据你们的实际来操做),以下所示,能够看到,2181端口还真的被占用了!这就是问题的根源,咱们能够看到占用2181端口的进程号是1403,那么咱们便杀掉这个进程。

[root@zookeeper1 zookeeper-3.4.5]# netstat -apn | grep 2181
tcp        0      0 :::2181                     :::*                        LISTEN      1403/java           
[root@zookeeper1 zookeeper-3.4.5]#

       杀掉进程的命令是kill -9 1403,杀掉进程以后再检查一下是否还有进程占用2181端口,发现已经没有进程占用了。

[root@zookeeper1 zookeeper-3.4.5]# kill -9 1403
[root@zookeeper1 zookeeper-3.4.5]# netstat -apn | grep 2181
[root@zookeeper1 zookeeper-3.4.5]#
       下面咱们再来启动zookeeper,就应该能正常启动了。

        若是上面的操做还解决不了问题,那么咱们接着到zookeeper-3.4.5的data目录下,能够看到以下所示的文件,其中version-2文件夹和zookeeper_server.pid两个文件都是须要删除掉的。

[root@zookeeper1 data]# ll
总用量 12
-rw-r--r--. 1 root root    2 4月  26 05:31 myid
drwxr-xr-x. 2 root root 4096 4月  26 07:03 version-2
-rw-r--r--. 1 root root    4 4月  28 04:25 zookeeper_server.pid
[root@zookeeper1 data]#
       删除操做以下,删完只剩下myid文件了。

[root@zookeeper1 data]# rm -rf version-2/ zookeeper_server.pid 
[root@zookeeper1 data]# ls
myid
[root@zookeeper1 data]#

       咱们再次尝试启动zookeeper,以下所示,发现zookeeper终于正常启动了。java

[root@zookeeper1 zookeeper-3.4.5]# bin/zkServer.sh start
JMX enabled by default
Using config: /usr/local/zookeeper-3.4.5/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@zookeeper1 zookeeper-3.4.5]# bin/zkServer.sh status
JMX enabled by default
Using config: /usr/local/zookeeper-3.4.5/bin/../conf/zoo.cfg
Mode: follower
[root@zookeeper1 zookeeper-3.4.5]#

       还有一种状况就是,启动zookeeper集群的某个节点时死活启动不了,把上面所说的三种状况都检查过了仍是启动不了,这时咱们能够先启动zookeeper的另外几个节点,等把其它节点启动好了,这个启动不了节点就自动启动好了!!!编程

       基本上这几种状况即可以解决zookeeper没法启动的问题了(若是仍是不行,就要看看是否是安装zookeeper的步骤有错误了)oracle