困而学,学而知
最近在学习Zookeeper, 既然要学习Zookeeper,首先要需要搭建一个Zookeeper的环境.这里只讲怎么搭建,不会具体说具体原理.
我最开始搭建的是只有一个实例的Zookeeper服务. 然后开始搭建一个单机伪集群(因为我只有一台主机). 在搭建只有一个实例的Zookeeper实例的服务的时候,我是使用docker来搭建的. 本来也是想用docker来搭建这个伪集群的,但是我尝试了一天, 始终都报错,并且都没有找到原因…(也是心累)算了,还是用最简单的方式来搭建了单机伪集群.
搭建只有一个实例的Zookeeper服务是很简单的.
docker hub
上找到zookeeper
的官方镜像, 并拉取官方镜像.docker pull zookeeper
docker run --privileged=true -d --name myzk --publish 2181:2181 -d zookeeper
> 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
--link
来链接到容器的客户端docker run -it --rm --link myzk:zookeeper zookeeper zkCli.sh -server zookeeper
至此, 我使用docker
搭建了一个只有一个实例的Zookeeper服务. 在这个过程中没有报错十分顺利. 想着一鼓作气使用docker来搭建一个伪集群(友链: 使用 Docker 一步搞定 ZooKeeper 集群的搭建),但是总是事与愿违, 搞了一天都没有搞出来, 气煞我也,换成了最简单的方式来搭建集群.
首先当然是要从官网下载包啦.Download
这里我想说一句,我本来是下载最新版本3.5.5的,但是运行的时候居然报错, 后面会讲讲报错情况.
conf/
文件夹, 使用cp zoo_sample.cfg zoo.cfg
, 创建一个zoo.cfg
配置文件.因为Zookeeper的默认配置文件就是这个zoo.cfg
这个文件bin/
文件夹, 使用sh zkServer.sh start
启动Zookeeper文件.bin/
目录下,可以中sh zkCli.sh
使用客户端sh zkServer.sh stop
关闭Zookeeper.因为本人只有一台主机, 想想要搭建一个最少三台的Zookeeper集群,还是算了吧.但条条大路通罗马, 事情总是有解决办法的. 我的解决的办法就是在一个单机上通过不同的端口搭建一个伪集群.
为了搭建一个伪集群, 我们现在本地目录下创建三个目录. 我的是在/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
进入到存有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
进入上面图片中的conf/
目录下
cp zoo_sample.cfg 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
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
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
这个配置很重要, 要配置集群的话,就必须要配置. 在zoo.cfg
中配置了dataDir
.在dataDir
的目录下, 创建一个myid
的文件, 文件内容为集群id
. 比如zookeeper-1
下的myid
内容就是1
, zookeeper-2
下的myid
内容就是2
, zookeeper-3
下的myid
内容就是3
.
现在配置好了,直接启动就好了.
/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
/usr/local/apache/zookeeper/zookeeper-1/bin/zkServer.sh status
/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
一个一个启动太麻烦了, 我创建了两个简单的脚本startZookeeper.sh
和stopZookeeper.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
/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
问题: 我使用zookeeper-3.5.5.tar.gz
的时候, 发现启动不起来, 每次启动都是报这个错误. 在网上查阅资料发现是少了jar包, 进入目录一看,发现果然没有jar包. 重新下了一次也没有, 我就果断换成了zookeeper-3.4.14.tar.gz
这个版本.
as it does not belong to the default network.
查看当前的network
docker network ls
或
docker inspect [容器名]
最后宣传一下自己无人问津的个人网站http://meisen.pro