最近边实习边学习zookeeper,正在看杭电学长的《从paxos到zookeeper》这本书,准备搭个伪集群来试试,先下载zookeeper,然后按照教程配置好三份zoo.cfg文件,然后执行启动脚本
第一个坑:启动不了
第一个坑是console上已经显示了,但是查看状态时显示可能没有启动zookeeper,那第一反应就是查看日志,本来以为日志会在zoo.cfg文件中配置的log目录下的,后来搜啊搜,发现在bin目录下,文件名是zookeeper.out
第二个坑:jdk目录无法找到
查看zookeeper.out的日志发现是找不到java home,当时想不应该啊,我使用得IDEA完全可以使用jdk,但是回忆了一下,我的IDEA中jdk是IDEA安装时自动装的,而zookeeper中使用的jdk home是手动安装jdk的默认目录
IDEA装的jdk目录和手动安装的目录是不一样的,所以我就下意识的去搜配置zookeeper的jdk目录,但是没有搜到,最终还是去Oracle官网去下载了,重新安装了一下
第三个坑:集群搭建
我在我自己的电脑上准备启动三个zookeeper实例,当我启动第一个实例,然后查看zookeeper.out文件,发现竟然报了很多错误,如下:
java.net.ConnectException: Connection refused (Connection refused)
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:562)
at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectAll(QuorumCnxManager.java:614)
at org.apache.zookeeper.server.quorum.FastLeaderElection.lookForLeader(FastLeaderElection.java:843)
at org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:913)
2018-07-28 14:35:43,649 [myid:1] - INFO [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:QuorumPeer$QuorumServer@167] - Resolved hostname: 127.0.0.1 to address: /127.0.0.1
连接被拒绝,第一反应是没有启动,以为是端口被占用的异常,但是去查看端口的使用情况发现端口并没有被占用,然后仔细的审查了异常发现是连接异常,连接的端口是另外两个zookeeper实例的配置端口,这时才恍然大悟,我只启动了第一个zookeeper实例,而并没有启动其他两个实例,其实第一个实例已经启动了。接下来就是启动了其他两个zookeeper实例,再次检查了zookeeper的状态,于是就是一个leader两个follower,如下
实例3:
ZooKeeper JMX enabled by default
Using config: /usr/local/solrcloud/zookeeper-3/bin/../conf/zoo.cfg
Mode: follower
实例1:
ZooKeeper JMX enabled by default
Using config: /usr/local/solrcloud/zookeeper-1/bin/../conf/zoo.cfg
Mode: follower
实例2:
ZooKeeper JMX enabled by default
Using config: /usr/local/solrcloud/zookeeper-2/bin/../conf/zoo.cfg
Mode: leader