1. 程式人生 > >Docker Zookeeper叢集搭建(偽叢集)

Docker Zookeeper叢集搭建(偽叢集)

主要通過修改容器 zookeeper 裡面的配置檔案實現

1、Docker安裝

zookeeper映象獲取各個版本的docker安裝需要自行百度, 基本上都是採用 yum install docke 或者 apt-get install docker 等方式安裝

2、Docker版本

[[email protected] ~]$ docker version
Client:
 Version:         1.13.1
 API version:     1.26
 Package version: docker-1.13.1-74.git6e3bb8e.el7.centos.x86_64
 Go version:      go1.9.4
 Git commit:      6e3bb8e/1.13.1
 Built:           Tue Aug 21 15:23:37 2018
 OS/Arch:         linux/amd64

Server:
 Version:         1.13.1
 API version:     1.26 (minimum version 1.12)
 Package version: docker-1.13.1-74.git6e3bb8e.el7.centos.x86_64
 Go version:      go1.9.4
 Git commit:      6e3bb8e/1.13.1
 Built:           Tue Aug 21 15:23:37 2018
 OS/Arch:         linux/amd64
 Experimental:    false

3、Zookeeper映象獲取

[[email protected] ~]$ docker pull zookeeper
  • 這個命令會預設拉取最新的zookeeper映象
  • 映象下載好了之後, 使用docker images命令可以檢視到當前主機中存在的映象
[[email protected] ~]$ docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
docker.io/zookeeper   3.5                 0cf9a81ab80b        4 days ago          130 MB
docker.io/zookeeper   latest              72d44402c57a        4 days ago          149 MB

4、zookeeper單節點

4.1)zookeeper單節點啟動

[[email protected] ~]$ docker run --name zk1 -d zookeeper:latest
80a20ba3881c980800d4e54f6840e8405d2758e1b501e9749812c1c8af264557
  • docker run: 該命令是從映象啟動一個容器, 使其執行起來
  • --name: 該引數是指定容器的名稱, 如果不指定該引數, 則預設為這個容器的唯一ID, 也就是上面一串字串的前面幾位, 類似於git的版本記錄
  • -d: 是讓該容器以守護程序執行
  • zookeeper:latest: 指定zookeeper映象及其版本, :是映象與版本的分隔符

4.2)檢視映象中zookeeper的配置情況

[[email protected] ~]$ docker exec -it zk1 /bin/bash
bash-4.4# 
  • 這個命令是建立與zk1之間的一個連線, 這個連線通過bash命令進行互動(我是這麼理解的, 如有不對, 請指正)
  • -i: 建立標準輸入通道進行互動
  • -t: 分配一個tty (我理解為linux登入之後分配的一個會話)

zookeeper的標準配置就在/conf

[[email protected] ~]$ docker exec -it zk1 /bin/bash
bash-4.4$ cat /conf/zoo.cfg
clientPort=2181
dataDir=/data
dataLogDir=/datalog
tickTime=2000
initLimit=5
syncLimit=2
autopurge.snapRetainCount=3
autopurge.purgeInterval=0
maxClientCnxns=60

當我們啟動容器的時候, zookeeper會自動啟動, 並載入這個配置檔案, 這個檔案稍後我們還會用到, 留意一下

4.3)Zookeeper單節點執行情況檢視

[[email protected] ~]$ docker logs zk1
...
-> 中間省略很多內容沒有貼出來  
...binding to port 0.0.0.0/0.0.0.0:2181

檢視zookeeper映象啟動日誌(具體這個日誌是怎麼輸出到這裡的, 我還沒去弄明白)

4.4)zookeeper執行狀態

檢視docker 容器的一些構建資訊, 這裡主要是查詢該容器的ip地址

[[email protected] ~]$ docker inspect zk1
[...
 -> 中間省略很多內容沒有貼出來 
  "IPAddress": "172.17.0.2",
]

接下在宿主機中執行命令, 檢視zookeeper執行狀態,如果執行下面命令報錯,請安裝 nc 執行 yum -y install nc 命令

[[email protected] ~]$ echo stat | nc 172.17.0.2 2181
Zookeeper version: 3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03, built on 06/29/2018 04:05 GMT
Clients:
 /172.17.0.1:57734[0](queued=0,recved=1,sent=0)

Latency min/avg/max: 0/0/0
Received: 1
Sent: 0
Connections: 1
Outstanding: 0
Zxid: 0x0
Mode: standalone
Node count: 4

由此Mode: standalone可知, 我們當前的zookeeper是單節點執行的, 接下來搭建叢集版, 很簡單哦, 正常配置zookeeper叢集是一樣的

5、Zookeeper的Docker容器叢集搭建

由於是宿主機只有一個, 所以所有docker容器在本機中都存在與一個網段中, 相互之間是可以進行通訊的, 不需要使用--link命令也可以通訊, 如果對docker有更進一步配置, 就需要要參照其它文件進行設定了

5.1、啟動兩個節點 

重新按照如上命令啟動兩個節點, 加上zk1就3個節點了
通過docker inspect {container_name}命令我們可以獲取到所有zookeeper單節點的ip地址

  • zk1: 172.17.0.2
  • zk2: 172.17.0.3
  • zk3: 172.17.0.4

5.2、配置

進入zk1, 編輯配置檔案

[[email protected] ~]$ docker exec -it zk1 /bin/bash
bash-4.4$ vi /conf/zoo.cfg

結果

clientPort=2181
dataDir=/data
dataLogDir=/datalog
tickTime=2000
initLimit=5
syncLimit=2
server.1=172.17.0.2:2888:3888
server.2=172.17.0.3:2888:3888
server.3=172.17.0.4:2888:3888
  • 可以看出我把後面啟動的兩個zk的ip地址資訊都新增進來了
  • 2888, 是zk之間通訊的埠
  • 3888, 是zk之間投票選舉的埠

儲存退出

echo 1 > /data/myid

這條命令的意思是, 將1輸出到/data/myid檔案中, 這個是什麼作用呢?
從我們的配置中可以看出, zk1的服務名是server.1, 這個1就是指定的服務名稱

zk2, 和 zk3, 在配置檔案上進行相同操作, 但是在echo 命令上分別輸出2, 3,到對應的myid檔案中

說一下為什麼要放在/data目錄下
因為從配置檔案中我們知道, zookeeper配置了資料目錄在/data, 所以我們要將myid檔案放在/data目錄下

5.3、全部儲存退出, 重啟容器

[[email protected] ~]$ docker restart zk1
[[email protected] ~]$ docker restart zk2
[[email protected] ~]$ docker restart zk3

5.4、檢視叢集是否部署成功

[[email protected] ~]$ echo stat | nc 172.17.0.2 2181
Zookeeper version: 3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03, built on 06/29/2018 04:05 GMT
Clients:
 /172.17.0.1:57736[0](queued=0,recved=1,sent=0)

Latency min/avg/max: 0/0/0
Received: 1
Sent: 0
Connections: 1
Outstanding: 0
Zxid: 0x0
Mode: follower
Node count: 4

可以明顯看到之前查詢的mode從standlone變成了follower, 說明叢集部署成功, 好了~~

 

轉載來源:https://www.jianshu.com/p/9a2963c2998a