# 如何安装Zookeeper的单机模式及集群模式

# 1 前言

Zookeeper是很常用的中间件,可用于配置中心、分布式锁、集群管理等。本文介绍如何安装。

# 2 单机模式standalone

# 2.1 安装启动

到官网下载安装包,官网会根据你的网络匹配最好的下载地址,目前最新稳定版本为3.6.1

$ curl https://mirror.its.dal.ca/apache/zookeeper/zookeeper-3.6.1/apache-zookeeper-3.6.1-bin.tar.gz -o apache-zookeeper-3.6.1-bin.tar.gz

解压:

$ tar xvf apache-zookeeper-3.6.1-bin.tar.gz 

配置文件准备,官方已经提供了一个配置示例zoo_sample.cfg,直接将它复制一份即可:

$ cd apache-zookeeper-3.6.1-bin
$ cp conf/zoo_sample.cfg conf/zoo.cfg

启动服务:

$ bin/zkServer.sh start
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: ../conf/zoo.cfg
Starting zookeeper ... STARTED

检查服务状态:

$ bin/zkServer.sh status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: ../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: standalone

会有提示使用的是单机模式。

# 2.2 客户端连接测试

通过命令可连接:bin/zkCli.sh -server localhost:2181

$ bin/zkCli.sh
/usr/bin/java
Connecting to localhost:2181
2020-08-30 16:52:27,509 [myid:] - INFO  [main:Environment@98] - Client environment:zookeeper.version=3.6.1--104dcb3e3fb464b30c5186d229e00af9f332524b, built on 04/21/2020 15:01 GMT
2020-08-30 16:52:27,512 [myid:] - INFO  [main:Environment@98] - Client environment:host.name=localhost
2020-08-30 16:52:27,512 [myid:] - INFO  [main:Environment@98] - Client environment:java.version=1.8.0_212
2020-08-30 16:52:27,513 [myid:] - INFO  [main:Environment@98] - Client environment:java.vendor=Oracle Corporation
2020-08-30 16:52:27,513 [myid:] - INFO  [main:Environment@98] - Client 

Welcome to ZooKeeper!

简单操作:

# 查看根目录
[zk: localhost:2181(CONNECTED) 1] ls /
[zookeeper]
# 查看 /zookeeper
[zk: localhost:2181(CONNECTED) 2] ls /zookeeper
[config, quota]
# 创建 /pkslow
[zk: localhost:2181(CONNECTED) 6] create /pkslow
Created /pkslow
# 查看根目录,/pkslow已经成功创建
[zk: localhost:2181(CONNECTED) 9] ls /
[pkslow, zookeeper]
# 在 /pkslow下创建节点website,数据为www.pkslow.com
[zk: localhost:2181(CONNECTED) 12] create /pkslow/website www.pkslow.com
Created /pkslow/website
# 获取上面创建的节点内容
[zk: localhost:2181(CONNECTED) 13] get /pkslow/website
www.pkslow.com
# 创建 /pkslow/age
[zk: localhost:2181(CONNECTED) 14] create /pkslow/age 1
Created /pkslow/age
# 查看 /pkslow/age
[zk: localhost:2181(CONNECTED) 15] get /pkslow/age
1
# 修改 /pkslow/age
[zk: localhost:2181(CONNECTED) 16] set /pkslow/age 2
[zk: localhost:2181(CONNECTED) 17] get /pkslow/age
2
# 删除 /pkslow/age
[zk: localhost:2181(CONNECTED) 18] delete /pkslow/age
[zk: localhost:2181(CONNECTED) 19] get /pkslow/age
org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /pkslow/age
[zk: localhost:2181(CONNECTED) 20] 

# 2.3 配置文件

我们使用的是官方提供的配置文件,内容及注释如下:

# 心跳间隔,单元为ms,2000表示2秒,每2秒发送一次心跳。
tickTime=2000
# 初始化连接最长忍受时长,10表示tickTime*10=20秒。
initLimit=10
# 请求和应答时间长度,5表示tickTime*5=10秒。
syncLimit=5
# 保存数据的地方,实际不要使用/tmp
dataDir=/tmp/zookeeper
# 客户端连接端口
clientPort=2181

# 3 集群模式

搭建集群很简单,就是准备三个配置文件,三个data目录就行了。

# 3.1 配置文件

节点1的配置文件如下:

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper-1
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

跟之前单机差不多,就是要注意dataDir要修改,clientPort保证唯一性。

最后三行为:

server.{服务ID}={IP}:{交换信息端口}:{选举通信端口}

依次准备三个配置文件即可:zoo-1.cfgzoo-2.cfgzoo-3.cfg

zoo-2.cfg不同点:

dataDir=/tmp/zookeeper-2
clientPort=2182

zoo-3.cfg不同点:

dataDir=/tmp/zookeeper-3
clientPort=2183

# 3.2 data目录

根据配置,准备三个dataDir,则在该data目录下创建一个文件myid,内容分别为1,2,3。

/tmp$ mkdir zookeeper-1
/tmp$ mkdir zookeeper-2
/tmp$ mkdir zookeeper-3

/tmp$ vi zookeeper-1/myid
/tmp$ vi zookeeper-2/myid
/tmp$ vi zookeeper-3/myid

/tmp$ cat zookeeper-1/myid 
1
/tmp$ cat zookeeper-2/myid 
2
/tmp$ cat zookeeper-3/myid 
3

# 3.3 启动并查看状态

通过指定配置文件来启动服务,并查看状态:

$ bin/zkServer.sh start conf/zoo-1.cfg 
Using config: conf/zoo-1.cfg
Starting zookeeper ... STARTED
$ bin/zkServer.sh start conf/zoo-2.cfg 
Using config: conf/zoo-2.cfg
Starting zookeeper ... STARTED
$ bin/zkServer.sh start conf/zoo-3.cfg 
Using config: conf/zoo-3.cfg
Starting zookeeper ... STARTED

$ bin/zkServer.sh status conf/zoo-1.cfg 
Client port found: 2181. Client address: localhost.
Mode: follower
$ bin/zkServer.sh status conf/zoo-2.cfg 
Client port found: 2182. Client address: localhost.
Mode: follower
$ bin/zkServer.sh status conf/zoo-3.cfg 
Client port found: 2183. Client address: localhost.
Mode: leader

可以发现,节点3为leader,另外两个是follower

# 3.4 客户端连接

我们通过下面命令连接:

$ bin/zkCli.sh -server localhost:2181

并创建数据:

[zk: localhost:2181(CONNECTED) 2] create /pkslow
Created /pkslow
[zk: localhost:2181(CONNECTED) 3] create /pkslow/website www.pkslow.com
Created /pkslow/website

再通过下面连接:

$ bin/zkCli.sh -server localhost:2182
# 或者
$ bin/zkCli.sh -server localhost:2183

查看数据:

[zk: localhost:2182(CONNECTED) 0] get /pkslow/website
www.pkslow.com
# 或者
[zk: localhost:2183(CONNECTED) 0] get /pkslow/website
www.pkslow.com

可以发现,Zookeeper可每个客户端都提供了一致性的视图。

# 4 总结

本文介绍如何安装Zookeeper,包括单机模式和集群模式。虽然集群模式也是在一台机器上安装的,但实际在多台机器上安装也是类似的,只不过是改一下IP和对应目录配置。


参考文档:

漫画:什么是ZooKeeper? (opens new window)

Zookeeper入门看这篇就够了 (opens new window)

上次更新: 2023/8/18 23:39:36