关于启动集群后查看状态时报错:
[myid:1] - WARN [WorkerSender[myid=1]:QuorumCnxManager@588] - Cannot open channel
注意!!这个是个深坑!!!其表现在zookeeper集群搭建完成后,我在三台机器(你可能是其他数量)上启动集群可以启动成功,但是查看状态时报错。具体就是not running啦。看到这个错我打印了zookeeper.out的日志。发现具体报错如下:
我便在网上查了一些博客,网上总结的问题主要有两点,我不排除你的问题是出在这两个上,因此这里我也列出来供大家参考。
1.防火墙没关导致通信失败,无法连接到其他节点上。如果你恰巧是这个问题,那很好解决,把每一台服务器的防火墙关闭即可。
命令行:chkconfig iptables off (关闭防火墙)
service iptables status(查看防火墙状态)
或者直接 service iptables stop
然后把服务全部重启即可。
2.配置文件问题
a. /zookeeper/conf/zoo.cfg文件配置问题
例如dataDir格式不对,或者没有创建dataDir指定的文件等等,所以细心地检查你的配置文件,至于这个文件的内容请大家自行百度。
b. dataDir指定的目录下创建myid文件,然后再文件写上你在zoo.cfg中该节点的对应server号,例如server.1,那么myid中就写1。
----------------------------------------------------------------------------------------------------------------------------------------------------------------
如果你上面两个地方都确信没有问题,但是集群还是起不了,那恭喜你和我一样中奖了!因为你遇到了一个深坑,而且在网上还很难找到其他的解决方案。
我后来仔细的检查了一遍,发现是version-2的权限问题导致的。
我们仔细观察我们创建myid的那个data文件夹。这里我放的目录是/usr/local/software/zookeeper-3.4.14/data。
我们发现当我们启动zookeeper后data中除了自己写的myid外还多出一个version-2的文件夹,这就是关键!!我们可以看到这个文件夹对root可执行,但是当我们进入之后,发现里面的三个文件都是不可执行的。我们需要修改他们的权限!
修改完之后,他们就变成可执行了!
我们对每一台服务器都进行修改。
然后再重启zookeeper,查看状态,发现集群就启动了!!
这里,我们在zookeeper.out中只看到了表面错误Connection Refused。但是真正造成错误的原因就在于
/usr/local/software/zookeeper-3.4.14/data/version-2/acceptedEpoch.tmp(Permissoin denied)。