使用 Docker-compose 搭建 Zookeeper 集群

10,785 阅读2分钟

Docker-Compose环境安装

参考我的历史文章:传送门

docker-compose-zookeeper.yaml 文件

ZOO_MY_ID 和 ZOO_SERVERS 是搭建 ZK 集群需要设置的两个环境变量, 其中 ZOO_MY_ID 表示 ZK 服务的 id, 它是1-255 之间的整数, 必须在集群中唯一。ZOO_SERVERS 是ZK 集群的主机列表。

version: '3'

services:
  zoo1:
    image: zookeeper:3.4.11
    restart: always
    hostname: zoo1
    ports:
      - 2181:2181
    networks:
      - zookeeper
    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:3.4.11
    restart: always
    hostname: zoo2
    ports:
      - 2182:2181
    networks:
      - zookeeper
    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:3.4.11
    restart: always
    hostname: zoo3
    ports:
      - 2183:2181
    networks:
      - zookeeper
    environment:
      ZOO_MY_ID: 3
      ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888
networks:
  zookeeper:
    driver: bridge

启动 Zookeeper 集群

# 启动所有Zookeeper服务
docker-compose -f docker-compose-zookeeper.yaml up -d

# 移除所有Zookeeper服务
docker-compose -f docker-compose-zookeeper.yaml rm -sf

查看集群状态

可以看到 zoo1 和 zoo2 为当前集群的 follower,zoo3 为当前集群的 leader

[root@hostname ~]# echo stat | nc 127.0.0.1 2181

Zookeeper version: 3.4.11-37e277162d567b55a07d1755f0b31c32e93c01a0, built on 11/01/2017 18:06 GMT
Clients:
 /172.19.0.1:38584[0](queued=0,recved=1,sent=0)

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

[root@hostname ~]# echo stat | nc 127.0.0.1 2182

Zookeeper version: 3.4.11-37e277162d567b55a07d1755f0b31c32e93c01a0, built on 11/01/2017 18:06 GMT
Clients:
 /172.19.0.1:48802[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

[root@hostname ~]# echo stat | nc 127.0.0.1 2183

Zookeeper version: 3.4.11-37e277162d567b55a07d1755f0b31c32e93c01a0, built on 11/01/2017 18:06 GMT
Clients:
 /172.19.0.1:53120[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

连接Zookeeper集群

docker run -it --rm \
    --link zoo1:zk1 \
    --link zoo2:zk2 \
    --link zoo3:zk3 \
    --net root_zookeeper \
    zookeeper zkCli.sh -server zk1:2181,zk2:2181,zk3:2181

踩坑记录

最新的 zookeeper:3.6.1 版本使用 environment 设置 ZOO_MY_ID 环境变量后,无法正确读取配置,zookeeper 服务启动后报错:

root@zoo1:/apache-zookeeper-3.6.1-bin/bin# zkServer.sh status

ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Client port not found in static config file. Looking in dynamic config file.
grep: : No such file or directory
Client port not found. Terminating.

改为 zookeeper:3.4.11 问题解决。

都看到这里啦,点个赞再走吧~