介绍:
通过Docker搭建Zookeeper集群,本文在一台机器上搭建zk集群(伪集群),说是伪集群是因为没有实现在多台服务器上搭建,但是从另一个角度来说,这确实也是一个真正的集群,因为使用Docker容器化技术。
实现过程:
步骤:
1.首先在docker里拉取Zookeeper镜像
docker pull zookeeper:3.4.14 #这里没有拉取最新版,在实验时我拉取了最新版,出了一些问题
2.构建docker-compose.yml,创建在/usr/local下创建docker目录,用于构建docker-compose.yml,在docker目录下创建zookeeper目录(创建的这些目录更具自己的习惯来定)
version: '3.1' services: zoo1: image: zookeeper:3.4.14 #这里要指明版本,不然运行的时候docker回去拉取最新的zookeeper版本运行 restart: always hostname: zoo1 #主机名,这里是模拟,所以使用主机名(局域网内可以通过主机名进行互通) ports: - 2181:2181 environment: ZOO_MY_ID: 1 ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888 zoo2: image: zookeeper:3.4.14 restart: always hostname: zoo2 ports: - 2182:2181 environment: ZOO_MY_ID: 2 ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888 zoo3: image: zookeeper:3.4.14 restart: always hostname: zoo3 ports: - 2183:2181 environment: ZOO_MY_ID: 3 ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888
3.运行docker-compose(需要安装docker-compose,下面说)
docker-compose up -d
4.运行成功后进入容器查看情况
docker exec -it 容器ID bash
5.进入各容器查看那个是Leader , 那个是Follower
#进入到容器内部ZK的bin目录
./zkServer.sh status
Zookeeper集群模式配置文件(conf/zoo.cfg)
clientPort=2181 dataDir=/data dataLogDir=/datalog tickTime=2000 initLimit=5 syncLimit=2 autopurge.snapRetainCount=3 autopurge.purgeInterval=0 maxClientCnxns=60 server.1=192.168.0.1:2888:3888 server.2=192.168.0.2:2888:3888 server.3=192.168.0.3:2888:3888
initLimit:配置 Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过 initLimit(默认为 10) 个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 5 * 2000 = 10
秒
syncLimit:配置 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 2 * 2000 = 4
秒
定时清理(Zookeeper 从 3.4.0 开始提供了自动清理快照和事务日志的功能)以下两个参数配合使用:
autopurge.purgeInterval:指定了清理频率,单位是小时,需要填写一个 1 或更大的整数,默认是 0,表示不开启自己清理功能。
autopurge.snapRetainCount:指定了需要保留的文件数目。默认是保留 3 个。
maxClientCnxns:限制连接到 Zookeeper 的客户端的数量,限制并发连接的数量,它通过 IP 来区分不同的客户端。此配置选项可以用来阻止某些类别的 Dos 攻击。将它设置为 0 或者忽略而不进行设置将会取消对并发连接的限制。
server.A=B:C:D:其中 A 是一个数字,表示这个是第几号服务器。B 是这个服务器的 IP 地址。C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口(2888
);D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口(3888
)。如果是伪集群的配置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。
ZK常用命令
./zkServer .sh start #启动服务 ./zkServer .sh stop #停止服务 ./zkServer .sh restart #重启服务 ./zkServer .sh status #服务状态
安装docker-compose
Docker Compose 是一个用来定义和运行复杂应用的 Docker 工具。
使用 Docker Compose 不再需要使用 shell 脚本来启动容器。(通过 docker-compose.yml 配置)
Github源
curl -L https://github.com/docker/compose/releases/download/1.23.0-rc3/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
给予权限
chmod +x /usr/local/bin/docker-compose