Zookeeper 3.4.9 全分布模式解析(附:安装以及配置教程)

时间:2022-06-22 08:25:01

在我的上一篇博客中讲了如何玩Hadoop,今天我们就来装zookeeper咯!

首先,如果要玩这个就必须先在机器上装好JDK,要求是java6以上的。

附:ZooKeeper下载地址


安装以及配置:

本机配置:

Ubuntu  16.04 64bit  一共有三台

java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)

下载好gz安装包之后需要解压到电脑中

sudo tar -zxvf zookeeper-3.4.9.tar.gz  /usr/local/

其中/user/local就是我们的安装目录,解压完成之后需要对它进行改名字:

/usr/local$ mv zookeeper-3.4.9 zookeeper

改完名字之后需要进入配置文件修改环境变量:

/usr/local$ sudo vim /etc/profile

在打开的文件末尾添加:

export ZOOKEEPER_HOME=/usr/local/zookeeper
export PATH=.:$HADOOP_HOME/bin:$ZOOKEEPER_HOME/bin:$JAVA_HOME/bin:$PATH

配置conf

conf中的zoo.cfg是最重要的一步,但是在安装文件中没有这个,我们需要自己创建它!
在Zookeeper下的conf文件夹中执行以下命令:

 sudo mv zoo_sample.cfg zoo.cfg

打开它:

 sudo vim zoo.cfg

打开文件时你会发现它以及有内容了,我们只需要修改我们需要的内容:
修改缓存文件的地址,我把它放在安装文件夹中,这个data需要我们自己创建:

dataDir=/usr/local/zookeeper/data

末尾添加节点的IP和端口信息:

 server.1=Master:2888:3888
server.2=Slaver1:2888:3888
server.3=Slaver2:2888:3888

server的意思是服务机, 这里一共有三台。后面对应的是机器名(写在/etc/hosts当中了)和端口的名字。

接着在刚刚的/usr/local/zookeeper/data文件夹下,创建对应的myid文件:


vim myid

这个文件会记录自己的机器ID,对应的就是刚刚的server后面的数字标示 (ID只需要键入数字)

我这边一共有三台,就分别填 1、2、3。


写完之后就基本完成了配置工作
开始运行:

zkServer.sh start

收到回复:

ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

记住,要在其他的机子上也运行。

接着Zookeeper为我们准备了很多命令来查看节点的运行状态:

zkServer.sh status

得到反馈:

ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: follower

当然有的是Leader,没什么区别。


有时候会遇到坑:

ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.

节点没有启动成功,查看zookeeper.out发现:

...
2017-07-14 01:23:38,578 [myid:3] - WARN [WorkerSender[myid=3]:QuorumCnxManager@400] - Cannot open channel to 2 at election address /192.168.244.128:3888
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)
...

拒绝访问,连接失败!

查看情况之后发现是conf当中的zoo.cfg 中节点Ip必须要用地址代替:

server.1=0.0.0.0:2888:3888
server.2=192.168.10.10:2888:3888
server.3=192.168.2.1:2888:3888


Step 1:

Node 1:
zoo.cfg
server.1= 0.0.0.0:<port>:<port2>
server.2= <IP>:<port>:<port2>
server.n= <IP>:<port>:<port2>

Node 2 :
server.1= <IP>:<port>:<port2>
server.2= 0.0.0.0:<port>:<port2>
server.n= <IP>:<port>:<port2>

这个情况困扰了我很久,最后实在Stack Overflow上面看到的,老外早就遇到过这个问题。

有什么问题问吧,看到会回复,