我在学习kafka的时候,需要先搭建zookeeper集群,所以我就在云服务器上开始搭建zookeeper集群了,但是不出意料,就是失败,因为自己有其他事情,所以一直是想起来就弄以下,今天忽然看到一片文章介绍zookeeper监听端口,通信端口,选举端口的部分文章,想起来自己问题,然后改了下,虽然自己犯的问题很弱智,但是还是记录以下,希望可以帮助其他人。
以下是当时的思路和遇到的问题截图:
我在搭建zookeeper集群的时候,无论怎么重启,更改配置文件,都无法查看集群的状态,首先是第一个zookeeper日志信息
第二个zookeeper日志信息
第三个zookeeper日志信息
。
大致情况是第一个和第二个报一样的错误,都是eoefexception,following the leader的时候报异常。
而第三个zookeeper报的缺失bindexception:address already in use bind failed!
2183 端口提示被占用,但是这个端口我是分配给第三个zookeeper的,也就是说站在我的角度看,第三个zookeeper自己被自己占用了端口。
先kill到2183端口试试。。结果是第三个zookeeper停止了,也就是说这是错误的提示,或者说是误导的提示,看下前两个zookeeper的日志信息。
第一个:
第二个
第二个就厉害了,报了两个错误,第一个错误是端口被占用异常,第二个报的是连接被拒与第三个的。
至此基本可以明白的事有,1.这三个zookeeper是可以通信的,2.上面出现的三个异常,只有一个异常是成立的,那就是端口占用异常,另外两个异常都是因为第三个端口被占用而出现的附加问题。
好了,解决端口被占用的问题,
问题分析:
因为我搭建的是伪集群,所有端口被占用的问题就可能出现在配置文件上,配置文件:
第一个的:
第二个的:
第三个:
看上去没有任何问题,我觉得可能是通信端口和选举端口存在问题,改。
为了避免出幺蛾子,全部放大10000.kill掉全部进程。然后重新启动。
结果是错误和开篇提到的错误形式一模一样。
第三个zookeeper的通信端口已经被zookeeper启动了,但是它非要说被被人占了,mmp。
我看了网上提到把ip地址改为0.0.0.0,并且把usr下的zookeeper的文件全部删除,只剩下myid文件,但是错误依旧,和开篇提到的异常一样。
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 配置文件。现在已经正常了。
我之所以写这个,一是记录以下,另外现在博客抄的是真厉害啊,我严重怀疑全是抄外国的,还瞎抄。一点有用的信息也找不到,可能是我起点太低了把。