Zookeeper启动显示成功,zkServer.sh status报错

zookeeper-3.4.9 按照指导配置完成后,再zookeeper/bin下执行  

./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /home/hadoop/bigdata/zk/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

再执行 ./zkServer.sh status

hadoop@master:~/bigdata/zk/bin$ ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/hadoop/bigdata/zk/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.

再执行 jps, 根本就没有zookeeper相关进程在运行。也就是说,start 那步显示的STARTED 并不代表真正启动成功。

hadoop@master:~/bigdata/zk/bin$ jps
4128 NameNode
5745 ResourceManager
22914 Jps
19299 SqoopJettyServer
1670 RunJar
22074 Master
5535 SecondaryNameNode

查看 同目录下的日志文件zookeeper.out, 显示 zoo.cfg 配置文件解析错误。

我在zoo.cfg 中只加了下面5行,格式上来说都是对的呀,怎么会有格式错误?

dataDir=/home/hadoop/bigdata/zk/zkdata
dataLogDir=/home/hadoop/bigdata/zk/zkdatalog

server.1=master:2888:3888
server.2=ndh-slave01:2888:3888
server.3=slave02:2888:3888

仔细看了这五行内容,且配置过程中修改过的地方,dataDir/dataLogDir 两个只是目录,肯定是创建过的,不太会出问题。那唯一可能的就是server.X=xxx 那几行。

先注掉试试,再次运行 ./zkServer.sh start, ./zkServer.sh status , jps,  zookeeper 进程在运行了,但status 显示是 “Mode: standalone" , 也就是单机模式,虽然模式不对,但至少可以确认是这三行的问题。

回想先前安装过程中,在每台机器的/home/hadoop/bigdata目录下设置过myid 文件,并且要求 myid中的值要与server.X 中设置的X 相一致,难道是这个地方不匹配?

排除格式,字符集等因素后,最后猜测可能是文件路径不对。

仔细比对,注意到 配置时myid文件的/home/hadoop/bigdata目录,zoo.cfg 中dataDir=/home/hadoop/bigdata/zk/zkdata, 没在zookeeper 的有效路径中zookeeper访问不到?

果断把master上的myid 拷贝到/home/hadoop/bigdata/zk/zkdata下,再次执行  ./zkServer.sh start,jps 显示有zookeeper 进程在运行了 ,./zkServer.sh status 显示 "Mode: follower" , 继续在其他两台机器上把myid 拷贝到dataDir路径下,启动zkServer, 终于都正常了。

补充下:要在安装zookeeper的机器上都执行zkServer.sh start,不是只在master上执行,脚本应该优化成只在master上执行一次即可全部启动的方式。否则还是会出现如题的错误。

hadoop@master:~/bigdata/zk/bin$ jps
4128 NameNode
23504 QuorumPeerMain
5745 ResourceManager
19299 SqoopJettyServer
1670 RunJar
22074 Master
23566 Jps
5535 SecondaryNameNode

$ /bin/bash zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/hadoop/bigdata/zk/bin/../conf/zoo.cfg
Mode: leader

hadoop@master:~/bigdata/zk/bin$ ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/hadoop/bigdata/zk/bin/../conf/zoo.cfg
Mode: follower

附:zoo.cfg 中各配置项的含义和作用:1.tickTime:CS通信心跳数
Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。tickTime以毫秒为单位。
    tickTime=2000  
2.initLimit:LF初始通信时限
集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数(tickTime的数量)。
    initLimit=10 
3.syncLimit:LF同步通信时限
集群中的follower服务器与leader服务器之间请求和应答之间能容忍的最多心跳数(tickTime的数量)。
    syncLimit=5 
4.dataDir:数据文件目录
Zookeeper保存数据的目录,默认情况下,Zookeeper将写数据的日志文件也保存在这个目录里。
5.dataLogDir:日志文件目录
Zookeeper保存日志文件的目录。
6.clientPort:客户端连接端口
客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。
    clientPort=2181 
7.服务器名称与地址:集群信息(服务器编号,服务器地址,LF通信端口,选举端口)
这个配置项的书写格式比较特殊,规则如下:
    server.N=YYY:A:B  
其中N表示服务器编号,YYY表示服务器的IP地址,A为LF通信端口,表示该服务器与集群中的leader交换的信息的端口。B为选举端口,表示选举新leader时服务器间相互通信的端口(当leader挂掉时,其余服务器会相互通信,选择出新的leader)。一般来说,集群中每个服务器的A端口都是一样,每个服务器的B端口也是一样。但是当所采用的为伪集群时,IP地址都一样,只能是A端口和B端口不一样。
下面是一个非伪集群的例子:
    server.0=233.34.9.144:2008:6008  
    server.1=233.34.9.145:2008:6008  
    server.2=233.34.9.146:2008:6008  
下面是一个伪集群的例子:
    server.0=127.0.0.1:2008:6008  
    server.1=127.0.0.1:2007:6007  
    server.2=127.0.0.1:2006:6006  


--------------------- 
作者:Heavbird 
来源:CSDN 
原文:https://blog.csdn.net/wqhlmark64/article/details/73250662 
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/zhousenshan/article/details/86558832