| 第七、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模式看下执行过程。 (编辑:南平站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |