单机部署单个zookeeper :
Mode: standalone模式
hub.docker.com 上有不少 ZK 镜像, 不要用其他的镜像来套, 我们使用官方的 ZK 镜像吧.
首先执行如下命令:
docker pull zookeeper
每个人镜像都可能不一样,会导致各种各样的问题,不建议docker.io/wurstmeister/zookeeper,当时就是为了搭建kafka先搭zookeeper,好久都搭不起来集群,一直是Mode: standalone,曲折不多讲了
下面这篇文章写的很完整了
https://www.cnblogs.com/xiaohanlin/p/10405522.html
多机部署集群的
https://blog.csdn.net/qq_32488647/article/details/81905906
修正一个错误,myid是在dataDir=/data这个配置下的一个文件
在这个配置文件中,新出现的语句的含义:
initLimit : 此配置表示允许follower连接并同步到leader的初始化时间,它以tickTime的倍数来表示。当超过设置倍数的tickTime时间,则连接失败。
syncLimit : Leader服务器与follower服务器之间信息同步允许的最大时间间隔,如果超过次间隔,默认follower服务器与leader服务器之间断开链接。
maxClientCnxns : 限制连接到zookeeper服务器客户端的数量
server.id=host:port:port : 表示了不同的zookeeper服务器的自身标识,作为集群的一部分,每一台服务器应该知道其他服务器的信息。用户可以从“server.id=host:port:port” 中读取到相关信息。在服务器的data(dataDir参数所指定的目录)下创建一个文件名为myid的文件,这个文件的内容只有一行,指定的是自身的id值。比如,服务器“1”应该在myid文件中写入“1”。这个id必须在集群环境中服务器标识中是唯一的,且大小在1~255之间。这一样配置中,zoo1代表第一台服务器的IP地址。第一个端口号(port)是从follower连接到leader机器的端口,第二个端口是用来进行leader选举时所用的端口。所以,在集群配置过程中有三个非常重要的端口:clientPort:2181、port:2888、port:3888。
单机部署集群
https://blog.csdn.net/zzg_1990/article/details/78224431
主要就是涉及
ZOO_MY_ID: 1
ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888
clientPort=2181
dataDir=/data
dataLogDir=/datalog
tickTime=2000
initLimit=5
syncLimit=2
autopurge.snapRetainCount=3
autopurge.purgeInterval=0
maxClientCnxns=60
server.1=zoo1:2888:3888
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888
检查zookeeper的两种方式
1.进入容器,或者在zookeeper下的bin目录下执行
zkServer.sh status
输出
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Mode: leader
由此可见官网的配置文件在/conf下,顺道找到了dataDir dataLogDir docker启动需要映射出去
2.在宿主机上执行
[root@centos_7_64_1 kafka-zk]# echo stat | nc 127.0.0.1 2181
Zookeeper version: 3.4.14-4c25d480e66aadd371de8bd2fd8da255ac140bcf, built on 03/06/2019 16:18 GMT
Clients:
/172.20.0.1:41108[0](queued=0,recved=1,sent=0)
Latency min/avg/max: 0/16/146
Received: 12
Sent: 11
Connections: 1
Outstanding: 0
Zxid: 0x400000002
Mode: follower
Node count: 4
单机部署集群的docker-compose.yml,这里2888等不需要映射是因为zoo1,zoo2,zoo3启动后是不同的虚拟ip,多机部署时需要映射出去,那么实际使用的时候是否需要制定host模式是host模式呢?,另外可以加上volume映射- "/etc/localtime:/etc/localtime",时间一致
version: '2'
services:
zoo1:
image: zookeeper
restart: always
container_name: zoo1
ports:
- "3181:2181"
environment:
ZOO_MY_ID: 1
ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888
volumes:
- "/opt/logs/zoo1/:/datalog"
- "/opt/data/zoo1/:/data"
zoo2:
image: zookeeper
restart: always
container_name: zoo2
ports:
- "3182:2181"
environment:
ZOO_MY_ID: 2
ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888
volumes:
- "/opt/logs/zoo2/:/datalog"
- "/opt/data/zoo2/:/data"
zoo3:
image: zookeeper
restart: always
container_name: zoo3
ports:
- "3183:2181"
environment:
ZOO_MY_ID: 3
ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888
volumes:
- "/opt/logs/zoo3/:/datalog"
- "/opt/data/zoo3/:/data"