加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

程序员笔记 | 一次Zookeeper扩展之殇

发布时间:2019-05-30 00:48:28 所属栏目:教程 来源:毛正卫
导读:背景 基于公司发展硬性需求,生产VM服务器要统一迁移到ZStack 虚拟化服务器。检查自己项目使用的服务器,其中zookeeper集群中招,所以需要进行迁移。 迁移计划 为了使迁移不对业务产生影响,最好是采用扩容 - 缩容的方式进行。 说明: 原生产集群为VM-1,VM

截取片段执行日志如下 :果然STAT变量确实为空,导致输出Error contacting service. It is probably not running.并且退出。

  1. ++ grep '^[[:space:]]*clientPort[^[:alpha:]]' /app/zookeeper-3.4.6/bin/../conf/zoo.cfg 
  2. + clientPort=5181 
  3. ++ grep Mode 
  4. ++ /opt/jdk1.8.0_131/bin/java -Dzookeeper.log.dir=. -Dzookeeper.root.logger=INFO,CONSOLE -cp '/app/zookeeper-3.4.6/bin/../build/classes:/app/zookeeper-3.4.6/bin/../build/lib/*.jar:/app/zookeeper-3.4.6/bin/../lib/slf4j-log4j12-1.6.1.jar:/app/zookeeper-3.4.6/bin/../lib/slf4j-api-1.6.1.jar:/app/zookeeper-3.4.6/bin/../lib/netty-3.7.0.Final.jar:/app/zookeeper-3.4.6/bin/../lib/log4j-1.2.16.jar:/app/zookeeper-3.4.6/bin/../lib/jline-0.9.94.jar:/app/zookeeper-3.4.6/bin/../zookeeper-3.4.6.jar:/app/zookeeper-3.4.6/bin/../src/java/lib/*.jar:/app/zookeeper-3.4.6/bin/../conf:.:/opt/jdk1.8.0_131/lib/dt.jar:/opt/jdk1.8.0_131/lib/tools.jar' org.apache.zookeeper.client.FourLetterWordMain localhost 5181 srvr 
  5. + STAT= 
  6. + ‘[‘ xx = x ‘]’ 
  7. + echo ‘Error contacting service. It is probably not running.’ 
  8. Error contacting service. It is probably not running. 
  9. + exit 1 

4、修改shell脚本:分析zkServer.sh 在脚本总增加输出STAT 内容,这次我们不进行过滤。

  1. STAT1=`"$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}"  
  2.              -cp "$CLASSPATH" $JVMFLAGS org.apache.zookeeper.client.FourLetterWordMain  
  3.              $clientPortAddress $clientPort srvr 2> test.log  ` 
  4.  
  5. echo "$STAT1" 

最好的方式是copy一个新脚本,以免污染原本的脚本。我是这么做的;然后运行该脚本。

  1. [root@localhost bin]# ./zkServer.sh  status 
  2. ZooKeeper JMX enabled by default 
  3. Using config: /usr/zookeeper/zookeeper-3.4.10/bin/../conf/zoo.cfg 
  4. Error contacting service. It is probably not running. 

然后查看生成的test.log 文件:果然存在异常内容。

  1. in thread “main” java.lang.NumberFormatException: For input string: “2181 
  2. at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 
  3. at java.lang.Integer.parseInt(Integer.java:492) 
  4. at java.lang.Integer.parseInt(Integer.java:527) 
  5. at org.apache.zookeeper.client.FourLetterWordMain.main(FourLetterWordMain.java:76) 

从日志信息来看,提示说2181这个端口号造成的。 不是一个合法的数字。

zkServer.sh里有这么一句:

  1. clientPort=`grep “^[[:space:]]*clientPort[^[:alpha:]]” “$ZOOCFG” | sed -e ‘s/.*=//’` 
  2. grep “^[[:space:]]*clientPort[^[:alpha:]]” “$ZOOCFG” | sed -e ‘s/.*=//’在执行过程中,实际命令如下: 
  3. grep ‘^[[:space:]]*clientPort[^[:alpha:]]’ /app/zookeeper-3.4.6/bin/../conf/zoo.cfg | sed -e ‘s/.*=//’ 
  • 最终可以基本确认配置文件存在问题:
  • 替换配置文件:重启 问题解决;
  • 存在原因可能是编辑zoo.cfg 编码格式等等引起文件内容解析异常。

【本文是51CTO专栏机构宜信技术学院的原创文章,微信公众号“宜信技术学院( id: CE_TECH)”】

戳这里,看该作者更多好文

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读