设为首页 收藏本站
查看: 1577|回复: 0

[经验分享] 基于docker搭建zookeeper集群

[复制链接]

尚未签到

发表于 2019-1-8 06:09:10 | 显示全部楼层 |阅读模式
背景
  原来学习 ZK 时, 我是在本地搭建的伪集群, 虽然说使用起来没有什么问题, 但是总感觉部署起来有点麻烦. 刚好我发现了 ZK 已经有了 Docker 的镜像了, 于是就尝试了一下, 发现真是爽爆了, 几个命令就可以搭建一个完整的 ZK 集群. 下面我简单记录一下使用 Docker 搭建 ZK 集群的一些步骤.
  原文链接:https://segmentfault.com/a/1190000006907443
镜像下载
  hub.docker.com 上有不少 ZK 镜像, 不过为了稳定起见, 我们就使用官方的 ZK 镜像吧.
  首先执行如下命令:
docker pull zookeeper  当出现如下结果时, 表示镜像已经下载完成了:
>>> docker pull zookeeper  
Using default tag: latestlatest: Pulling from library/zookeepere110a4a17941: Pull completea696cba1f6e8: Pull completebc427bd93e95: Pull completec72391ae24f6: Pull complete40ab409b6b34: Pull completed4bb8183b85d: Pull complete0600755f1470: Pull completeDigest: sha256:12458234bb9f01336df718b7470cabaf5c357052cbcb91f8e80be07635994464Status: Downloaded newer image for zookeeper:latest
ZK 镜像的基本使用
启动 ZK 镜像
>>> docker run --name my_zookeeper -d zookeeper:latest  这个命令会在后台运行一个 zookeeper 容器, 名字是 my_zookeeper, 并且它默认会导出 2181 端口.
  接着我们使用:
docker logs -f my_zookeeper  这个命令查看 ZK 的运行情况, 输出类似如下内容时, 表示 ZK 已经成功启动了:
>>> docker logs -f my_zookeeper  
ZooKeeper JMX enabled by defaultUsing config: /conf/zoo.cfg
  
...2016-09-14 06:40:03,445 [myid:] - INFO  [main:NIOServerCnxnFactory@89] - binding to port 0.0.0.0/0.0.0.0:2181
使用 ZK 命令行客户端连接 ZK
  因为刚才我们启动的那个 ZK 容器并没有绑定宿主机的端口, 因此我们不能直接访问它. 但是我们可以通过 Docker 的 link 机制来对这个 ZK 容器进行访问. 执行如下命令:
docker run -it --rm --link my_zookeeper:zookeeper zookeeper zkCli.sh -server zookeeper  如果对 Docker 有过了解的话, 那么对上面的命令一定不会陌生了.
  这个命令的含义是:

  •   启动一个 zookeeper 镜像, 并运行这个镜像内的 zkCli.sh 命令, 命令参数是 "-server zookeeper"
  •   将我们先前启动的名为 my_zookeeper 的容器连接(link) 到我们新建的这个容器上, 并将其主机名命名为 zookeeper
  当我们执行了这个命令后, 就可以像正常使用 ZK 命令行客户端一样操作 ZK 服务了.
ZK 集群的搭建
  因为一个一个地启动 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_IDZOO_SERVERS 是搭建 ZK 集群需要设置的两个环境变量, 其中 ZOO_MY_ID 表示 ZK 服务的>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 ps  
Name              Command               State           Ports
  
----------------------------------------------------------------------
  
zoo1   /docker-entrypoint.sh zkSe ...   Up      0.0.0.0:2181->2181/tcp
  
zoo2   /docker-entrypoint.sh zkSe ...   Up      0.0.0.0:2182->2181/tcp
  
zoo3   /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: follower
  
Node 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: follower
  
Node 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: leader
  
Node count: 4
  通过上面的输出, 我们可以看到, zoo1, zoo2 都是 follower, 而 zoo3 是 leader, 因此证明了我们的 ZK 集群确实是搭建起来了.



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-660468-1-1.html 上篇帖子: Zookeeper简介(一) 下篇帖子: ZooKeeper 入门指南
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表