ZooKeeper系列一:史上的最强安装与配置详解
本文摘选自互联网, 经整理后,应该是史上最强入门篇之一了 :)
ZooKeeper的安装模式分为三种,分别为:单机模式(stand-alone)、集群模式和集群伪分布模式。
ZooKeeper 单机模式的安装相对比较简单,如果第一次接触ZooKeeper的话,建议安装ZooKeeper单机模式或者集群伪分布模式。
ZooKeeper也支持windows, 安装步骤大致相同, 解压完并配置即可运行, 安装包解压后bin目录里, 你会发现有windows和linux的启动脚本,
一:安装环境要求:
1:需要 JAVA6 以上的版本,可以从 SUN 官网上下载,并对JAVA 环境变量进行设置,cmd或shell 里 java --version需有内容出现
2:ZooKeeper 安装
首先,从Apache官方网站下载一个ZooKeeper 的最近稳定版本。
作为国内用户来说,选择最近的的源文件服务器所在地,能够节省不少的时间。
http://labs.renren.com/apache-mirror//hadoop/zookeeper/
linux系统,为了今后操作的方便,我们需要对 ZooKeeper 的环境变量进行配置,
方法如下,在 /etc/profile 文件中加入如下的内容:
#Set ZooKeeper Enviroment export ZOOKEEPER_HOME=/root/hadoop-0.20.2/zookeeper-3.3.1 export PATH=$PATH:$ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/conf
二:ZooKeeper不同模式的相关配置
1)单机模式
ZooKeeper 服务器包含在单个 JAR 文件中,安装此服务需要用户创建一个配置文档,并对其进行设置。我们在 ZooKeeper-*.*.* 目录(我们以当前 ZooKeeper 的最新版 3.3.1 为例,故此下面的“ ZooKeeper-*.*.* ”都将写为“ ZooKeeper-3.3.1” )的 conf 文件夹下创建一个 zoo.cfg 文件,它包含如下的内容:
tickTime=2000 dataDir=/var/zookeeper/data dataLogDir = /var/zookeeper/log clientPort=2181
在这个文件中,我们需要指定 dataDir 的值,它指向了一个目录,这个目录在开始的时候需要为空。下面是每个参数的含义:
- tickTime:这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。
- dataDir:顾名思义就是 Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。
- dataLogDir:顾名思义就是 Zookeeper 保存日志文件的目录
- clientPort:这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。
使用单机模式时用户需要注意:这种配置方式下没有 ZooKeeper 副本,所以如果 ZooKeeper 服务器出现故障, ZooKeeper 服务将会停止。
以下代码清单 A 是我们的根据自身情况所设置的 zookeeper 配置文档: zoo.cfg
单机模式配置代码清单 A : zoo.cfg
tickTime=2000 dataDir=/var/zookeeper/data dataLogDir=/var/zookeeper/log
clientPort=2181
2)集群模式
为了获得可靠的 ZooKeeper 服务,用户应该在一个集群上部署 ZooKeeper 。只要集群上大多数的ZooKeeper 服务启动了,那么总的 ZooKeeper 服务将是可用的。另外,最好使用奇数台机器。 如果 zookeeper拥有 5 台机器,那么它就能处理 2 台机器的故障了。
之后的操作和单机模式的安装类似,我们同样需要对 JAVA 环境进行设置,下载最新的 ZooKeeper 稳定版本并配置相应的环境变量。不同之处在于每台机器上 conf/zoo.cfg 。
我们在拥有三台机器的 Hadoop 集群上测试使用 ZooKeeper 服务,下面代码清单 B 是我们根据自身情况所设置的 ZooKeeper 配置文档:
代码清单 B : zoo.cfg
tickTime=2000 dataDir=/var/zookeeper/data
dataLogDir=/var/zookeeper/log
# the port at which the clients will connect
clientPort=2181
initLimit=5
syncLimit=2
server.1=IP1:2887:3887
server.2=IP2:2888:3888
server.3=IP3:2889:3889
server.A=B:C:D (server.id=host:port:port)
A是一个数字,表示这个是第几号服务器,B是这个服务器的ip地址
C第一个端口用来集群成员的信息交换,表示的是这个服务器与集群中的Leader服务器交换信息的端口
D是在leader挂掉时专门用来进行选举leader所用
指示了不同的 ZooKeeper 服务器的自身标识,作为集群的一部分的机器应该知道 ensemble 中的其它机器。用户可以从“ server.id=host:port:port. ”中读取相关的信息。 在服务器的 data( dataDir 参数所指定的目录)目录下创建一个文件名为 myid 的文件,这个文件中仅含有一行的内容,指定的是自身的 id 值。比如,服务器“ 1 ”应该在 myid 文件中写入“ 1 ”。这个 id 值必须是 ensemble 中唯一的,且大小在 1 到 255 之间
清单中的 IP 分别对应的配置分布式 ZooKeeper 的 IP 地址。当然,也可以通过机器名访问 zookeeper ,但是需要在ubuntu 的 hosts 环境中进行设置。读者可以查阅 Ubuntu 以及 Linux 的相关资料进行设置。
3)集群伪分布
简单来说,集群伪分布模式就是在单机下模拟集群的ZooKeeper服务, 即单机起多个实例
那么,如何对配置 ZooKeeper 的集群伪分布模式呢?其实很简单,在 zookeeper 配置文档中, clientPort参数用来设置客户端连接 zookeeper 的端口。 server.1=IP1:2887:3887 中, IP1 指示的是组成 ZooKeeper 服务的机器 IP 地址, 2887 为用来进行 leader 选举的端口, 3887 为组成 ZooKeeper 服务的机器之间通信的端口。集群伪分布模式我们使用每个配置文档模拟一台机器,也就是说,需要在单台机器上运行多个 zookeeper 实例。但是,我们必须要保证各个配置文档的 clientPort 不能冲突。
下面是我们所配置的集群伪分布模式,通过 zoo1.cfg , zoo2.cfg , zoo3.cfg 模拟了三台机器的 ZooKeeper集群,
从下面三个代码清单中可以看到,除了 clientPort 不同之外, dataDir、dataLogDir 也不同。另外,不要忘记在 dataDir 所对应的目录中创建 myid 文件来指定对应的 zookeeper 服务器实例
代码清单C :
zoo1.cfg :
tickTime=2000
dataDir=/var/zookeeper/data/d_1
dataLogDir=/var/zookeeper/log/d_1
clientPort=2181
initLimit=5 syncLimit=2
server.1=localhost:2887:3887
server.2=localhost:2888:3888
server.3=localhost:2889:3889
zoo2.cfg :
tickTime=2000
dataDir=/var/zookeeper/data/d_2
dataLogDir=/var/zookeeper/log/d_2
clientPort=2182
initLimit=10
syncLimit=5
server.1=localhost:2887:3887
server.2=localhost:2888:3888
server.3=localhost:2889:3889
zoo3.cfg :
tickTime=2000
dataDir=/var/zookeeper/data/d_3
dataLogDir=/var/zookeeper/log/d_3
clientPort=2183
initLimit=10
syncLimit=5
server.1=localhost:2887:3887 server.2=localhost:2888:3888 server.3=localhost:2889:3889
如何启用多实例
windows 单机启用多实例:
修改 zkServer.cmd 文件在里面加入
set ZOOCFG=..\conf\zoo1.cfg 这行,另存为 zkServer-1.cmd
set ZOOCFG=..\conf\zoo2.cfg 这行,另存为 zkServer-2.cmd
set ZOOCFG=..\conf\zoo3.cfg 这行,另存为 zkServer-3.cmd... 再分别运行
linux 单机启用多实例:
方法一:对zookeeper整个安装目录, 复制出3个副本并做相关配置, 有点low但是不容易头晕,详细请见:https://www.cnblogs.com/likemebee/p/7891300.html
方法二:
./zkServer.sh start ../conf/zoo1.cfg
./zkServer.sh start ../conf/zoo2.cfg
./zkServer.sh start ../conf/zoo3.cfg
常用zkServer.sh脚本,如下:
- 启动ZK服务: sh bin/zkServer.sh start
- 查看ZK服务状态: sh bin/zkServer.sh status
- 停止ZK服务: sh bin/zkServer.sh stop
- 重启ZK服务: sh bin/zkServer.sh restart