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單節點
[[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, 說明叢集部署成功, 好了~~