Docker 搭建 ZooKeeper 集群

Jun 6, 2018


学习 ZooKeeper 建议最少三个节点,所以尝试用 Docker 搭建 ZooKeeper 集群
参考链接:这里

镜像下载

➜  ~ docker pull zookeeper
Using default tag: latest
latest: Pulling from library/zookeeper
ff3a5c916c92: Pull complete
a8906544047d: Pull complete
a790ae7377b0: Pull complete
2cbb132c648d: Pull complete
5cb2cad05481: Pull complete
d826b10121dc: Pull complete
f05685c79e04: Pull complete
Digest: sha256:96bd12586495a89da07d8bbd1fa48d127afe453adc428bb6a268ee2ec2ff7818
Status: Downloaded newer image for zookeeper:latest

创建模板文件

进入目录Documents/docker,此后所有操作都在该目录下
创建文件zookeeper-compose.yaml,内容如下:

version: '2'
services:
    zoo1:
        image: zookeeper
        restart: always
        container_name: zoo1
        ports:
            - "2181:2181"
        environment:
            ZOO_MY_ID: 1
            ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888

    zoo2:
        image: zookeeper
        restart: always
        container_name: zoo2
        ports:
            - "2182:2181"
        environment:
            ZOO_MY_ID: 2
            ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888

    zoo3:
        image: zookeeper
        restart: always
        container_name: zoo3
        ports:
            - "2183:2181"
        environment:
            ZOO_MY_ID: 3
            ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888

启动镜像

➜  docker docker-compose -f zookeeper-compose.yaml up
Creating network "docker_default" with the default driver
Creating zoo2 ... done
Creating zoo1 ... done
Creating zoo3 ... done
Attaching to zoo2, zoo1, zoo3
……
后面很长的日志,不贴了

查看容器

新开一窗口,进入Documents/docker

➜  docker docker-compose -f zookeeper-compose.yaml ps
Name              Command               State                     Ports
------------------------------------------------------------------------------------------
zoo1   /docker-entrypoint.sh zkSe ...   Up      0.0.0.0:2181->2181/tcp, 2888/tcp, 3888/tcp
zoo2   /docker-entrypoint.sh zkSe ...   Up      0.0.0.0:2182->2181/tcp, 2888/tcp, 3888/tcp
zoo3   /docker-entrypoint.sh zkSe ...   Up      0.0.0.0:2183->2181/tcp, 2888/tcp, 3888/tcp

查看集群

➜  docker echo stat | nc 127.0.0.1 2181
Zookeeper version: 3.4.12-e5259e437540f349646870ea94dc2658c4e44b3b, built on 03/27/2018 03:55 GMT
Clients:
 /172.18.0.1:47398[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
➜  docker echo stat | nc 127.0.0.1 2182
Zookeeper version: 3.4.12-e5259e437540f349646870ea94dc2658c4e44b3b, built on 03/27/2018 03:55 GMT
Clients:
 /172.18.0.1:37092[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
➜  docker echo stat | nc 127.0.0.1 2183
Zookeeper version: 3.4.12-e5259e437540f349646870ea94dc2658c4e44b3b, built on 03/27/2018 03:55 GMT
Clients:
 /172.18.0.1:50862[0](queued=0,recved=1,sent=0)

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

关闭集群

➜  docker docker-compose -f zookeeper-compose.yaml stop
Stopping zoo3 ... done
Stopping zoo1 ... done
Stopping zoo2 ... done

总结

利用 Docker 搭建 ZooKeeper 集群非常简单,总体来说就是使用docker-compose命令