Mac或Linux 下搭建单机Zookeeper集群

困而学,学而知

最近在学习Zookeeper, 既然要学习Zookeeper,首先要需要搭建一个Zookeeper的环境.这里只讲怎么搭建,不会具体说具体原理.

我最开始搭建的是只有一个实例的Zookeeper服务. 然后开始搭建一个单机伪集群(因为我只有一台主机). 在搭建只有一个实例的Zookeeper实例的服务的时候,我是使用docker来搭建的. 本来也是想用docker来搭建这个伪集群的,但是我尝试了一天, 始终都报错,并且都没有找到原因…(也是心累)算了,还是用最简单的方式来搭建了单机伪集群.

搭建只有一个实例的Zookeeper服务是很简单的.

一. 使用docker搭建Zookeeper服务

1. 在docker hub上找到zookeeper的官方镜像, 并拉取官方镜像.

在这里插入图片描述

docker pull zookeeper

之前拉取过镜像, 就截图镜像列表啦.
[外链图片转存失败(img-i1SfskpM-1569250592536)(media/15619963902933/15619987090607.jpg)]

2. 启动Zookeeper镜像, 将容器的2181映射到主机的2181端口

docker run --privileged=true -d --name myzk --publish 2181:2181 -d zookeeper

[外链图片转存失败(img-wHBCMRcW-1569250592538)(media/15619963902933/15619991317219.jpg)]

3. 来查看启动日志

> docker logs -f myzk
--------------------------------
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
2019-07-01 16:38:15,150 [myid:] - INFO  [main:QuorumPeerConfig@133] - Reading configuration from: /conf/zoo.cfg
...
2019-07-01 16:38:15,365 [myid:1] - INFO  [main:NIOServerCnxnFactory@686] - binding to port /0.0.0.0:2181
2019-07-01 16:38:15,387 [myid:1] - INFO  [main:ZKDatabase@117] - zookeeper.snapshotSizeFactor = 0.33
2019-07-01 16:38:15,391 [myid:1] - INFO  [main:FileTxnSnapLog@372] - Snapshotting: 0x0 to /data/version-2/snapshot.0
2019-07-01 16:38:15,396 [myid:1] - INFO  [main:FileTxnSnapLog@372] - Snapshotting: 0x0 to /data/version-2/snapshot.0
2019-07-01 16:38:15,418 [myid:1] - INFO  [main:ContainerManager@64] - Using checkIntervalMs=60000 maxPerMinute=10000

4. Zookeeper是有一个客户端的, 我们可以使用--link来链接到容器的客户端

docker run -it --rm --link myzk:zookeeper zookeeper zkCli.sh -server zookeeper

至此, 我使用docker搭建了一个只有一个实例的Zookeeper服务. 在这个过程中没有报错十分顺利. 想着一鼓作气使用docker来搭建一个伪集群(友链: 使用 Docker 一步搞定 ZooKeeper 集群的搭建),但是总是事与愿违, 搞了一天都没有搞出来, 气煞我也,换成了最简单的方式来搭建集群.

二. 使用官方包来搭建Zookeeper服务

首先当然是要从官网下载包啦.Download

这里我想说一句,我本来是下载最新版本3.5.5的,但是运行的时候居然报错, 后面会讲讲报错情况.

  1. 将zookeeper-3.4.14.tar.gz解压到文件夹(我的是/usr/local/apache/zookeeper)
  2. 进入解压目录下的conf/文件夹, 使用cp zoo_sample.cfg zoo.cfg, 创建一个zoo.cfg配置文件.因为Zookeeper的默认配置文件就是这个zoo.cfg这个文件
  3. 后退进入解压目录下的bin/文件夹, 使用sh zkServer.sh start启动Zookeeper文件.
  4. 继续在bin/目录下,可以中sh zkCli.sh 使用客户端
  5. 最后使用结束后, 用 sh zkServer.sh stop关闭Zookeeper.

三. 搭建Zookeeper单机伪集群

因为本人只有一台主机, 想想要搭建一个最少三台的Zookeeper集群,还是算了吧.但条条大路通罗马, 事情总是有解决办法的. 我的解决的办法就是在一个单机上通过不同的端口搭建一个伪集群.

1. 创建文件夹

为了搭建一个伪集群, 我们现在本地目录下创建三个目录. 我的是在/usr/local/apache/zookeeper
我们在/usr/local/apache/zookeeper这个目录下创建一个tmp的目录用于保存Zookeeper的data和log.

## /usr/local/apache/zookeeper
mkdir tmp
cd tmp
## 在tmp目录下创建`zk1/data`, `zk1/log`, `zk2/data`, `zk2/log`, `zk3/data`, `zk3/log`
mkdir zk1 zk2 zk3
mkdir zk1/data zk1/log zk2/data zk2/log zk3/data zk3/log

[外链图片转存失败(img-tXpssCJ2-1569250592540)(media/15619963902933/15620006502800.jpg)]

Mac或Linux 下搭建单机Zookeeper集群_第1张图片

Mac或Linux 下搭建单机Zookeeper集群_第2张图片

2. 解压zookeeper-3.4.14.tar.gz

进入到存有zookeeper-3.4.14.tar.gz的目录, 执行下面的指令

wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz
tar -xvf zookeeper-3.4.14.tar.gz -C /usr/local/apache/zookeeper/
cd /usr/local/apache/zookeeper/
cp -rf zookeeper-3.4.14 zookeeper-1
cp -rf zookeeper-3.4.14 zookeeper-2
cp -rf zookeeper-3.4.14 zookeeper-3
rm -rf zookeeper-3.4.14

Mac或Linux 下搭建单机Zookeeper集群_第3张图片

3. 配置zoo.cfg

进入上面图片中的conf/目录下

cp zoo_sample.cfg zoo.cfg

Mac或Linux 下搭建单机Zookeeper集群_第4张图片
将下面的内容复制到zoo.cfg中

3.1. zookeeper-1下的zoo.cfg

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/apache/zookeeper/tmp/zk1/data
dataLogDir=/usr/local/apache/zookeeper/tmp/zk1/log
clientPort=2181
server.1=localhost:2287:3387
server.2=localhost:2288:3388
server.3=localhost:2289:3389

3.2. zookeeper-2下的zoo.cfg

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/apache/zookeeper/tmp/zk2/data
dataLogDir=/usr/local/apache/zookeeper/tmp/zk2/log
clientPort=2182
server.1=localhost:2287:3387
server.2=localhost:2288:3388
server.3=localhost:2289:3389

3.3. zookeeper-3下的zoo.cfg

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/apache/zookeeper/tmp/zk3/data
dataLogDir=/usr/local/apache/zookeeper/tmp/zk3/log
clientPort=2183
server.1=localhost:2287:3387
server.2=localhost:2288:3388
server.3=localhost:2289:3389

4. 创建myid文件

这个配置很重要, 要配置集群的话,就必须要配置. 在zoo.cfg中配置了dataDir.在dataDir的目录下, 创建一个myid的文件, 文件内容为集群id. 比如zookeeper-1下的myid内容就是1, zookeeper-2下的myid内容就是2, zookeeper-3下的myid内容就是3.
[外链图片转存失败(img-PaOzLVRf-1569250592544)(media/15619963902933/15620292495351.jpg)]

5. 启动集群

现在配置好了,直接启动就好了.

/usr/local/apache/zookeeper/zookeeper-1/bin/zkServer.sh start
/usr/local/apache/zookeeper/zookeeper-2/bin/zkServer.sh start
/usr/local/apache/zookeeper/zookeeper-3/bin/zkServer.sh start

Mac或Linux 下搭建单机Zookeeper集群_第5张图片

5.1. 查看状态

/usr/local/apache/zookeeper/zookeeper-1/bin/zkServer.sh status

在这里插入图片描述

6. 关闭集群

/usr/local/apache/zookeeper/zookeeper-1/bin/zkServer.sh stop
/usr/local/apache/zookeeper/zookeeper-2/bin/zkServer.sh stop
/usr/local/apache/zookeeper/zookeeper-3/bin/zkServer.sh stop

Mac或Linux 下搭建单机Zookeeper集群_第6张图片

一个一个启动太麻烦了, 我创建了两个简单的脚本startZookeeper.shstopZookeeper.sh

  • startZookeeper.sh
/usr/local/apache/zookeeper/zookeeper-1/bin/zkServer.sh start
/usr/local/apache/zookeeper/zookeeper-2/bin/zkServer.sh start
/usr/local/apache/zookeeper/zookeeper-3/bin/zkServer.sh start
  • stopZookeeper.sh
/usr/local/apache/zookeeper/zookeeper-1/bin/zkServer.sh stop
/usr/local/apache/zookeeper/zookeeper-2/bin/zkServer.sh stop
/usr/local/apache/zookeeper/zookeeper-3/bin/zkServer.sh stop

四. 问题记录

1. 错误: 找不到或无法加载主类 org.apache.zookeeper.server.quorum.QuorumPeerMain

问题: 我使用zookeeper-3.5.5.tar.gz的时候, 发现启动不起来, 每次启动都是报这个错误. 在网上查阅资料发现是少了jar包, 进入目录一看,发现果然没有jar包. 重新下了一次也没有, 我就果断换成了zookeeper-3.4.14.tar.gz这个版本.
Mac或Linux 下搭建单机Zookeeper集群_第7张图片

2. 使用docker安装时候,报错as it does not belong to the default network.

查看当前的network

docker network ls

docker inspect [容器名]

最后宣传一下自己无人问津的个人网站http://meisen.pro

你可能感兴趣的:(Mac或Linux 下搭建单机Zookeeper集群)