最近看了尚硅谷的zookeeper教程,在集群环境搭建中,
有这么一个脚本zk.sh用来一键启动和查询
#!/bin/bash
case $1 in
"start"){
for i in zknode2 zknode3 zknode4
doecho ---------- zookeeper $i 启动 ------------
ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh start"
done
};;
"stop"){
for i in zknode2 zknode3 zknode4
doecho ---------- zookeeper $i 停止 ------------
ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh stop"
done
};;
"status"){
for i in zknode2 zknode3 zknode4
doecho ---------- zookeeper $i 状态 ------------
ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh status"
done
};;
esac
但是在启动时
出现了如下错误
可是我明明加进了环境变量,zookeeper启动时为什么显示JAVA_HOME is not set and java could not be found in PATH?
最后发现是环境变量配置出了问题。
我之前是按照网上的博客里面写的添加在了/etc/profile文件
export JAVA_HOME=存放的路径
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
看了一下之前的教程,添加方式是在/etc/profile.d/my_env.sh文件中添加
#JAVA_HOME
export JAVA_HOME=存放的路径
export PATH=$PATH:$JAVA_HOME/bin
然后我的问题解决了。
排错的过程是曲折的。一开始我认为jdk的环境变量不可能出问题,因为我直接复制别人博客里面的。
然后我试图按照网上的方法来手动添加一下,比如在zk.sh里面添加一下,但并没有成功。类似于下面这种方式
export JAVA_HOME="/usr/local/jdk1.8.0_261"
(也可能是我添加错文件或者添加的位置不对的原因所以并没有成功,我尝试了加载zk.sh前面。没有尝试直接执行或者加在zkEnv.sh里面,个人感觉这种方式应该是没有问题的)
之前我看到的一个博客
直到后面使用的版本换成了zookeeper3.4.9,发现zk.sh 中的start和stop可以用了,但是status还是不能成功,我开始觉得是zookeeper的版本问题,然后发现在下载的zookeeper包中的readme中有这么一段
难道是jdk版本太新了Zookeeper不支持?
于是我决定将jdk8u311换成了jdk8_u212试试。
我将jdk8u311换成了jdk8_u212,也就是这个时候开始按照尚硅谷教程里面的方式,这时惊奇地发现可以了。
于是我认为可能是jdk版本太新导致了这个错误的出现。我兴奋地以为是jdk8的小版本号不同的原因。
然而顺手重新用了一下jdk8u311,发现也可以。哦豁,竟然是环境变量配置的原因。困扰我两天的问题竟然是因为这个,排查了一天一夜绕了一大圈,小丑竟是我自己。