docker pull zookeeper docker tag docker.io/zookeeper zookeeper docker rmi docker.io/zookeeper
# 升级 pip pip3 install --upgrade pip # 指定 docker-compose 版本安装 pip install docker-compose==1.22 # 验证是否安装成功,有返回值,说明安装成功 docker-compose -v
mkdir -p /data/docker-compose/zookeeper mkdir -p /data/docker-data/zookeeper
cd /data/docker-compose/zookeeper vi docker-compose.yml version: '3.6' services: zoo1: image: zookeeper restart: always hostname: zoo1 container_name: zoo1 ports: - 2181:2181 environment: ZOO_MY_ID: 1 ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181 volumes: - /data/docker-data/zookeeper/zoo1/data:/data - /data/docker-data/zookeeper/zoo1/datalog:/datalog zoo2: image: zookeeper restart: always hostname: zoo2 container_name: zoo2 ports: - 2182:2181 environment: ZOO_MY_ID: 2 ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181 volumes: - /data/docker-data/zookeeper/zoo2/data:/data - /data/docker-data/zookeeper/zoo2/datalog:/datalog zoo3: image: zookeeper restart: always hostname: zoo3 container_name: zoo3 ports: - 2183:2181 environment: ZOO_MY_ID: 3 ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181 volumes: - /data/docker-data/zookeeper/zoo3/data:/data - /data/docker-data/zookeeper/zoo3/datalog:/datalog
cd /data/docker-compose/zookeeper docker-compose up -d
docker exec -it zoo1 bash zkServer.sh status
返回下面信息,说明集群搭建成功
root@zoo1:/# zkServer.sh status ZooKeeper JMX enabled by default Using config: /conf/zoo.cfg Client port found: 2181. Client address: localhost. Client SSL: false. Mode: follower
可以看到,zoo1是follower角色
再依次到zoo2、zoo3中看,最后发现,zoo3是leader角色,其他两个是follower角色,这是三台zookeeper内部选举的结果,无需我们干预。
我们通过docker stop zoo3
把leader zoo3关掉,再分别进zoo1、zoo2,会发现,zoo2变成leader了,这也说明了zookeeper集群中,主从角色不需要我们人为干预,其内部会自己进行选举。
到这里,zookeeper集群就搭建好了。