zk我很早就已经接触过了,但是对它理解的并不深刻。最近这两天,我拉出了以前安装zk时候写的博客文章,重新配置了一遍zk,这次对着自己以前的写的博文,在看了几篇网上专家们写的博客,对zk的安装过程理解的更加清楚了,对zk的配置文件zoo.cfg中各个配置项的含义也理解的更加清晰了。
zk有三种安装方式:单机方式、伪分布式方式、分布式方式。我采用的是伪分布式方式,但是我在做伪分布式的安装过程中仔细的理解了 伪分布式安装和分布式安装的区别,通过对配置项的深入理解,我知道了如何将一个伪分布式安装的zk集群转换为真正分布式集群,配置伪分布式和真实分布式各自的注意事项。
zookeeper安装过程中出现了,两个问题,记录一下,可能会帮助到很多更多的朋友,希望能减少大家学习路上的困难。
我的安装目录
/usr/local/zookeeper
|--zk1
|--zk2
|--zk3
1、QuorumPeerConfig$ConfigException: Address unresolved: 192.168.75.128:7771
====================================================================
这个错误是因为 server.1的端口号后面有空格的缘故。
用cat -A logs/zookeeper-root-server-localhost.localdomain.out 查看后发现,server.1这一行配置的最后一个端口号后面有一个空格,这是导致错误的原因:
$ server.1=192.168.75.128:8881:7771 $ server.2=192.168.75.128:8882:7772$ server.3=192.168.75.128:8883:7773$ $
$ server.1=192.168.75.128:8881:7771 $ server.2=192.168.75.128:8882:7772$ server.3=192.168.75.128:8883:7773$ $
修改之后,重新启动,成功了。细微的两个小空格都会导致启动失败。
2、Starting zookeeper ... already running as process 2930
=================================================
当我执行 ./zk1/bin/zkServer.sh start 启动了zk1之后,然后执行 ./zk2/bin/zkServer.sh start的时候爆出了这个错误,我此时非常困惑,接着,我想试试启动zk3看看啥情况,我就继续执行 ./zk3/bin/zkServer.sh start,这时候,我非常难过地发现 zk3也爆出了同样的错误。
我简直有点无语了。
我看了pid 2930,jps查看一下,发现zk1启动之后的pid恰好是2930,那么说明zk2、zk3在启动的时候,被当成zk1来启动了。
无奈之下,我把错误信息贴到百度搜索框中,搜出了好多文章,看了两个文章之后,好像与data/zookeeper.pid文件有关系,于是,我去cat了zk2/data/zookeeper.pid,发现这里记录的pid和zk1启动之后的pid并不是同一个pid啊。
后来,我突然间就清醒了,是不是我的zk2和zk3的data目录没有配置好。
一看,果然如此。zk2和zk3配置文章中的 data=/usr/local/zookeeper/zk1/data,我马上修改了zk2 和 zk3的data到自己根目录下的data。
此时,我重新启动zk2和zk3,都顺利启动起来了。
所以,当出现这个错误的时候,大家不妨先查看一下 data目录配置是否正确。这是一个诊断方向。
我在解决这两个错误的时候,还是参考了其他专家的文章的,感谢素未谋面的网上专家。
参考资料: