docker學習——zookeeper叢集安裝
背景
原來學習 ZK 時, 我是在本地搭建的偽叢集, 雖然說使用起來沒有什麼問題, 但是總感覺部署起來有點麻煩. 剛好我發現了 ZK 已經有了 Docker 的映象了, 於是就嘗試了一下, 發現真是爽爆了, 幾個命令就可以搭建一個完整的 ZK 叢集. 下面我簡單記錄一下使用 Docker 搭建 ZK 叢集的一些步驟.
映象下載
hub.docker.com 上有不少 ZK 映象, 不過為了穩定起見, 我們就使用官方的 ZK 映象吧.
首先執行如下命令:
1 |
|
當出現如下結果時, 表示映象已經下載完成了:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
ZK 映象的基本使用
啟動 ZK 映象
1 |
|
這個命令會在後臺執行一個 zookeeper 容器, 名字是 my_zookeeper, 並且它預設會匯出 2181 埠.
接著我們使用:
1 |
|
這個命令檢視 ZK 的執行情況, 輸出類似如下內容時, 表示 ZK 已經成功啟動了:
1 2 3 4 5 |
|
使用 ZK 命令列客戶端連線 ZK
因為剛才我們啟動的那個 ZK 容器並沒有繫結宿主機的埠, 因此我們不能直接訪問它. 但是我們可以通過 Docker 的 link 機制來對這個 ZK 容器進行訪問. 執行如下命令:
1 |
|
如果對 Docker 有過了解的話, 那麼對上面的命令一定不會陌生了.
這個命令的含義是:
-
啟動一個 zookeeper 映象, 並執行這個映象內的 zkCli.sh 命令, 命令引數是 "-server zookeeper"
-
將我們先前啟動的名為 my_zookeeper 的容器連線(link) 到我們新建的這個容器上, 並將其主機名命名為 zookeeper
當我們執行了這個命令後, 就可以像正常使用 ZK 命令列客戶端一樣操作 ZK 服務了.
ZK 叢集的搭建
因為一個一個地啟動 ZK 太麻煩了, 所以為了方便起見, 我直接使用 docker-compose 來啟動 ZK 叢集.
首先建立一個名為 docker-compose.yml 的檔案, 其內容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
|
這個配置檔案會告訴 Docker 分別執行三個 zookeeper 映象, 並分別將本地的 2181, 2182, 2183 埠繫結到對應的容器的2181埠上.
ZOO_MY_ID 和 ZOO_SERVERS 是搭建 ZK 叢集需要設定的兩個環境變數, 其中 ZOO_MY_ID 表示 ZK 服務的 id, 它是1-255 之間的整數, 必須在叢集中唯一. ZOO_SERVERS 是ZK 叢集的主機列表.
接著我們在 docker-compose.yml 當前目錄下執行:
1 |
|
即可啟動 ZK 叢集了.
執行上述命令成功後, 接著在另一個終端中執行 docker-compose ps 命令可以檢視啟動的 ZK 容器:
1 2 3 4 5 6 |
|
注意, 我們在 "docker-compose up" 和 "docker-compose ps" 前都添加了 COMPOSE_PROJECT_NAME=zk_test 這個環境變數, 這是為我們的 compose 工程起一個名字, 以免與其他的 compose 混淆.
使用 Docker 命令列客戶端連線 ZK 叢集
通過 docker-compose ps 命令, 我們知道啟動的 ZK 叢集的三個主機名分別是 zoo1, zoo2, zoo3, 因此我們分別 link 它們即可:
1 2 3 4 5 6 |
|
通過本地主機連線 ZK 叢集
因為我們分別將 zoo1, zoo2, zoo3 的 2181 埠對映到了 本地主機的2181, 2182, 2183 埠上, 因此我們使用如下命令即可連線 ZK 叢集了:
1 |
|
檢視叢集
我們可以通過 nc 命令連線到指定的 ZK 伺服器, 然後傳送 stat 可以檢視 ZK 服務的狀態, 例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
|
通過上面的輸出, 我們可以看到, zoo1, zoo2 都是 follower, 而 zoo3 是 leader, 因此證明了我們的 ZK 叢集確實是搭建起來了.