ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
官方配置文档
version: '3.1'
services:zoo1:image: zookeeper:3.6.3restart: alwayscontainer_name: zoo1ports:- "2181:2181"environment:ZOO_MY_ID: 1ZOO_TICK_TIME: 20000ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181volumes:- ./zoo1/data:/data- ./zoo1/datalog:/datalogzoo2:image: zookeeper:3.6.3restart: alwayscontainer_name: zoo2ports:- "2182:2181"environment:ZOO_MY_ID: 2ZOO_TICK_TIME: 20000ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181volumes:- ./zoo2/data:/data- ./zoo2/datalog:/datalogzoo3:image: zookeeper:3.6.3restart: alwayscontainer_name: zoo3ports:- "2183:2181"environment:ZOO_MY_ID: 3ZOO_TICK_TIME: 20000ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181volumes:- ./zoo3/data:/data- ./zoo3/datalog:/datalog
注意:如果使用volumes绑定了/conf,则environment里zookeeper的配置会失效
如果没有提供zoo.cfg文件,则使用ZooKeeper推荐的默认值。可以使用以下环境变量覆盖它们。
在云服务器上搭建zookeeper集群,ZOO_TICK_TIME
这个参数可以设高一些,否则可能会出现超时,例如20000ms。
docker-compose up -d
docker-compose ps# 容器状态
NAME COMMAND SERVICE STATUS PORTS
zoo1 "/docker-entrypoint.…" zoo1 running 0.0.0.0:2181->2181/tcp, :::2181->2181/tcp
zoo2 "/docker-entrypoint.…" zoo2 running 0.0.0.0:2182->2181/tcp, :::2182->2181/tcp
zoo3 "/docker-entrypoint.…" zoo3 running 0.0.0.0:2183->2181/tcp, :::2183->2181/tcp# 关闭命令
docker-compose down# 进入docker容器命令,id从docker ps里查看
docker exec -it 94d8c551c47 /bin/bash
docker network lsNETWORK ID NAME DRIVER SCOPE
a94d8c551158 bridge bridge local
76bcdaccdcd6 host host local
02f6ebe999f9 none null local
363589c47b2c zookeeper_default bridge local
docker run -it --rm \--link zoo1:zk1 \--link zoo2:zk2 \--link zoo3:zk3 \--net zookeeper_default \zookeeper:3.6.3 zkCli.sh -server zk1:2181,zk2:2181,zk3:2181