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