Zookeeper——Docker 下安装部署

单节点安装

一、 环境说明

  • docker: 18.09.9-ce
  • zookeeper: 3.5.6

二、 拉取 zookeeper 镜像

  • 拉取镜像
docker pull zookeeper

默认是摘取最新版本 zookeeper:latest

  • 查看当前镜像

三、 准备工作

将它部署在 /usr/local/zookeeper 目录下:

cd /usr/local && mkdir zookeeper && cd zookeeper

创建 data 目录,用于挂载容器中的数据目录:

mkdir data

四、 正式部署

  • 部署命令:
docker run -d -e TZ="Asia/Shanghai" -p 2181:2181 -v $PWD/data:/data --name zookeeper --restart always zookeeper
  • 命令详细说明:
-e TZ="Asia/Shanghai" # 指定上海时区 
-d # 表示在一直在后台运行容器
-p 2181:2181 # 对端口进行映射,将本地 2181 端口映射到容器内部的 2181 端口
--name # 设置创建的容器名称
-v # 将本地目录 (文件) 挂载到容器指定目录;
--restart always #始终重新启动 zookeeper
  • 查看容器启动情况:
docker ps -a

注:状态(STATUS)为 Up,说明容器已经启动成功。

五、 测试

  • 使用 zk 命令行客户端连接 zk
docker run -it --rm --link zookeeper:zookeeper zookeeper zkCli.sh -server zookeeper

说明:-server zookeeper是启动 zkCli.sh的参数

六、 其它命令

查看 zookeeper 容器实例进程信息

docker top zookeeper

停止 zookeeper 实例进程

docker stop zookeeper

启动 zookeeper 实例进程

docker start zookeeper

重启 zookeeper 实例进程

docker restart zookeeper

查看 zookeeper 进程日志

docker logs -f zookeeper

杀死 zookeeper 实例进程

docker kill -s KILL zookeeper

移除 zookeeper 实例

docker rm -f -v zookeeper

集群方式安装

集群方式选择使用 docker-compose来完成。

一、安装 docker-compose

curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

二、配置 docker-compose

编写配置文件,并将其命名为:docker-compose.ymldocker-compose默认配置文件名)
配置文件内容:

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 这个端口上。
ZOO_MY_ID:表示 zk 服务的 ID, 取值为 1-255 之间的整数,且必须唯一
ZOO_SERVERS:表示 zk 集群的主机列表

三、启动 zookeeper 集群

docker-compose up -d

该命令执行需要在 docker-compose配置文件的目录下执行,结果如下:

[root@izbp13xko46hud9vfr5s94z conf]# docker-compose up -d 
Starting zoo1 ... done
Starting zoo2 ... done
Starting zoo3 ... done
[root@izbp13xko46hud9vfr5s94z conf]# 

四、查看 zookeeper 集群实例

  • 通过 docker ps查看

[root@izbp13xko46hud9vfr5s94z ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e53b4c838001 zookeeper "/docker-entrypoint.…" 4 minutes ago Up 44 seconds 2888/tcp, 0.0.0.0:2181->2181/tcp, 3888/tcp zoo1
19282fb6f9b4 zookeeper "/docker-entrypoint.…" 4 minutes ago Up 44 seconds 2888/tcp, 3888/tcp, 0.0.0.0:2182->2181/tcp zoo2
099b926fa2d3 zookeeper "/docker-entrypoint.…" 4 minutes ago Up 44 seconds 2888/tcp, 3888/tcp, 0.0.0.0:2183->2181/tcp zoo3

  • 通过 docker-compose ps查看
[root@izbp13xko46hud9vfr5s94z conf]# docker-compose ps 
Name              Command               State                     Ports                 
------------------------------------------------------------------------------------------
zoo1   /docker-entrypoint.sh zkSe ...   Up      0.0.0.0:2181->2181/tcp, 2888/tcp, 3888/tcp
zoo2   /docker-entrypoint.sh zkSe ...   Up      0.0.0.0:2182->2181/tcp, 2888/tcp, 3888/tcp
zoo3   /docker-entrypoint.sh zkSe ...   Up      0.0.0.0:2183->2181/tcp, 2888/tcp, 3888/tcp
[root@izbp13xko46hud9vfr5s94z conf]# 

注:这个命令需要在 docker-compose配置文件下执行。

五、管理 docker-compose 服务

# 停止 docker-compose 服务
docker-compose stop
# 启动 docker-compose 服务
docker-compose start
# 重启 docker-compose 服务
docker-compose restart

六、查看 zookeeper 集群节点主从关系

使用 docker exec -it zoo1 /bin/bash这个命令进入 zoo1节点中,之后输入 ./bin/zkServer.sh statu来查看节点主从关系

[root@izbp13xko46hud9vfr5s94z conf]# docker exec -it zoo1 /bin/bash 
bash-4.4# ./bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Mode: follower
bash-4.4#