docker 搭建 zookeeper 集羣

1. Zookeeper 基本使用

下載 zookeeper 鏡像

默認下載最新版本,指定版本可以在 zookeeper 後面添加 tag,如 zookeeper:latest

docker pull zookeeper

啓動 zookeeper 鏡像。

docker run --name first-zk -d zookeeper

這個命令會創建名爲 first-zk 的 zookeeper 容器,在後臺運行,並默認導出 2181 端口。

測試 zookeeper 容器

以下命令通過輸出日誌可以查看 zk 運行情況。

docker logs -f first-zk

客戶端連接 zk 服務器

1. 在已創建的 first-zk 容器中,執行 zkCli.sh:

docker exec -it first-zk zkCli.sh

2. 新建 zookeeper 容器作爲客戶端,並連接到 first-zk:

docker run -it --rm --link first-zk zookeeper zkCli.sh -server first-zk

這裏 --link first-zk 通過 docker 的 link 機制來訪問 first-zk 容器;
--rm 在容器退出後會自動刪除容器;
zkCli.sh -server first-zk 則啓動 zkCli.sh 命令,連接到 first-zk。

zkCli.sh 常用命令的使用,請參考這裏

2. Zookeeper 集羣搭建

編寫 docker-compose.yml 文件

version: '2.2'
services:
    zk1:
        image: zookeeper
        restart: always
        container_name: zk1
        ports:
            - "2181:2181"
        environment:
            ZOO_MY_ID: 1
            ZOO_SERVERS: server.1=zk1:2888:3888 server.2=zk2:2888:3888 server.3=zk3:2888:3888
    zk2:
        image: zookeeper
        restart: always
        container_name: zk2
        ports:
            - "2182:2181"
        environment:
            ZOO_MY_ID: 2
            ZOO_SERVERS: server.1=zk1:2888:3888 server.2=zk2:2888:3888 server.3=zk3:2888:3888
    zk3:
        image: zookeeper
        restart: always
        container_name: zk3
        ports:
            - "2183:2181"
        environment:
            ZOO_MY_ID: 3
            ZOO_SERVERS: server.1=zk1:2888:3888 server.2=zk2:2888:3888 server.3=zk3:2888:3888

在這個配置文件中,docker 運行了 3 個 zookeeper 鏡像,通過 ports 字段分別將本地的 2181, 2182, 2183 端口綁定到對應容器的 2181 端口上。

ZOO_MY_IDZOO_SERVERS 是搭建 Zookeeper 集羣需要的兩個環境變量。
ZOO_MY_ID 標識服務的 id,爲 1-255 之間的整數,必須在集羣中唯一。
ZOO_SERVERS 是集羣中的主機列表。

docker-compose.yml 所在目錄下執行 COMPOSE_PROJECT_NAME=docker-zk-cluster docker-compose up

➜  docker-zk-cluster COMPOSE_PROJECT_NAME=docker-zk-cluster docker-compose up

Creating network "docker-zk-cluster_default" with the default driver
Creating zk2 ... done
Creating zk1 ... done
Creating zk3 ... done
Attaching to zk3, zk1, zk2
zk3    | ZooKeeper JMX enabled by default
zk1    | ZooKeeper JMX enabled by default
zk2    | ZooKeeper JMX enabled by default
zk2    | Using config: /conf/zoo.cfg
zk3    | Using config: /conf/zoo.cfg
zk1    | Using config: /conf/zoo.cfg
...

COMPOSE_PROJECT_NAME=docker-zk-cluster 設置該環境變量是爲當前的 compose 工程取的名字,與其他工程做區分。

啓動後,打開另一終端窗口,運行 COMPOSE_PROJECT_NAME=docker-zk-cluster docker-compose ps,查看服務運行狀態

➜  COMPOSE_PROJECT_NAME=docker-zk-cluster docker-compose ps

Name              Command               State                Ports
--------------------------------------------------------------------------------
zk1    /docker-entrypoint.sh zkSe ...   Up      0.0.0.0:2181->2181/tcp,
                                                2888/tcp, 3888/tcp
zk2    /docker-entrypoint.sh zkSe ...   Up      0.0.0.0:2182->2181/tcp,
                                                2888/tcp, 3888/tcp
zk3    /docker-entrypoint.sh zkSe ...   Up      0.0.0.0:2183->2181/tcp,
                                                2888/tcp, 3888/tcp

使用 Docker 命令行客戶端連接 ZK 集羣

docker run -it --rm --link zk1 --link zk2 --link zk3 --net docker-zk-cluster_default zookeeper zkCli.sh -server zk1:2181,zk2:2181,zk3:2181
Connecting to zk1:2181,zk2:2181,zk3:2181

--net docker-zk-cluster_default 其中 docker-zk-cluster 是 compose 工程名,不作這個配置會導致 docker: Error response from daemon: Cannot link to /zk1, as it does not belong to the default network. 異常。具體原因請看這裏

查看集羣

通過 nc 命令連接到指定 Zookeeper 服務器,發送 stat 來查看狀態。

➜  ~ echo stat | nc localhost 2181
Zookeeper version: 3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03, built on 06/29/2018 04:05 GMT
Clients:
 /172.19.0.5:40210[1](queued=0,recved=31,sent=31)
 /172.19.0.1:34682[0](queued=0,recved=1,sent=0)

Latency min/avg/max: 0/2/76
Received: 32
Sent: 31
Connections: 2
Outstanding: 0
Zxid: 0x100000001
Mode: follower
Node count: 4
➜  ~ echo stat | nc localhost 2182
Zookeeper version: 3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03, built on 06/29/2018 04:05 GMT
Clients:
 /172.19.0.1:37312[0](queued=0,recved=1,sent=0)

Latency min/avg/max: 0/0/0
Received: 1
Sent: 0
Connections: 1
Outstanding: 0
Zxid: 0x100000001
Mode: follower
Node count: 4
➜  ~ echo stat | nc localhost 2183
Zookeeper version: 3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03, built on 06/29/2018 04:05 GMT
Clients:
 /172.19.0.1:54278[0](queued=0,recved=1,sent=0)

Latency min/avg/max: 0/0/0
Received: 1
Sent: 0
Connections: 1
Outstanding: 0
Zxid: 0x100000001
Mode: leader
Node count: 4
Proposal sizes last/min/max: 36/36/36

如上,我們發現 zk3(端口爲 2183)爲 leader,其他爲 follower。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章