博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用 Docker搭建 ZooKeeper 集群
阅读量:7059 次
发布时间:2019-06-28

本文共 3821 字,大约阅读时间需要 12 分钟。

1.镜像下载

docker pull zookeeper

2.启动 ZK 镜像

>>> docker run --name my_zookeeper -d zookeeper:latest

这个命令会在后台运行一个 zookeeper 容器, 名字是 my_zookeeper, 并且它默认会导出 2181 端口.

接着我们使用:

docker logs -f my_zookeeper

3.使用 ZK 命令行客户端连接 ZK

因为刚才我们启动的那个 ZK 容器并没有绑定宿主机的端口, 因此我们不能直接访问它. 但是我们可以通过 Docker 的 link 机制来对这个 ZK 容器进行访问. 执行如下命令:

docker run -it --rm --link my_zookeeper:zookeeper zookeeper zkCli.sh -server zookeeper

这个命令的含义是:

  1. 启动一个 zookeeper 镜像, 并运行这个镜像内的 zkCli.sh 命令, 命令参数是 "-server zookeeper"

  2. 将我们先前启动的名为 my_zookeeper 的容器连接(link) 到我们新建的这个容器上, 并将其主机名命名为 zookeeper

当我们执行了这个命令后, 就可以像正常使用 ZK 命令行客户端一样操作 ZK 服务了.

 

4.ZK 集群的搭建

使用 docker-compose 来启动 ZK 集群.

首先创建一个名为 docker-compose.yml 的文件, 其内容如下:

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 和 ZOO_SERVERS 是搭建 ZK 集群需要设置的两个环境变量, 其中 ZOO_MY_ID 表示 ZK 服务的 id, 它是1-255 之间的整数, 必须在集群中唯一. ZOO_SERVERS 是ZK 集群的主机列表.

接着我们在 docker-compose.yml 当前目录下运行:

COMPOSE_PROJECT_NAME=zk_test docker-compose up

即可启动 ZK 集群了.

执行上述命令成功后, 接着在另一个终端中运行 docker-compose ps 命令可以查看启动的 ZK 容器:

>>> COMPOSE_PROJECT_NAME=zk_test docker-compose psName              Command               State           Ports----------------------------------------------------------------------zoo1   /docker-entrypoint.sh zkSe ...   Up      0.0.0.0:2181->2181/tcpzoo2   /docker-entrypoint.sh zkSe ...   Up      0.0.0.0:2182->2181/tcpzoo3   /docker-entrypoint.sh zkSe ...   Up      0.0.0.0:2183->2181/tcp

注意, 我们在 "docker-compose up" 和 "docker-compose ps" 前都添加了 COMPOSE_PROJECT_NAME=zk_test 这个环境变量, 这是为我们的 compose 工程起一个名字, 以免与其他的 compose 混淆.

 

使用 Docker 命令行客户端连接 ZK 集群

通过 docker-compose ps 命令, 我们知道启动的 ZK 集群的三个主机名分别是 zoo1, zoo2, zoo3, 因此我们分别 link 它们即可:

docker run -it --rm \        --link zoo1:zk1 \        --link zoo2:zk2 \        --link zoo3:zk3 \        --net zktest_default \        zookeeper zkCli.sh -server zk1:2181,zk2:2181,zk3:2181

通过本地主机连接 ZK 集群

因为我们分别将 zoo1, zoo2, zoo3 的 2181 端口映射到了 本地主机的2181, 2182, 2183 端口上, 因此我们使用如下命令即可连接 ZK 集群了:

zkCli.sh -server localhost:2181,localhost:2182,localhost:2183

查看集群

我们可以通过 nc 命令连接到指定的 ZK 服务器, 然后发送 stat 可以查看 ZK 服务的状态, 例如:

>>> echo stat | nc 127.0.0.1 2181Zookeeper version: 3.4.9-1757313, built on 08/23/2016 06:50 GMTClients: /172.18.0.1:49810[0](queued=0,recved=1,sent=0) Latency min/avg/max: 5/39/74Received: 4Sent: 3Connections: 1Outstanding: 0Zxid: 0x200000002Mode: followerNode count: 4>>> echo stat | nc 127.0.0.1 2182Zookeeper version: 3.4.9-1757313, built on 08/23/2016 06:50 GMTClients: /172.18.0.1:50870[0](queued=0,recved=1,sent=0) Latency min/avg/max: 0/0/0Received: 2Sent: 1Connections: 1Outstanding: 0Zxid: 0x200000002Mode: followerNode count: 4>>> echo stat | nc 127.0.0.1 2183Zookeeper version: 3.4.9-1757313, built on 08/23/2016 06:50 GMTClients: /172.18.0.1:51820[0](queued=0,recved=1,sent=0) Latency min/avg/max: 0/0/0Received: 2Sent: 1Connections: 1Outstanding: 0Zxid: 0x200000002Mode: leaderNode count: 4

通过上面的输出, 我们可以看到, zoo1, zoo2 都是 follower, 而 zoo3 是 leader, 因此证明了我们的 ZK 集群确实是搭建起来了.

转载于:https://www.cnblogs.com/cocboo/p/9471109.html

你可能感兴趣的文章
Web版OutLook,利用POP接收邮件服务器邮件
查看>>
经典算法 KMP算法详解
查看>>
sharepoint 2010 安装、卸载和升级沙盒解决方案
查看>>
prog1,2,3
查看>>
手机硬件结构
查看>>
NSIntger CGFloat NSNumber
查看>>
objc’s category and class cluster 详解
查看>>
黄聪:C#中HtmlAgilityPack判断是否包含或不包含指定的属性或值
查看>>
mysql innodb cluster 无感知集群
查看>>
bzoj 2818: Gcd GCD(a,b) = 素数
查看>>
Django实例(3)-用户连数据库登入系统
查看>>
Tomcat的下载,安装,配置,案例,详解(不断补充中)
查看>>
sql server 2000系统表sysproperties在SQL 2008中无效的问题
查看>>
CMD一键获取cpu信息
查看>>
SQLServer备份脚本
查看>>
自定义函数实现位操作
查看>>
二叉树的下一个结点
查看>>
baidu map JSAPI
查看>>
需求评审
查看>>
n的二进制中1的个数
查看>>