DEV Community

Javier Vidal
Javier Vidal

Posted on

ZooKeeper cluster with Docker Compose

In this post I talked about setting up a ZooKeeper cluster using Vagrant. In this post I will talk about doing it without having to launch 3 different virtual servers in our development environment thanks to Docker Compose. We will need Docker and Docker Compose installed, of course.

The docker-compose.yml will look like this:

version: "3.9"
services:
  zk1:
    container_name: zk1
    hostname: zk1
    image: bitnami/zookeeper:3.6.2
    ports:
      - 21811:2181
    environment:
      - ALLOW_ANONYMOUS_LOGIN=yes
      - ZOO_SERVER_ID=1
      - ZOO_SERVERS=0.0.0.0:2888:3888,zk2:2888:3888,zk3:2888:3888
  zk2:
    container_name: zk2
    hostname: zk2
    image: bitnami/zookeeper:3.6.2
    ports:
      - 21812:2181
    environment:
      - ALLOW_ANONYMOUS_LOGIN=yes
      - ZOO_SERVER_ID=2
      - ZOO_SERVERS=zk1:2888:3888,0.0.0.0:2888:3888,zk3:2888:3888
  zk3:
    container_name: zk3
    hostname: zk3
    image: bitnami/zookeeper:3.6.2
    ports:
      - 21813:2181
    environment:
      - ALLOW_ANONYMOUS_LOGIN=yes
      - ZOO_SERVER_ID=3
      - ZOO_SERVERS=zk1:2888:3888,zk2:2888:3888,0.0.0.0:2888:3888
  zoonavigator:
    container_name: zoonavigator
    image: elkozmon/zoonavigator
    ports:
      - 9000:9000
Enter fullscreen mode Exit fullscreen mode

It will set up a 3 node cluster, zk1, zk2 and zk3. All we have to do is:

$ docker-compose up -d zk1 zk2 zk3 zoonavigator
Pulling zk1 (bitnami/zookeeper:3.6.2)...
3.6.2: Pulling from bitnami/zookeeper
ff7c165d667c: Pull complete
68ff1df62e09: Pull complete
b2c65a5b1bba: Pull complete
299e03a29f26: Pull complete
ac359c31a869: Pull complete
73ff1a3aae4d: Pull complete
2ff27ed904ba: Pull complete
671b552f88a4: Pull complete
8a18f1c76d65: Pull complete
144c6a5e1dd4: Pull complete
6c8379a42a77: Pull complete
2c88ec00718c: Pull complete
ce2390504de6: Pull complete
Digest: sha256:4bfdd618105aad42160263e5586b9295aa949a932f9bf7736fe148328adc6e3a
Status: Downloaded newer image for bitnami/zookeeper:3.6.2
Pulling zoonavigator (elkozmon/zoonavigator:)...
latest: Pulling from elkozmon/zoonavigator
bb79b6b2107f: Pull complete
00028440d132: Pull complete
ebd07266fb43: Pull complete
33e3eef28e5d: Pull complete
d356e0493ed9: Pull complete
d20cf66b6cb3: Pull complete
0f036ba81390: Pull complete
4245cea4b993: Pull complete
2b8eb69a8e7b: Pull complete
Digest: sha256:a1089a133f116bd760d361d6b0c0b4cbe2fd28d9a81db13cb53547669e70e933
Status: Downloaded newer image for elkozmon/zoonavigator:latest
Creating zk3          ... done
Creating zoonavigator ... done
Creating zk1          ... done
Creating zk2          ... done
Enter fullscreen mode Exit fullscreen mode

We could even access the ZooKeeper servers from the host server thanks to port forwarding: zk1 will be available through port 21811, zk2 through port 21812, and zk3 through port 21813.

Finally, we can also set up a container that will run zoonavigator, a web-based ZooKeeper UI and editor/browser with many features.

We can access zoonavigator from a browser in the host server just using the URL http://localhost:9000/, and connect to zk1 just using zk1:8121 as the connection string.

zoonavigator

Discussion (0)