使用命令zkServer.sh status查看zookeeper各节点状态的时候出现Error contacting service. It is probably not running.的错误
查看zookeeper.out见有以下WARN
Cannot open channel to 101 at election address slave01/*.*.*.*:3888
java.net.SocketTimeoutException: connect timed out
解决方法:
1.确保zookeeper安装目录下的conf下的zoo.cfg配置了如下信息
server.100=master:2888:3888
server.101=slave01:2888:3888
server.102=slave02:2888:3888
2.确保zoo.cfg文件配置的dataDir目录下有myid文件并且内容为该机id,如果像上面一样配置了三台服务器id分别为100,101,102则每台服务器的myid文件中写入各自的编号。
3.上面两步都没错之后发现错误还是没有消失,检查/etc/hosts文件中自己的主机名是否解析为127.0.0.1,或者如果是阿里云的ECS的话有默认自己的主机名解析为内网地址,如果你将自己的主机名改成了解析为外网地址,那么zookeeper将无法在zoo.cfg文件中没有0.0.0.0的情况下启动。
方式一:
将/etc/hosts/中的自己的主机名解析成内网地址
方式二:
修改每台服务器中的zoo.cfg配置信息
然后重启zookeeper
master
server.100=0.0.0.0:2888:3888
server.101=slave01:2888:3888
server.102=slave02:2888:3888
slave01
server.100=master:2888:3888
server.101=0.0.0.0:2888:3888
server.102=slave02:2888:3888
slave02
server.100=master:2888:3888
server.101=slave01:2888:3888
server.102=0.0.0.0:2888:3888
然后重启zookeeper
到了这里如果还是没解决错误,可以尝试下面几种方式
1.关闭防火墙
2.如果是ECS则去控制台添加安全组规则开放zookeeper相关的端口
3.删除dataDir目录下的zookeeper_server.pid文件然后重启zk
注意:因为每台服务骑上的zkServer服务都是有先后顺序启动的,最先启动的那台服务器肯定会报Cannot open channel to 101 at election address slave01/*.*.*.*:3888的错误,因为其他服务器上还没有启动zkServer,所以看最后一台服务器的日期里没有错误就好了。
参考网址