ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
docker-compose搭建zookeeper集群
version: '3.1'
services:
zoo1:
image: zookeeper:3.6.3
restart: always
container_name: zoo1
ports:
- "2181:2181"
environment:
ZOO_MY_ID: 1
ZOO_TICK_TIME: 20000
ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181
volumes:
- ./zoo1/data:/data
- ./zoo1/datalog:/datalog
zoo2:
image: zookeeper:3.6.3
restart: always
container_name: zoo2
ports:
- "2182:2181"
environment:
ZOO_MY_ID: 2
ZOO_TICK_TIME: 20000
ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181
volumes:
- ./zoo2/data:/data
- ./zoo2/datalog:/datalog
zoo3:
image: zookeeper:3.6.3
restart: always
container_name: zoo3
ports:
- "2183:2181"
environment:
ZOO_MY_ID: 3
ZOO_TICK_TIME: 20000
ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181
volumes:
- ./zoo3/data:/data
- ./zoo3/datalog:/datalog
注意:如果使用volumes绑定了/conf,则environment里zookeeper的配置会失效
zookeeper配置
如果没有提供zoo.cfg文件,则使用ZooKeeper推荐的默认值。可以使用以下环境变量覆盖它们。
- ZOO_TICK_TIME
用于调节心跳和超时,默认为 2 秒 - ZOO_INIT_LIMIT
允许 followers 连接和同步到 leader 的时间量,默认为 5 - ZOO_SYNC_LIMIT
允许 followers 与 ZooKeeper 同步的时间量,单位为ticks。如果 followers远远落后于 leader ,他们就会被抛弃。默认为 2 - ZOO_MAX_CLIENT_CNXNS
限制单个客户端(通过IP地址标识)可以对ZooKeeper集群的单个成员进行的并发连接数(在套接字级别)。默认为 60 - ZOO_MY_ID
搭建Zookeeper集群时需要使用。id在集合中必须唯一,并且其值应介于1和255之间。
在云服务器上搭建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网络
docker network ls
NETWORK ID NAME DRIVER SCOPE
a94d8c551158 bridge bridge local
76bcdaccdcd6 host host local
02f6ebe999f9 none null local
363589c47b2c zookeeper_default bridge local
使用 Docker 命令行客户端连接 ZK 集群
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