记录zookeeper搭建遇到的坑
我在学习kafka的时候,需要先搭建zookeeper集群,所以就开始搭建zookeeper集群,不出意料的失败,今天忽然看到一片文章介绍zookeeper监听端口,通信端口,选举端口的部分文章,想起来自己问题,然后改了下,虽然自己犯的问题很弱智,但是还是记录以下,希望可以帮助其他人。
以下是当时的思路和遇到的问题截图:
我在搭建zookeeper集群的时候,无论怎么重启,更改配置文件,都无法查看集群的状态,首先是第一个zookeeper日志信息
第二个zookeeper日志信息
第三个zookeeper日志信息
大致情况是第一个和第二个报一样的错误,都是eoefexception,following the leader的时候报异常。
而第三个zookeeper报的缺失bindexception:address already in use bind failed!
2183 端口提示被占用,但是这个端口我是分配给第三个zookeeper的,也就是说站在我的角度看,第三个zookeeper自己被自己占用了端口。
先kill2183端口,结果是第三个zookeeper停止了,也就是说这是错误的提示,或者说是误导的提示,看下前两个zookeeper的日志信息。
第一个:
第二个
第二个报了两个错误,第一个错误是端口被占用异常,第二个报的是连接被拒与第三个的。
至此基本可以明白的事有,1.这三个zookeeper是可以通信的,2.上面出现的三个异常,只有一个异常是成立的,那就是端口占用异常,另外两个异常都是因为第三个端口被占用而出现的附加问题。
问题分析:
因为我搭建的是伪集群,所有端口被占用的问题就可能出现在配置文件上,配置文件:
第一个的:
第二个的:
第三个:
看上去没有任何问题,可能是通信端口和选举端口存在问题,改全部放大10000.kill掉全部进程。然后重新启动。
继续错误和开篇提到的错误形式一模一样。
第三个zookeeper的通信端口已经被zookeeper启动了,但是仍提示被人占了。
ls -al /proc/4170
注意:
- cwd符号链接的是进程运行目录;
- exe符号连接就是执行程序的绝对路径;
- cmdline就是程序运行时输入的命令行命令;
- environ记录了进程运行时的环境变量;
- fd目录下是进程打开或使用的文件的符号连接。
每个zookeeper启动了三个进程,除了通信和选举进程,另外的进程是做什么的?
其实只要对zookeeper理解深刻,就知道,zookeeper监听端口,通信端口,选举端口是不同的。
在zoo.cfg这个文件中,配置集群信息是存在一定的格式:service.N =YYY: A:B
N:代表服务器编号(也就是myid里面的值)
YYY:服务器地址
A:表示 Flower 跟 Leader的通信端口,简称服务端内部通信的端口(默认2888)
B:表示 是选举端口(默认是3888)
N:代表服务器编号(也就是myid里面的值)
YYY:服务器地址
A:表示 Flower 跟 Leader的通信端口,简称服务端内部通信的端口(默认2888)
B:表示 是选举端口(默认是3888)
clientPort
客户端连接的接口,客户端连接zookeeper服务器的端口,zookeeper会监听这个端口,接收客户端的请求访问!这个端口默认是2181。
这个是正确的zoo.cfg 配置文件。现在已经正常了。