linux 下搭建zookeeper集群 踩坑经过

下载 zookeeper-3.3.6.tar.gz  。下载地址:点击下载

准备三台服务器 :192.168.xx.128,192.168.xx.129,192.168.xx.130

分别拷贝到zookeeper-3.3.6.tar.gz  到/usr/目录下

解压 tar -zxvf  zookeeper-3.3.6.tar.gz 

 

三、进入到conf目录

  1. [root@localhost deploy]# cd /usr/zookeeper-3.3.6/conf  


四、拷贝zoo_samle.cfg为zoo.cfg

  1. [root@localhost conf]# cp zoo_sample.cfg zoo.cfg  

 

 

 

五、编辑zoo.cfg文件

  1. [root@localhost conf]# vi zoo.cfg   

 

修改为:

  1. # The number of milliseconds of each tick  
  2. tickTime=2000  
  3. # The number of ticks that the initial  
  4. # synchronization phase can take  
  5. initLimit=10  
  6. # The number of ticks that can pass between  
  7. # sending a request and getting an acknowledgement  
  8. syncLimit=5  
  9. # the directory where the snapshot is stored.  
  10. dataDir=/usr/local/zookeeper/data #自定义 
  11. dataLogDir=/usr/local/zookeeper/log  #自定义
  12. # the port at which the clients will connect  
  13. clientPort=2181  
  14. server.1=192.168.xx.128:2888:3888
  15. server.2=192.168.xx.129:2888:3888 
  16. server.3=192.168.xx.130:2888:3888  
  17.  
  18.  

 

 

 

六、设置环境变量

 

 

  1. [root@localhost conf]# export ZOOKEEPER_INSTALL=/usr/zookeeper-3.3.6  
  2. [root@localhost conf]# export PATH=$PATH:$ZOOKEEPER_INSTALL/bin  

除了修改zoo.cfg配置文件外,zookeeper集群模式下还要配置一个myid文件,这个文件需要放在dataDir目录下。

这个文件里面有一个数据就是A的值(该A就是zoo.cfg文件中server.A=B:C:D中的A),在zoo.cfg文件中配置的dataDir路径中创建myid文件。

#在192.168.xx.128服务器上面创建myid文件,并设置值为1,同时与zoo.cfg文件里面的server.1保持一致,如下

echo "1" > /usr/local/zookeeper/data/myid

 

#在192.168.xx.129服务器上面创建myid文件,并设置值为1,同时与zoo.cfg文件里面的server.2保持一致,如下

echo "2" > /usr/local/zookeeper/data/myid

 

#在192.168.xx.130服务器上面创建myid文件,并设置值为1,同时与zoo.cfg文件里面的server.3保持一致,如下

echo "3" > /usr/local/zookeeper/data/myid

 

到此 配置结束

然后 同时进入 /usr/zookeeper-3.3.6/bin/ 目录下  启动 ./zkServer.sh start 

 

 

JMX enabled by default
Using config: /usr/zookeeper-3.3.6/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@node0 zookeeper-3.4.6]$ ./bin/zkServer.sh status
JMX enabled by default
Using config: /usr/zookeeper-3.6.6/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.zkServer.sh status
JMX enabled by default
Using config: /usr/zookeeper-3.6.6/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.


start 正常,但是查看状态时,出现如下错误:

<span style="color:#ff0000">Error contacting service. It is probably not running.</span>

 

 

 停掉ZK,然后以start-foreground方式启动,查看启动日志:
   即:zkServer.sh start-foreground ,又出现如下错误:
  1. java.net.BindException: 地址已在使用  
  2.     at sun.nio.ch.Net.bind0(Native Method)  
  3.     at sun.nio.ch.Net.bind(Net.java:463)  
  4.     at sun.nio.ch.Net.bind(Net.java:455)  
  5.     at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)  
  6.     at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)  
  7.     at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:67)  
  8.     at org.apache.zookeeper.server.NIOServerCnxnFactory.configure(NIOServerCnxnFactory.java:90)  
  9.     at org.apache.zookeeper.server.quorum.QuorumPeerMain.runFromConfig(QuorumPeerMain.java:130)  
  10.     at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:111)  
  11.     at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:78)  

 

 

 

从错误信息来看,是端口被使用了,但我用netstat -lntup是没被使用的,再用 lsof -i:2181,发现了2181端口果然被占用了
[root@ programfiles]# lsof -i:2181  

是java的一个进程 占用了端口(这里忘了截图了)。

再次修改 conf/zoo.cfg 将端口号 2181 修改为 21810,重新启动

 

java.net.NoRouteToHostException: 没有到主机的路由
        at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
        at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:712)
        at sun.nio.ch.SocketAdaptor.connect(SocketAdaptor.java:111)
        at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:371)
        at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectAll(QuorumCnxManager.java:404)
        at org.apache.zookeeper.server.quorum.FastLeaderElection.lookForLeader(FastLeaderElection.java:688)
        at org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:622)

 

又出现了如下错误,真是一部一个坑。

检查了一下防火墙的状态,将其关闭:

 

centos7.0(默认是使用firewall作为防火墙,如若未改为iptables防火墙,使用以下命令查看和关闭防火墙)

查看防火墙状态:firewall-cmd --state

关闭防火墙:systemctl stop firewalld.service

 

重新启动:

zkServer.sh start-foreground 

 

java.net.ConnectException: 拒绝连接
        at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
        at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:712)
        at sun.nio.ch.SocketAdaptor.connect(SocketAdaptor.java:111)
        at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:371)
        at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectAll(QuorumCnxManager.java:404)
        at org.apache.zookeeper.server.quorum.FastLeaderElection.lookForLeader(FastLeaderElection.java:688)
        at org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:622)

竟然还有错误?!!百度到一片文章,后说需要修改   /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

将第一行注释掉,再次启动:

zkServer.sh start

 

启动成功!查看一下 状态

zkServer.sh status

 

 

[root@localhost bin]# ./zkServer.sh status
JMX enabled by default
Using config: /usr/zookeeper-3.3.6/bin/../conf/zoo.cfg
Mode: followerfollower

 

 

 

 

[root@localhost bin]# ./zkServer.sh status
JMX enabled by default
Using config: /usr/zookeeper-3.3.6/bin/../conf/zoo.cfg
Mode: leaderleader

 

 

[root@localhost bin]# ./zkServer.sh status
JMX enabled by default
Using config: /usr/zookeeper-3.3.6/bin/../conf/zoo.cfg
Mode: followerfollower


至此,zookeeper集群搭建完毕,感觉所有的坑全踩了一遍。对于一个刚刚接触linux 不久的菜鸟来说真的很残忍。希望能够帮到大家!
问题最后解决看的是这篇文章,http://blog.csdn.net/pein_zero/article/details/51855244

 

修改端口后 客户端客户端 访问:./zkCli.sh -timeout 5000 -server 127.0.0.1:21810

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值