1分鐘搞定,通過docker-compose 搭建zookeeper 集羣

創建三節點 zookeeper 集羣

  1. 將 docker-compose.yml 保存到當前命令行目錄下

docker-compose.yml 文件

version: '2'
networks:
  zk:
services:
  zookeeper1:
    image: zookeeper
    container_name: zk1.cloud
    networks:
        - zk
    ports:
        - "2181:2181"
    environment:
      ZOO_MY_ID: 1
      ZOO_SERVERS: server.1=0.0.0.0:2888:3888 server.2=zk2.cloud:2888:3888 server.3=zk3.cloud:2888:3888
  zookeeper2:
    image: zookeeper
    container_name: zk2.cloud
    networks:
        - zk
    ports:
        - "2182:2181"
    environment:
      ZOO_MY_ID: 2
      ZOO_SERVERS: server.1=zk1.cloud:2888:3888 server.2=0.0.0.0:2888:3888 server.3=zk3.cloud:2888:3888
  zookeeper3:
    image: zookeeper
    container_name: zk3.cloud
    networks:
        - zk
    ports:
        - "2183:2181"
    environment:
      ZOO_MY_ID: 3
      ZOO_SERVERS: server.1=zk1.cloud:2888:3888 server.2=zk2.cloud:2888:3888 server.3=0.0.0.0:2888:3888
  1. 執行命令,如果是首次獲取 zookeeper 鏡像,輸出會有不同
docker pull zookeeper

輸出

latest: Pulling from library/zookeeper
Digest: sha256:3f03c6f5a91e0f638f3d6a755b2d32c06583766031353be87e2d633fa3006c23
Status: Image is up to date for zookeeper:latest
  1. 後臺啓動 zookeeper 集羣
docker-compose up -d

輸出

Creating network "dczk_zk" with the default driver
Creating zk2.cloud ... done
Creating zk1.cloud ... done
Creating zk3.cloud ... done

檢查進程狀態

docker ps

輸出

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                        NAMES
cb176c76c620        zookeeper           "/docker-entrypoint.…"   6 minutes ago       Up 6 minutes        2888/tcp, 3888/tcp, 0.0.0.0:2183->2181/tcp   zk3.cloud
ee00aba1c766        zookeeper           "/docker-entrypoint.…"   6 minutes ago       Up 6 minutes        2888/tcp, 0.0.0.0:2181->2181/tcp, 3888/tcp   zk1.cloud
5d95baa693c2        zookeeper           "/docker-entrypoint.…"   6 minutes ago       Up 6 minutes        2888/tcp, 3888/tcp, 0.0.0.0:2182->2181/tcp   zk2.cloud
docker-compose ps

輸出

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

測試

1. docker 3 爲leader

查看狀態

docker exec -it zk1.cloud bash ./bin/zkServer.sh status

輸出

ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Mode: follower

查看狀態

docker exec -it zk2.cloud bash ./bin/zkServer.sh status

輸出

ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Mode: follower

查看狀態

docker exec -it zk3.cloud bash ./bin/zkServer.sh status

輸出

ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Mode: leader

2. 關閉 zk3.cloud 後檢查leader變化情況

 

docker stop zk3.cloud
docker exec -it zk2.cloud bash ./bin/zkServer.sh status

 

ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Mode: leader

3. 再次啓動 zk3.cloud 後檢查 leader變化情況

 

docker start zk3.cloud
docker exec -it zk2.cloud bash ./bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Mode: leader
docker exec -it zk3.cloud bash ./bin/zkServer.sh status

 

ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Mode: follower

4. 關閉 zk2.cloud 後檢查 leader變化情況

docker stop zk2.cloud
docker exec -it zk3.cloud bash ./bin/zkServer.sh status

 

ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Mode: leader
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章