1 安装Java 环境
ZooKeeper服务器是用Java编写创建,它运行在JVM。所以需要使用JDK 6或更高版本。
关于Java环境的安装配置可以参考之前的文章:
Linux 7.6 平台 Hadoop 3.1.1 集群搭建手册
https://www.cndba.cn/download/dave/6
2 安装ZooKeeper 框架
ZooKeeper可以安装成单机模式和集群模式。单机模式较简单,只部署一个zk进程,客户端直接与该zk进程进行通信。这种模式仅在开发环境下使用,因为其存在单点故障。生产环境一般选择集群模式。这两种模式基本没有差别,就配置参数多几个,另外就是主机的数量。 另外在选择选择zk节点的时候需要使用奇数。
这里的测试环境有5个salve节点,我们选择3个节点来部署ZooKeeper。
[cndba@hadoopmaster zookeeper]$ cat /etc/hosts
127.0.0.1 localhost
192.168.20.80 hadoopmaster
192.168.20.81 hadoopslave1
192.168.20.82 hadoopslave2
192.168.20.83 hadoopslave3
192.168.20.84 hadoopslave4
192.168.20.85 hadoopslave5
[cndba@hadoopmaster zookeeper]$
集群模式部署与单机模式部署一样,先在单节点上安装好zk软件,然后修改配置文件,最后将软件和配置文件复制到其他节点即可。
2.1 下载ZooKeeper
可以直接从官网下载:
http://zookeeper.apache.org/我们这里下载的是3.4.13的版本:
http://mirrors.shu.edu.cn/apache/zookeeper/zookeeper-3.4.13/zookeeper-3.4.13.tar.gz
2.2 解压缩文件
[cndba@hadoopmaster ~]$ pwd
/home/cndba
[cndba@hadoopmaster ~]$ ll
total 380580
drwxr-xr-x. 13 cndba cndba 194 Jan 23 02:24 hadoop
-rw-r--r--. 1 cndba cndba 334559382 Jan 22 14:02 hadoop-3.1.1.tar.gz
drwxr-xr-x. 4 cndba cndba 30 Jan 23 21:57 NCDC
drwxr-xr-x 9 cndba cndba 318 Dec 19 2017 sqoop
-rw-r--r-- 1 cndba cndba 17953604 Mar 1 14:38 sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz
-rw-r--r-- 1 cndba cndba 37191810 Mar 1 23:12 zookeeper-3.4.13.tar.gz
[cndba@hadoopmaster ~]$ tar xzvf zookeeper-3.4.13.tar.gz
zookeeper-3.4.13/
zookeeper-3.4.13/ivysettings.xml
zookeeper-3.4.13/dist-maven/
zookeeper-3.4.13/bin/
zookeeper-3.4.13/build.xml
zookeeper-3.4.13/zookeeper-3.4.13.jar.asc
zookeeper-3.4.13/zookeeper-3.4.13.jar.sha1
zookeeper-3.4.13/zookeeper-3.4.13.jar
zookeeper-3.4.13/docs/
zookeeper-3.4.13/ivy.xml
…
[cndba@hadoopmaster ~]$ mv zookeeper-3.4.13 zookeeper
[cndba@hadoopmaster ~]$ ll
total 380584
drwxr-xr-x. 13 cndba cndba 194 Jan 23 02:24 hadoop
-rw-r--r--. 1 cndba cndba 334559382 Jan 22 14:02 hadoop-3.1.1.tar.gz
drwxr-xr-x. 4 cndba cndba 30 Jan 23 21:57 NCDC
drwxr-xr-x 9 cndba cndba 318 Dec 19 2017 sqoop
-rw-r--r-- 1 cndba cndba 17953604 Mar 1 14:38 sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz
drwxr-xr-x 10 cndba cndba 4096 Jul 1 2018 zookeeper
-rw-r--r-- 1 cndba cndba 37191810 Mar 1 23:12 zookeeper-3.4.13.tar.gz
[cndba@hadoopmaster ~]$
[cndba@hadoopmaster ~]$ cd zookeeper/
[cndba@hadoopmaster zookeeper]$ ls
bin conf dist-maven ivysettings.xml lib NOTICE.txt README_packaging.txt src zookeeper-3.4.13.jar.asc zookeeper-3.4.13.jar.sha1
build.xml contrib docs ivy.xml LICENSE.txt README.md recipes zookeeper-3.4.13.jar zookeeper-3.4.13.jar.md5
[cndba@hadoopmaster zookeeper]$ mkdir data
[cndba@hadoopmaster zookeeper]$ mkdir logs
[cndba@hadoopmaster zookeeper]$ ll
total 1628
drwxr-xr-x 2 cndba cndba 202 Mar 2 07:14 bin
-rw-r--r-- 1 cndba cndba 91400 Jun 30 2018 build.xml
drwxr-xr-x 2 cndba cndba 77 Mar 2 07:14 conf
drwxr-xr-x 10 cndba cndba 130 Mar 2 07:14 contrib
drwxrwxr-x 2 cndba cndba 6 Mar 2 07:17 data
drwxr-xr-x 2 cndba cndba 4096 Mar 2 07:14 dist-maven
drwxr-xr-x 6 cndba cndba 4096 Mar 2 07:14 docs
-rw-r--r-- 1 cndba cndba 1709 Jun 30 2018 ivysettings.xml
-rw-r--r-- 1 cndba cndba 8502 Jun 30 2018 ivy.xml
drwxr-xr-x 4 cndba cndba 308 Mar 2 07:14 lib
-rw-r--r-- 1 cndba cndba 11938 Jun 30 2018 LICENSE.txt
drwxrwxr-x 2 cndba cndba 6 Mar 2 07:47 logs
-rw-r--r-- 1 cndba cndba 3132 Jun 30 2018 NOTICE.txt
-rw-r--r-- 1 cndba cndba 1585 Jun 30 2018 README.md
-rw-r--r-- 1 cndba cndba 1770 Jun 30 2018 README_packaging.txt
drwxr-xr-x 5 cndba cndba 47 Mar 2 07:14 recipes
drwxr-xr-x 8 cndba cndba 211 Jun 30 2018 src
-rw-r--r-- 1 cndba cndba 1508639 Jun 30 2018 zookeeper-3.4.13.jar
-rw-r--r-- 1 cndba cndba 833 Jul 1 2018 zookeeper-3.4.13.jar.asc
-rw-r--r-- 1 cndba cndba 33 Jun 30 2018 zookeeper-3.4.13.jar.md5
-rw-r--r-- 1 cndba cndba 41 Jun 30 2018 zookeeper-3.4.13.jar.sha1
[cndba@hadoopmaster zookeeper]$
2.3 修改配置文件
[cndba@hadoopmaster zookeeper]$ cd conf
[cndba@hadoopmaster conf]$ pwd
/home/cndba/zookeeper/conf
[cndba@hadoopmaster conf]$ ll
total 12
-rw-r--r-- 1 cndba cndba 535 Jun 30 2018 configuration.xsl
-rw-r--r-- 1 cndba cndba 2161 Jun 30 2018 log4j.properties
-rw-r--r-- 1 cndba cndba 922 Jun 30 2018 zoo_sample.cfg
[cndba@hadoopmaster conf]$ cp zoo_sample.cfg zoo.cfg
[cndba@hadoopmaster conf]$
修改后的zoo.cfg配置文件如下:
[cndba@hadoopmaster conf]$ grep -v "^#" zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/cndba/zookeeper/data
dataLogDir=/home/cndba/zookeeper/logs
clientPort=2181
server.1=hadoopmaster:2888:3888
server.2=hadoopslave1:2888:3888
server.3=hadoopslave2:2888:3888
[cndba@hadoopmaster conf]$
配置参数说明如下:
- tickTime这个时间是作为zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是说每个tickTime时间就会发送一个心跳。
- initLimit这个配置项是用来配置zookeeper接受客户端(这里所说的客户端不是用户连接zookeeper服务器的客户端,而是zookeeper服务器集群中连接到leader的follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。
- 当已经超过10个心跳的时间(也就是tickTime)长度后 zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 10*2000=20秒。
- syncLimit这个配置项标识leader与follower之间发送消息,请求和应答时间长度,最长不能超过多少个tickTime的时间长度,总的时间长度就是5*2000=10秒。
- dataDir顾名思义就是zookeeper保存数据的目录,默认情况下zookeeper将写数据的日志文件也保存在这个目录里;
- clientPort这个端口就是客户端连接Zookeeper服务器的端口,Zookeeper会监听这个端口接受客户端的访问请求;
- server.A=B:C:D中的A是一个数字,表示这个是第几号服务器,B是这个服务器的IP地址,C第一个端口用来集群成员的信息交换,表示这个服务器与集群中的leader服务器交换信息的端口,D是在leader挂掉时专门用来进行选举leader所用的端口。
2.4 创建ServerID 标识
在节点配置的dataDir指定的目录下面,创建一个myid文件,里面内容为一个数字,用来标识当前主机,即$ZOOKEEPER_HOME/conf/zoo.cfg文件中配置的server.X,则myid文件中就输入这个数字X。这里master节点为 1。其他节点根据参数参数中的配置进行修改。
[cndba@hadoopmaster zookeeper]$ cd data/
[cndba@hadoopmaster data]$ pwd
/home/cndba/zookeeper/data
[cndba@hadoopmaster data]$ touch myid
[cndba@hadoopmaster data]$ echo "1" > myid
[cndba@hadoopmaster data]$ cat myid
1
2.5 修改环境变量
修改/etc/profile 文件添加如下内容:
#Set ZOOKEEPER_HOME ENVIRONMENT
export ZOOKEEPER_HOME=/home/cndba/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin
2.6 从master节点分发文件到其他节点并修改ServerID标识
[cndba@hadoopmaster ~]$ pwd
/home/cndba
[cndba@hadoopmaster ~]$ ll
total 380584
drwxr-xr-x. 13 cndba cndba 194 Jan 23 02:24 hadoop
-rw-r--r--. 1 cndba cndba 334559382 Jan 22 14:02 hadoop-3.1.1.tar.gz
drwxr-xr-x. 4 cndba cndba 30 Jan 23 21:57 NCDC
drwxr-xr-x 9 cndba cndba 318 Dec 19 2017 sqoop
-rw-r--r-- 1 cndba cndba 17953604 Mar 1 14:38 sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz
drwxr-xr-x 12 cndba cndba 4096 Mar 2 07:47 zookeeper
-rw-r--r-- 1 cndba cndba 37191810 Mar 1 23:12 zookeeper-3.4.13.tar.gz
[cndba@hadoopmaster ~]$
[cndba@hadoopmaster ~]$ scp -r zookeeper hadoopslave1:`pwd`
[cndba@hadoopmaster ~]$ scp -r zookeeper hadoopslave2:`pwd`
2.7 启动ZK
在所有节点启动zk并查看状态:
[cndba@hadoopslave1 data]$ zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /home/cndba/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[cndba@hadoopslave1 data]$ zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/cndba/zookeeper/bin/../conf/zoo.cfg
Mode: leader
[cndba@hadoopslave1 data]$
cndba@hadoopslave2 ~]$ vi zookeeper/data/myid
[cndba@hadoopslave2 ~]$ zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /home/cndba/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[cndba@hadoopslave2 ~]$ zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/cndba/zookeeper/bin/../conf/zoo.cfg
Mode: follower
[cndba@hadoopslave2 ~]$
[cndba@hadoopmaster ~]$ zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /home/cndba/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[cndba@hadoopmaster ~]$ zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/cndba/zookeeper/bin/../conf/zoo.cfg
Mode: follower
[cndba@hadoopmaster ~]$
2.8 Zookeeper 集群连接
Zookeeper集群搭建完之后,可以通过命令行CLI连接zk。连接之后可以进行相应的客户端操作。
[cndba@hadoopmaster ~]$ zkCli.sh -server 192.168.20.81:2181
Connecting to 192.168.20.81:2181
2019-03-02 08:39:11,094 [myid:] - INFO [main:Environment@100] - Client environment:zookeeper.version=3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03, built on 06/29/2018 04:05 GMT
2019-03-02 08:39:11,098 [myid:] - INFO [main:Environment@100] - Client environment:host.name=hadoopmaster
2019-03-02 08:39:11,098 [myid:] - INFO [main:Environment@100] - Client environment:java.version=1.8.0_181
2019-03-02 08:39:11,102 [myid:] - INFO [main:Environment@100] - Client environment:java.vendor=Oracle Corporation
2019-03-02 08:39:11,102 [myid:] - INFO [main:Environment@100] - Client environment:java.home=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-7.b13.el7.x86_64/jre
2019-03-02 08:39:11,102 [myid:] - INFO [main:Environment@100] - Client environment:java.class.path=/home/cndba/zookeeper/bin/../build/classes:/home/cndba/zookeeper/bin/../build/lib/*.jar:/home/cndba/zookeeper/bin/../lib/slf4j-log4j12-1.7.25.jar:/home/cndba/zookeeper/bin/../lib/slf4j-api-1.7.25.jar:/home/cndba/zookeeper/bin/../lib/netty-3.10.6.Final.jar:/home/cndba/zookeeper/bin/../lib/log4j-1.2.17.jar:/home/cndba/zookeeper/bin/../lib/jline-0.9.94.jar:/home/cndba/zookeeper/bin/../lib/audience-annotations-0.5.0.jar:/home/cndba/zookeeper/bin/../zookeeper-3.4.13.jar:/home/cndba/zookeeper/bin/../src/java/lib/*.jar:/home/cndba/zookeeper/bin/../conf:.::/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-7.b13.el7.x86_64/lib:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-7.b13.el7.x86_64/jre/lib
2019-03-02 08:39:11,102 [myid:] - INFO [main:Environment@100] - Client environment:java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
2019-03-02 08:39:11,102 [myid:] - INFO [main:Environment@100] - Client environment:java.io.tmpdir=/tmp
2019-03-02 08:39:11,102 [myid:] - INFO [main:Environment@100] - Client environment:java.compiler=<NA>
2019-03-02 08:39:11,102 [myid:] - INFO [main:Environment@100] - Client environment:os.name=Linux
2019-03-02 08:39:11,102 [myid:] - INFO [main:Environment@100] - Client environment:os.arch=amd64
2019-03-02 08:39:11,103 [myid:] - INFO [main:Environment@100] - Client environment:os.version=3.10.0-957.el7.x86_64
2019-03-02 08:39:11,103 [myid:] - INFO [main:Environment@100] - Client environment:user.name=cndba
2019-03-02 08:39:11,103 [myid:] - INFO [main:Environment@100] - Client environment:user.home=/home/cndba
2019-03-02 08:39:11,103 [myid:] - INFO [main:Environment@100] - Client environment:user.dir=/home/cndba
2019-03-02 08:39:11,104 [myid:] - INFO [main:ZooKeeper@442] - Initiating client connection, connectString=192.168.20.81:2181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@4b85612c
Welcome to ZooKeeper!
2019-03-02 08:39:11,132 [myid:] - INFO [main-SendThread(hadoopslave1:2181):ClientCnxn$SendThread@1029] - Opening socket connection to server hadoopslave1/192.168.20.81:2181. Will not attempt to authenticate using SASL (unknown error)
JLine support is enabled
2019-03-02 08:39:11,218 [myid:] - INFO [main-SendThread(hadoopslave1:2181):ClientCnxn$SendThread@879] - Socket connection established to hadoopslave1/192.168.20.81:2181, initiating session
[zk: 192.168.20.81:2181(CONNECTING) 0] 2019-03-02 08:39:11,249 [myid:] - INFO [main-SendThread(hadoopslave1:2181):ClientCnxn$SendThread@1303] - Session establishment complete on server hadoopslave1/192.168.20.81:2181, sessionid = 0x20011e3dcbb0000, negotiated timeout = 30000
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
[zk: 192.168.20.81:2181(CONNECTED) 0] ls /
[zookeeper]
[zk: 192.168.20.81:2181(CONNECTED) 1] get /
cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x0
cversion = -1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 1
[zk: 192.168.20.81:2181(CONNECTED) 2] quit
Quitting...
2019-03-02 08:40:11,799 [myid:] - INFO [main:ZooKeeper@693] - Session: 0x20011e3dcbb0000 closed
2019-03-02 08:40:11,802 [myid:] - INFO [main-EventThread:ClientCnxn$EventThread@522] - EventThread shut down for session: 0x20011e3dcbb0000
[cndba@hadoopmaster ~]$
关于zk CLI的内容还有很多,我们这里先了解一下,另篇博客在单独进行说明。
版权声明:本文为博主原创文章,未经博主允许不得转载。
- 上一篇:Zookeeper 工作流
- 下一篇:ZooKeeper 典型应用场景