Cannot open channel to x at election address...zookeeper 节点连接问题
此主要问题集中在集群的节点信息配置上。常规配置如下:
server.1=192.168.100.133:2888:3888server.2=192.168.100.131:2888:3888server.3=192.168.100.130:2888:3888
# server.1 这个1是服务器的标识也可以是其他的数字, 表示这个是第几号服务器,用来标识服务器,这个标识要写到快照目录下面myid文件里
# 192.168.100.133为集群里的IP地址,第一个端口是master和slave之间的通信端口, Leader监听此端口,默认是2888,第二个端口是leader选举的端口,集群刚启动的时候选举或者leader挂掉之后进行新的选举的端口,默认是3888
这样的配置乍一看没问题,但是在实操的时候可能出现各式各样的问题。
-
首先,各个节点直接是能通讯的,不然怎么进行选举等操作?所以首先要保证节点之间能够正常通讯,是telnet通,不是ping通!
-
其次,确保部署服务器上没有启动Tomcat、Jenkins等占用8080端口的服务,尤其是Jenkins,默认就是8080(坑了一把,与Jenkins共用一台服务器,修改后要 重启)。 zookeeper部署3.5以后的版本, 会自动占用8080端口。所以就会有端口冲突。类似这样的错误: Caused by: java.net.BindException: Address already in use。这样的问题都可以在日志中看到,一定要随时观察日志,能解决自己的问题。
-
再次,查看服务器的2181端口是否被占用,有的话,可以关闭对应的进程或修改端口。 2181端口是对cline端提供服务。
-
以上几点都是关于节点端口之间通讯的问题,不一定非得使用默认的2888、3888,取决于服务器可用的端口,将2888:3888 改为 2878:3878等都是可以的。
-
参考Stack Overflow上面的回答:每台机器上的zoo.cfg配置文件, 修改其对应的ip地址为0.0.0.0。
![](https://i-blog.csdnimg.cn/blog_migrate/60200a61cc608e53ecb88764bac987a0.png)
6. 另外几点我没有遇到,但是网上出现的概率还是挺高的,罗列如下:
a. 查看防火墙是否关闭;
b. 检查各节点时间是否一致!这个其实也挺重要的,时间不同步也是很头痛的事情,可以使用yum -y install ntp ntpdate,设置系统时间与网络时间同步:ntpdate
cn.pool.ntp.org;
c. 检查各节点zookeeper的zoo.cfg的配置文件;
d. myid注意服务器每个要和配置文件一一对应;
e.查看三台节点的 /et/chosts 配置是否一致;
7. 重启大法!为什么把重启放到最后单独说一下,是因为可能上面的各种情况尝试过,启动zookeeper后,日志中依然有连接拒接的情况:
Cannot open channel to 1 at election address /192.168.100.133:3889 java.net. ....百思不得其解,后来看到这篇文章:
https://blog.csdn.net/sailist/article/details/83717298 (
无论怎样都无法解决Cannot open channel to x at election address的原因。)
然后尝试 ./zkServer.sh restart 重启了一下,一个节点好了,又对另一个节点重启了两次,连接正常了,日志也没有继续报错,显示两个节点连接正常...如下图。
Mode: follower myid:2
![](https://i-blog.csdnimg.cn/blog_migrate/775e84ff98ae9c2cb92bab144509fccb.png)
Mode: follower myid:1
![](https://i-blog.csdnimg.cn/blog_migrate/4c0a3338ebc75af24eb70e68ba86782d.png)
很神奇,问题虽然是解决了,但是原因尚未搞明白,猜测可能是ip等配置修改完成后需要重启zookeeper节点进行手动重连。如若有心得的同学还望不吝赐教。
另外,zookeeper不同版本启动后的说明也有点差异。
下面是ZooKeeper版本:3.4.6。此时启动失败会明确说明error contacting service。
![](https://i-blog.csdnimg.cn/blog_migrate/33136700be4de033bfd7570a7340fb4f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/806f5ac6cf9194d5dbcfcf21e2e9cbdc.png)
下面是本文的3.6.2,此时启动是否正常需要查看日志,不会明显提示error。
![](https://i-blog.csdnimg.cn/blog_migrate/4ef387a32dce15cb199d2c97ac579960.png)