| 
                         第七、zkServer.sh里的nc命令有问题。 
- 可能是机器上没有安装nc命令,还有种说法是在zkServer.sh里找到这句: 
 - STAT=`echo stat | nc localhost $(grep clientPort “$ZOOCFG” | sed -e ‘s/.*=//’) 2> /dev/null| grep Mode` 
 - 在nc与localhost之间加上 -q 1 (是数字1而不是字母l) 
 -  
 - zookeeper版本是3.4.6,zkServer.sh里根本没有这一句(获取状态的语句没有用nc命令) 
 -  
 - # -q is necessary on some versions of linux where nc returns too quickly, and no stat result is output 
 -    clientPortAddress=`grep "^[[:space:]]*clientPortAddress[^[:alpha:]]" "$ZOOCFG" | sed -e 's/.*=//'` 
 -    if ! [ $clientPortAddress ] 
 -    then 
 -        clientPortAddress="localhost" 
 -    fi 
 -    clientPort=`grep "^[[:space:]]*clientPort[^[:alpha:]]" "$ZOOCFG" | sed -e 's/.*=//'` 
 -    STAT=`"$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}"  
 -             -cp "$CLASSPATH" $JVMFLAGS org.apache.zookeeper.client.FourLetterWordMain  
 -             $clientPortAddress $clientPort srvr 2> /dev/null     
 -          | grep Mode` 
 -    if [ "x$STAT" = "x" ] 
 -    then 
 -        echo "Error contacting service. It is probably not running." 
 -        exit 1 
 -    else 
 -        echo $STAT 
 -        exit 0 
 -    fi 
 -    ;; 
 
  
以下是自己排查的方式 
目前现象老集群数据同步正常,也能进行leader选举(从日志获取),但是无法查看节点状态,同异常信息;进行集群扩容,数据不能同步。 
解决方法: 
1. 尝试进行foreground 模式启动,选择一台非主节点进行重启,可以前台查看启动日志。 
- zkserver.sh start-foreground  
 - 节点启动正常,无异常输出。 
 
  
2. 查看shell脚本:分析zkServer.sh。 
"Error contacting service. It is probably not running." 这块日志出现以下脚本中。 
- STAT=`"$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}"  
 -              -cp "$CLASSPATH" $JVMFLAGS org.apache.zookeeper.client.FourLetterWordMain  
 -              $clientPortAddress $clientPort srvr 2> /dev/null     
 -           | grep Mode` 
 -     if [ "x$STAT" = "x" ] 
 -     then 
 -         echo "Error contacting service. It is probably not running." 
 -         exit 1 
 -     else 
 -         echo $STAT 
 -         exit 0 
 -     fi 
 -     ;; 
 
  
截取其中一部分脚本内容:我们可以初步定为应该是 $STAT 获取存在异常 如果STAT变量为空,则会显示Error contacting service.  It is probably not running.: OK,那就分析下这个$STAT到底是什么鬼? 
-  if [ “x$STAT” = “x” ] 
 - then 
 - echo “Error contacting service. It is probably not running.” 
 - exit 1 
 - else 
 - echo $STAT 
 - exit 0 
 - fi 
 
  
3. 尝试用shell的debug模式看下执行过程。                         (编辑:滁州站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |