zookeeper 安装

Zookeeper 安装及配置(Mac)

Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。

Zookeeper 的安装

1
下载地址:http://www.apache.org/dyn/closer.cgi/zookeeper

首先从官网下载ZooKeeper压缩包,然后解压下载得到的ZooKeeper压缩包,发现有“bin,conf,lib”等目录。“bin目录”中存放有运行脚本;“conf目录”中存放有配置文件;“lib目录”中存放有运行所需要第三方库。
解压文件:

1
tar zxvf zookeeper-3.4.8.tar.gz

Zookeeper 的配置

伪分布式部署

  1. 在“conf”目录下,新建一个名为“zoo.cfg”的文件,准备部署3个节点,其中内容如下:
1
2
3
4
5
6
7
8
9
tickTime=2000
initLimit=5
syncLimit=2
dataDir=/Users/nali/program/zookeeper-3.4.8_1/data
dataLogDir=/Users/nali/program/zookeeper-3.4.8_1/logs
clientPort=2181(不同节点注意不同)
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890

参数说明:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#tickTime: 客户端和服务端或者服务端多个节点之间维持心跳的时间间隔,单位毫秒。
#initLimit:zookeeper集群中的包含多台server, 其中一台为leader, 集群中其余的server为follower.
initLimit参数配置初始化连接时, follower和leader之间的最长心跳时间. 此时该参数设置为5, 说明时间限制为5 倍tickTime, 即5*2000=10000ms=10s.
#syncLimit:该参数配置leader和follower之间发送消息, 请求和应答的最大时间长度. 此时该参数设置为2, 说明时间限制为2倍tickTime, 即4000ms.
#dataDir: 数据文件存放目录,可以是任意目录
#dataLogDir: 用来重做数据的事务日志文件存放目录.
#clientPort: 监听client连接的端口号.
#server.1,server.2,server.3: 表示节点编号,后边用冒号隔开的三个数字,分别表示节点的ip,交换数据的端口号,某个节点挂掉之后专门用来选举的端口号。
注:initLimit,syncLimit在单节点部署模式下,不需要配置。
  1. 在dataDir目录下创建myid文件,写入该节点的编号 1 。这样一个节点就配置完成了。
  2. 复制 zookeeper-3.4.8-1 到 zookeeper-3.4.8-2和 zookeeper-3.4.8-3,要修改的地方是 zoo.cfg里的 dataDir,dataLogDir,clientPort。还有需要在自己的data目录下新建myid文件,写入自己的编号。
myid Data目录 Client Server Leader 配置文件
1 /zookeeper-3.4.8_1/data 2181 2888 3888 z1.cfg
2 /zookeeper-3.4.8_2/data 2182 2889 3889 z2.cfg
3 /zookeeper-3.4.8_3/data 2183 2890 3890 z3.cfg
  1. 启动和测试

分别进入三个节点的bin目录,启动zookeeper,运行./zkServer.sh start。

注:前边节点启动的时候,会抛出一些错误,可忽略。这是因为另外的节点没启动,导致的通信异常。

1
2
3
4
5
nalideMacBook-Pro-4:program nali$ cd zookeeper-3.4.8_3/bin/
nalideMacBook-Pro-4:bin nali$ ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /Users/nali/program/zookeeper-3.4.8_3/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

可以用自带的基于telnet的客户端测试一下,看看是否启动成功。随便进入一个节点的bin目录,比如节点0

./zkCli.sh -server 127.0.0.1:2180,随便输入一个字符,他会跳出help界面。说明服务端启动成功。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
nalideMacBook-Pro-4:bin nali$ ./zkCli.sh -server 127.0.0.1:2181
Connecting to 127.0.0.1:2181
2016-08-25 21:02:28,712 [myid:] - INFO [main:Environment@100] - Client environment:zookeeper.version=3.4.8--1, built on 02/06/2016 03:18 GMT
2016-08-25 21:02:28,715 [myid:] - INFO [main:Environment@100] - Client environment:host.name=192.168.120.222
2016-08-25 21:02:28,715 [myid:] - INFO [main:Environment@100] - Client environment:java.version=1.8.0_91
2016-08-25 21:02:28,717 [myid:] - INFO [main:Environment@100] - Client environment:java.vendor=Oracle Corporation
2016-08-25 21:02:28,717 [myid:] - INFO [main:Environment@100] - Client environment:java.home=/Library/Java/JavaVirtualMachines/jdk1.8.0_91.jdk/Contents/Home/jre
2016-08-25 21:02:28,717 [myid:] - INFO [main:Environment@100] - Client environment:java.class.path=/Users/nali/program/zookeeper-3.4.8_1/bin/../build/classes:/Users/nali/program/zookeeper-3.4.8_1/bin/../build/lib/*.jar:/Users/nali/program/zookeeper-3.4.8_1/bin/../lib/slf4j-log4j12-1.6.1.jar:/Users/nali/program/zookeeper-3.4.8_1/bin/../lib/slf4j-api-1.6.1.jar:/Users/nali/program/zookeeper-3.4.8_1/bin/../lib/netty-3.7.0.Final.jar:/Users/nali/program/zookeeper-3.4.8_1/bin/../lib/log4j-1.2.16.jar:/Users/nali/program/zookeeper-3.4.8_1/bin/../lib/jline-0.9.94.jar:/Users/nali/program/zookeeper-3.4.8_1/bin/../zookeeper-3.4.8.jar:/Users/nali/program/zookeeper-3.4.8_1/bin/../src/java/lib/*.jar:/Users/nali/program/zookeeper-3.4.8_1/bin/../conf:
2016-08-25 21:02:28,718 [myid:] - INFO [main:Environment@100] - Client environment:java.library.path=/Users/nali/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.
2016-08-25 21:02:28,718 [myid:] - INFO [main:Environment@100] - Client environment:java.io.tmpdir=/var/folders/jr/rgnrtr4n13n3d6tbwsch9_qr0000gn/T/
2016-08-25 21:02:28,718 [myid:] - INFO [main:Environment@100] - Client environment:java.compiler=<NA>
2016-08-25 21:02:28,718 [myid:] - INFO [main:Environment@100] - Client environment:os.name=Mac OS X
2016-08-25 21:02:28,719 [myid:] - INFO [main:Environment@100] - Client environment:os.arch=x86_64
2016-08-25 21:02:28,719 [myid:] - INFO [main:Environment@100] - Client environment:os.version=10.11.4
2016-08-25 21:02:28,719 [myid:] - INFO [main:Environment@100] - Client environment:user.name=nali
2016-08-25 21:02:28,719 [myid:] - INFO [main:Environment@100] - Client environment:user.home=/Users/nali
2016-08-25 21:02:28,719 [myid:] - INFO [main:Environment@100] - Client environment:user.dir=/Users/nali/program/zookeeper-3.4.8_1/bin
2016-08-25 21:02:28,721 [myid:] - INFO [main:ZooKeeper@438] - Initiating client connection, connectString=127.0.0.1:2181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@531d72ca
Welcome to ZooKeeper!
  1. Zookeeper常用命令
    • ZooKeeper服务端命令:
      • 启动ZK服务: bin/zkServer.sh start
      • 查看ZK服务状态: bin/zkServer.sh status
      • 停止ZK服务: bin/zkServer.sh stop
      • 重启ZK服务: bin/zkServer.sh restart
    • zk客户端命令
      • 显示根目录下、文件: ls / 使用 ls 命令来查看当前 ZooKeeper 中所包含的内容
      • 显示根目录下、文件: ls2 / 查看当前节点数据并能看到更新次数等数据
      • 创建文件,并设置初始内容: create /zk “test” 创建一个新的 znode节点“ zk ”以及与它关联的字符
      • 获取文件内容: get /zk 确认 znode 是否包含我们所创建的字符串
      • 修改文件内容: set /zk “zkbak” 对 zk 所关联的字符串进行设置
      • 删除文件: delete /zk 将刚才创建的 znode 删除
      • 退出客户端: quit
      • 帮助命令: help

总结

zookeeper仅仅是维护了一个分布式的树形目录。如下图。它通过fast paxos算法保证多个节点上znode的数据一致性。一套zookeeper可以同时给多个应用程序使用,只需要隔离好各自的path~。在生产环境中,多个程序,比如hadoop,hbase,strom共用一套zookeeper也是常事。结构如下图。

img

热评文章