天天看點

Mac或Linux 下搭建單機Zookeeper叢集

困而學,學而知

最近在學習Zookeeper, 既然要學習Zookeeper,首先要需要搭建一個Zookeeper的環境.這裡隻講怎麼搭建,不會具體說具體原理.

我最開始搭建的是隻有一個執行個體的Zookeeper服務. 然後開始搭建一個單機僞叢集(因為我隻有一台主機). 在搭建隻有一個執行個體的Zookeeper執行個體的服務的時候,我是使用docker來搭建的. 本來也是想用docker來搭建這個僞叢集的,但是我嘗試了一天, 始終都報錯,并且都沒有找到原因…(也是心累)算了,還是用最簡單的方式來搭建了單機僞叢集.

搭建隻有一個執行個體的Zookeeper服務是很簡單的.

一. 使用docker搭建Zookeeper服務

1. 在

docker hub

上找到

zookeeper

的官方鏡像, 并拉取官方鏡像.

Mac或Linux 下搭建單機Zookeeper叢集
docker pull zookeeper
           

之前拉取過鏡像, 就截圖鏡像清單啦.

Mac或Linux 下搭建單機Zookeeper叢集

2. 啟動Zookeeper鏡像, 将容器的2181映射到主機的2181端口

docker run --privileged=true -d --name myzk --publish 2181:2181 -d zookeeper
           
Mac或Linux 下搭建單機Zookeeper叢集

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:[email protected]] - Reading configuration from: /conf/zoo.cfg
...
2019-07-01 16:38:15,365 [myid:1] - INFO  [main:[email protected]] - binding to port /0.0.0.0:2181
2019-07-01 16:38:15,387 [myid:1] - INFO  [main:[email protected]] - zookeeper.snapshotSizeFactor = 0.33
2019-07-01 16:38:15,391 [myid:1] - INFO  [main:[email protected]] - Snapshotting: 0x0 to /data/version-2/snapshot.0
2019-07-01 16:38:15,396 [myid:1] - INFO  [main:[email protected]] - Snapshotting: 0x0 to /data/version-2/snapshot.0
2019-07-01 16:38:15,418 [myid:1] - INFO  [main:[email protected]] - 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
           
Mac或Linux 下搭建單機Zookeeper叢集
Mac或Linux 下搭建單機Zookeeper叢集
Mac或Linux 下搭建單機Zookeeper叢集

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. 配置zoo.cfg

進入上面圖檔中的

conf/

目錄下

cp zoo_sample.cfg zoo.cfg
           
Mac或Linux 下搭建單機Zookeeper叢集

将下面的内容複制到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

.

Mac或Linux 下搭建單機Zookeeper叢集

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.1. 檢視狀态

/usr/local/apache/zookeeper/zookeeper-1/bin/zkServer.sh status
           
Mac或Linux 下搭建單機Zookeeper叢集

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叢集

一個一個啟動太麻煩了, 我建立了兩個簡單的腳本

startZookeeper.sh

stopZookeeper.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叢集

2. 使用docker安裝時候,報錯

as it does not belong to the default network.

檢視目前的

network

最後宣傳一下自己無人問津的個人網站http://meisen.pro