Fork me on GitHub

在Docker中安装Zookeeper以及集群环境搭建

目录

前言

如果你对于zookeeper不懂的话,不建议来看此文章的内容。你可以自行网上查阅zookeeper资料学习。

在学习一门技术的时候,首先要了解这技术是干什么用的、基本的概念以及简单的上手使用。

搭建zookeeper单节点环境

获取zookeeper镜像

只要是想使用镜像,第一步都是先获取镜像

1
docker pull zookeeper

查看下载的zookeeper镜像

1
docker images

如下图所示:

在Docker中安装Zookeeper以及集群环境搭建

运行zookeeper镜像

1
docker run -d --name zookeeper -p 2181:2181 zookeeper

这里的2181是zookeeper的默认端口号。当然,你在启动镜像的时候,可以不用指定port的映射,解决的办法就是可以通过docker提供的link机制来实现容器的访问。

查看运行中的zookeeper容器

1
docker ps

如下图所示:

在Docker中安装Zookeeper以及集群环境搭建

连接zookeeper服务

在Linux命令行中执行以下命令:

1
docker exec -it ea zkCli.sh

其中的“ea”是zookeeper容器ID的前两位字符。

回车如下图(一般需要按两下回车键,才能看到最下面的“CONNECTED”的字样):

在Docker中安装Zookeeper以及集群环境搭建

出现上面的信息,说明zookeeper正常启动

另一种连接zookeeper服务的方式

或许有的朋友可能对上面的命令“docker exec -it ea zkCli.sh”中的 zkCli.sh 不太明白。这个 zkCli.sh 是哪里来的?

你也可以通过另外一种命令来进入zookeeper容器:

1
docker exec -it ea /bin/bash

唯一不同的地方,就是最后面的命令内容。

执行该命令之后,进入的是zookeeper容器的文件系统的根目录。

我们可以查看一下容器的文件系统根目录下面有什么东西,在容器内执行命令:

1
2
> cd /
>

回车之后,再执行命令:

1
2
> ls
>

如下图所示:

在Docker中安装Zookeeper以及集群环境搭建

可以明显的看到,有一个zookeeper的文件夹,也就是我们在容器中安装的zookeeper所在的目录。

然后,除了黄色区域的内容,再仔细看一下其他的目录,是不是发现了什么?不错,和我们平时看到的Linux系统根目录下面的内容是一样的。其实Docker容器就是一个简洁型的Linux文件系统。

找到我们的zookeeper目录之后,执行下面命令:

1
2
> cd ./zookeeper-3.4.12/bin/
>

可以看到目录下面有一些脚本:

在Docker中安装Zookeeper以及集群环境搭建

如果我们要连接zookeeper服务的话,需要使用 zkCli.sh 脚本来连接。

使用zkCli.sh连接zookeeper

在上面所在的目录下,执行以下命令:

1
2
> ./zkCli.sh -server 127.0.0.1:2181
>

出现下图所示信息,说明成功连接了zookeeper服务:

在Docker中安装Zookeeper以及集群环境搭建

查看当前zookeeper的模式

和上面一样,需要在 /zookeeper-3.4.12/bin/ 目录下,执行以下命令查看zookeeper服务的模式:

1
2
> ./zkServer.sh  status
>

如下图所示:

在Docker中安装Zookeeper以及集群环境搭建

可以看到,当前zookeeper服务是单节点的,并非集群环境。

搭建zookeeper集群环境

实际企业生产环境,往往都是搭建的集群环境,避免单实例情况下的异常导致服务不可用。

这是我以前写的在原生的centos系统上搭建的zookeeper集群环境的文档,有兴趣可以看看

https://pan.baidu.com/s/1hrMaRpq

这里我们就搭建3个zookeeper节点吧。3个节点已经算是最小单元的集群环境了。

为了编写简单,zookeeper 名称我们使用“ZK”来表示。

因为一个一个地启动 ZK 太麻烦了, 所以为了方便起见, 我们直接使用 docker-compose 来启动 ZK 集群。

Docker-Compose —— Docker编排工具

简介

Docker Compose是一个用来定义和运行复杂应用的Docker工具。一个使用Docker容器的应用,通常由多个容器组成。使用Docker Compose不再需要使用shell脚本来启动容器。 Compose 通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景。

Docker-Compose是一个部署多个容器的简单但是非常必要的工具.

两种最新的安装Docker-Compose的方式

  • 从github上下载docker-compose二进制文件安装

  • pip安装

官方文档 https://docs.docker.com/compose/install/

这里我就使用 pip 的方式安装。

安装Docker-Compose之前,请先安装 python-pip

安装 python-pip

  • 首先检查Linux有没有安装python-pip包,终端执行 pip -V
1
pip -V

如果出现 -bash: pip: command not found 的提示,说明没有安装python-pip,需要安装一下python-pip包。

参考文章 https://www.cnblogs.com/YatHo/p/7815400.html

以下是我的阿里云服务器上的执行情况:

在Docker中安装Zookeeper以及集群环境搭建

可以看到已经自带了pip包。

  • 对安装好的pip进行升级

因为系统自带的软件包,很有可能不是最新版本,所以我们最好先更新到最新版本。

1
pip install --upgrade pip

运行结果如下:

在Docker中安装Zookeeper以及集群环境搭建

已经升级到最新的 10.0.1 版本了。

安装Docker-Compose

在Linux命令行中执行命令:

1
pip install docker-compose

查看安装的docker-compose版本

1
docker-compose -version

如下图所示表示安装成功:

在Docker中安装Zookeeper以及集群环境搭建

创建 docker-compose 文件

这里我就在 /opt 目录下新建了一个 zookeeper 目录(你也可以自定义存储目录),如下图:

在当前目录(/opt/zookeeper/)创建一个名为 docker-compose.yml 的文件, 其内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
version: '2'
services:
zoo1:
image: zookeeper
restart: always
container_name: 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
restart: always
container_name: 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
restart: always
container_name: 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

这个配置文件会告诉 Docker 分别运行三个 zookeeper 镜像, 并分别将本地的 2181, 2182, 2183 端口绑定到对应的容器的2181端口上(每个zookeeper容器的默认端口都是2181,这句话意思也就是说,将宿主机的2181、2182、2183这3个端口号,分别映射到3个zookeeper容器的2181端口)。
ZOO_MY_ID 和 ZOO_SERVERS 是搭建 ZK 集群需要设置的两个环境变量,其中 ZOO_MY_ID 表示 ZK 服务的 id,它是1-255 之间的整数,必须在集群中唯一;ZOO_SERVERS 是ZK 集群的主机列表。

运行 docker-compose

接着我们在 docker-compose.yml 所在的目录(/opt/zookeeper/ )下运行:

1
COMPOSE_PROJECT_NAME=zk_cluster docker-compose up

即可启动 ZK 集群了。

注意:这种方式非后台运行,当执行 Ctrl + C 组合键的时候,所有的ZK容器都会停止运行。

以后台方式运行docker-compose

1
COMPOSE_PROJECT_NAME=zk_cluster docker-compose up -d

很简单,只要在最后面加上“-d”即可。

运行效果如下图:

在Docker中安装Zookeeper以及集群环境搭建

可以看到,是以后台方式运行的ZK容器集群。

查看启动的ZK集群

执行上述命令成功后,接着新开启一个终端,然后在新终端界面中,首先进入 /opt/zookeeper/ 目录,在该目录下运行以下命令可以查看启动的 ZK 容器:

1
COMPOSE_PROJECT_NAME=zk_cluster docker-compose ps

如下图:

在Docker中安装Zookeeper以及集群环境搭建

你也可以通过 docker ps 命令查看启动的ZK容器列表,如下图:

在Docker中安装Zookeeper以及集群环境搭建

很明显的看到,启动了3个ZK容器,每个容器对应着宿主机的不同的端口号。

测试连接ZK集群

查看ZK集群的信息,有多种方法。这里我们就使用最普通的进入容器内部来查看ZK节点的信息以及它的模式。

通过上面的图,可以看到3个ZK容器的ID信息。

这里我们先进入zoo1这个容器,查看ZK的信息,执行以下命令:

1
docker exec -it 49 zkServer.sh status

其中“49”指的是zoo1容器的ID。

运行结果如下图:

在Docker中安装Zookeeper以及集群环境搭建

可以看到,Mode的值为“follower”,指的是从节点,并非主节点。

以此类推,查看 zoo2 这个ZK容器的信息

在Docker中安装Zookeeper以及集群环境搭建

当前ZK容器节点为主节点

查看 zoo3 这个ZK容器的信息

在Docker中安装Zookeeper以及集群环境搭建

当前ZK容器节点为从节点

经过以上的查看,可以清晰的看到,其中一个ZK容器是一个主节点leader,另外2个都是从节点follower。

到此,在Docker中搭建zookeeper的集群环境已经讲解完了。

当然,其中的知识点还是很多的,文章只是一个入门级,对于更深层次的技术探索,各位可以自行网上学习的。

相关文章