一、了解 Zookeeper

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。Zookeeper维护一个类似文件系统的数据结构。

Zab协议有两种模式:

  • 恢复模式(选主)
  • 广播模式(同步)

当服务启动或者在领导者崩溃后,Zab就进入了恢复模式。当领导者被选举出来,且大多数Server完成了和 leader的状态同步以后,恢复模式就结束了。状态同步保证了leader和Server具有相同的系统状态。

需要在Hadoop集群上面搭建,可以选择搭建单机模式和集群模式

二、下载 Zookeeper

下载链接:http://mirrors.hust.edu.cn/apache/zookeeper/

注:选择与Hadoop兼容版本

三、安装

解压:tar -zxvf

[root@master dev]# tar -zxvf apache-zookeeper-3.5.8-bin.tar.gz 

解压之后将文件名更改为Zookeeper

[root@master dev]# mv apache-zookeeper-3.5.8-bin.tar.gz zookeeper

在home目录下创建apps文件夹将zookeeper文件夹放入

[root@master dev]# mkdir -p /home/apps
[root@master dev]# mv zookeeper /home/apps/
[root@master dev]# ll
total 8
drwxr-xr-x. 9 centos centos 4096 Dec 19  2017 sqoop
drwxr-xr-x. 8 root   root   4096 Jan 15 11:17 zookeeper

zookeeper 具有单机模式和集群模式

单机模式较简单,是指只部署一个zk进程,客户端直接与该zk进程进行通信。
在开发测试环境下,通过来说没有较多的物理资源,因此我们常使用单机模式。当然在单台物理机上也可以部署集群模式,但这会增加单台物理机的资源消耗。故在开发环境中,我们一般使用单机模式。
但是要注意,生产环境下不可用单机模式,这是由于无论从系统可靠性还是读写性能,单机模式都不能满足生产的需求。

1、单机模式

新建data和logs目录(data目录用来存放数据库快照,logs目录用来存放日志文件)

[root@master dev]# mkdir -p /home/apps/zookeeper/data
[root@master dev]# mkdir -p /home/apps/zookeeper/logs

找到zookeeper目录下的 conf 配置文件夹

[root@master dev]# cd /home/apps/zookeeper/conf/
[root@master conf]# ll
total 16
-rw-r--r--. 1 root root  535 May  4  2020 configuration.xsl
-rw-r--r--. 1 root root 2712 May  4  2020 log4j.properties
-rw-r--r--. 1 root root  922 May  4  2020 zoo_sample.cfg
-rw-r--r--. 1 root root  152 Jan 15 13:05 zoo.cfg.dynamic.next
[root@master dev]# 

重命名 zoo_sample.cfg 为zoo.cfg

[root@master conf]# mv zoo_sample.cfg zoo.cfg

用vi命令打开zoo.cfg文件

[root@master conf]# vi zoo.cfg
# The number of milliseconds of each tick
tickTime=2000  #Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,单位为毫秒
# The number of ticks that the initial
# synchronization phase can take
initLimit=10 #表示允许从服务器连接到leader并完成数据同步的时间,总的时间长度就是 initLimit * tickTime 秒
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5 #配置 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 syncLimit * tickTime 秒 
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/home/apps/zookeeper/data #Zookeeper 保存数据的数据库快照的位置
dataLogDir=/home/apps/zookeeper/logs #事务日志日志路径,若没提供的话则用dataDir
# the port at which the clients will connect
clientPort=2181 #Zookeeper服务器监听的端口,以接受客户端的访问请求
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60 # 限制连接到ZK上的客户端数量,并且限制并发连接数量,值为0表示不做任何限制
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3 # 自动清理日志,该参数设置保留多少个快照文件和对应的事务日志文件,默认为3,如果小于3则自动调整为3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1

配置完之后就可以直接启动Zookeeper。

[root@master conf]# cd /home/apps/zookeeper/bin
[root@master bin]# ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /home/apps/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@master bin]#

启动成功

可以使用 status 命令查看zookeeper状态

[root@master bin]# ./zkServer.sh status

2、集群模式

与单机模式同样的方法,先新建data和logs目录,更改 zoo_sample.cfg文件名为zoo.cfg

用vi命令打开zoo.cfg文件

[root@master conf]# vi zoo.cfg
# The number of milliseconds of each tick
tickTime=2000  #Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,单位为毫秒
# The number of ticks that the initial
# synchronization phase can take
initLimit=10 #表示允许从服务器连接到leader并完成数据同步的时间,总的时间长度就是 initLimit * tickTime 秒
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5 #配置 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 syncLimit * tickTime 秒 
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/home/apps/zookeeper/data #Zookeeper 保存数据的数据库快照的位置
dataLogDir=/home/apps/zookeeper/logs #事务日志日志路径,若没提供的话则用dataDir
# the port at which the clients will connect
clientPort=2181 #Zookeeper服务器监听的端口,以接受客户端的访问请求
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60 # 限制连接到ZK上的客户端数量,并且限制并发连接数量,值为0表示不做任何限制
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3 # 自动清理日志,该参数设置保留多少个快照文件和对应的事务日志文件,默认为3,如果小于3则自动调整为3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
# server.n n是一个数字,表示这个是第几号服务器,“=”后面可跟主机地址或者IP地址,2888为集群中从服务器(follower)连接到主服务器(leader)的端口,为主服务器(leader)使用;3888为进行选举(leader)的时使用的端口
server.1=192.168.1.121:2888:3888
server.2=192.168.1.122:2888:3888
server.3=192.168.1.123:2888:3888

添加代码:

server.1=192.168.1.121:2888:3888
server.2=192.168.1.122:2888:3888
server.3=192.168.1.123:2888:3888

在data目录下面新建一个myid文件,将刚才添加代码里面server.n的n写入myid文件里面,只写入数字。

[root@master bin]# vi /home/apps/zookeeper/data/myid
1
~                                                                                                                                                      
~                                                                                                                                                      
~                                                                                                                                                      
~                                                                                                                                                      
~                                                                                                                                                      
~                                                                                                                                                      
~                                                                                                                                                      
~                                                                                                                                                      
~                                                                                                                                                      
~                                                                                                                              
~                                                                                                                                                      
"myid" [New File]                                                                                                                                               

将配置好了的zookeeper文件传给另外两台服务器

先在另外两台服务器上面创建目录

slave1:

[root@slave1 ~]# mkdir -p /home/apps/zookeeper

slave2:

[root@slave2 ~]# mkdir -p /home/apps/zookeeper

用scp命令进行文件传送

注:先设置SSL免密登录

[root@master ~]#scp -r /home/apps/zookeeper root@slave1:/home/apps/
[root@master ~]#scp -r /home/apps/zookeeper root@slave2:/home/apps/

传输完成之后在slave1和slave2上面更改myid文件,将他里面的数字改为slave1与slave2对应的IP地址(上面更改的zoo.cfg文件里面添加的服务器主机名或者IP是一 一对应的)。

slave1:

[root@slave1 ~]#vi /home/apps/zookeeper/data/myid
2
~                                                                                                                                                      
~                                                                                                                                                      
~                                                                                                                                                      
~                                                                                                                                                      
~                                                                                                                                                      
~                                                                                                                                                      
~                                                                                                                                                      
~                                                                                                                                                      
~                                                                                                                                                      
~                                                                                                                              
~                                                                                                                                                      
data/myid" 1L, 2C  

slave2:

[root@slave2 ~]# vi /home/apps/zookeeper/data/myid
3
~                                                                                                                                                      
~                                                                                                                                                      
~                                                                                                                                                      
~                                                                                                                                                      
~                                                                                                                                                      
~                                                                                                                                                      
~                                                                                                                                                      
~                                                                                                                                                      
~                                                                                                                                                      
~                                                                                                                              
~                                                                                                                                                      
data/myid" 1L, 2C   

关闭防火墙
关闭防火墙
关闭防火墙
重要的事说三遍,防火墙很重要,非常重要,如果没有关闭防火墙,很有可能导致启动不成功。

[root@slave2 ~]# systemctl stop firewalld
[root@slave2 ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:firewalld(1)

首先启动master主服务器上面的zookeeper,其次slave1和slave2

master:

[root@master ~]# cd /home/apps/zookeeper/bin
[root@master bin]# ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /home/apps/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

slave1:

[root@master ~]# cd /home/apps/zookeeper/bin
[root@master bin]# ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /home/apps/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

slave2:

[root@master ~]# cd /home/apps/zookeeper/bin
[root@master bin]# ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /home/apps/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

在master上面查看是否运行成功
master:

[root@master bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/apps/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: leader

启动成功

结语:大数据Hadoop笔记 Zookeeper安装与配置.

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐