首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用Docker搭建Zookeeper集群

使用Docker搭建Zookeeper集群

作者头像
张申傲
发布2020-09-03 10:32:35
5420
发布2020-09-03 10:32:35
举报
文章被收录于专栏:漫漫架构路漫漫架构路

使用Docker搭建Zookeeper集群

本文参考:https://blog.csdn.net/wu1226419614/article/details/78075898

  1. 拉取zookeeper镜像 https://hub.docker.com上面有很多zookeeper镜像,这里采用官方提供的镜像,版本使用3.4 docker pull zookeeper:3.4 下载成功后,查看所有镜像,zookeeper:3.4已经存在 william@zhangshenao  ~  docker images REPOSITORY TAG IMAGE ID CREATED SIZE zookeeper 3.4 cfed220ec48b 2 weeks ago 148MB tomcat 7.0.88 6ccc1317fc1d 6 weeks ago 363MB mysql 5.7.22 0d16d0a97dd1 2 months ago 372MB redis 3.2.11 e97b1f10d81a 2 months ago 99.7MB
  2. zookeeper镜像基本使用 william@zhangshenao  ~  docker run --name zk01 -d zookeeper:3.4 00030386911e2735087c1bbc223573d81e3aee5ab0222e1da83a40513d78ce97 这个命令会在后台运行一个 zookeeper 容器, 名字是 zk01, 并且它默认会导出 2181 端口。 查看 ZK 的运行情况, 输出类似如下内容时, 表示 ZK 已经成功启动了: docker logs -f zk01 ZooKeeper JMX enabled by default Using config: /conf/zoo.cfg 2018-07-25 03:34:26,055 [myid:] - INFO [main:QuorumPeerConfig@136] - Reading configuration from: /conf/zoo.cfg 2018-07-25 03:34:26,062 [myid:] - INFO [main:DatadirCleanupManager@78] - autopurge.snapRetainCount set to 3 2018-07-25 03:34:26,062 [myid:] - INFO [main:DatadirCleanupManager@79] - autopurge.purgeInterval set to 0 2018-07-25 03:34:26,062 [myid:] - INFO [main:DatadirCleanupManager@101] - Purge task is not scheduled. 2018-07-25 03:34:26,063 [myid:] - WARN [main:QuorumPeerMain@116] - Either no config or no quorum defined in config, running in standalone mode 2018-07-25 03:34:26,078 [myid:] - INFO [main:QuorumPeerConfig@136] - Reading configuration from: /conf/zoo.cfg 2018-07-25 03:34:26,078 [myid:] - INFO [main:ZooKeeperServerMain@98] - Starting server 2018-07-25 03:34:26,089 [myid:] - INFO [main:Environment@100] - Server environment:zookeeper.version=3.4.12-e5259e437540f349646870ea94dc2658c4e44b3b, built on 03/27/2018 03:55 GMT 2018-07-25 03:34:26,089 [myid:] - INFO [main:Environment@100] - Server environment:host.name=00030386911e 2018-07-25 03:34:26,091 [myid:] - INFO [main:Environment@100] - Server environment:java.version=1.8.0_171 2018-07-25 03:34:26,091 [myid:] - INFO [main:Environment@100] - Server environment:java.vendor=Oracle Corporation 2018-07-25 03:34:26,092 [myid:] - INFO [main:Environment@100] - Server environment:java.home=/usr/lib/jvm/java-1.8-openjdk/jre 2018-07-25 03:34:26,092 [myid:] - INFO [main:Environment@100] - Server environment:java.class.path=/zookeeper-3.4.12/bin/../build/classes:/zookeeper-3.4.12/bin/../build/lib/*.jar:/zookeeper-3.4.12/bin/../lib/slf4j-log4j12-1.7.25.jar:/zookeeper-3.4.12/bin/../lib/slf4j-api-1.7.25.jar:/zookeeper-3.4.12/bin/../lib/netty-3.10.6.Final.jar:/zookeeper-3.4.12/bin/../lib/log4j-1.2.17.jar:/zookeeper-3.4.12/bin/../lib/jline-0.9.94.jar:/zookeeper-3.4.12/bin/../lib/audience-annotations-0.5.0.jar:/zookeeper-3.4.12/bin/../zookeeper-3.4.12.jar:/zookeeper-3.4.12/bin/../src/java/lib/*.jar:/conf: 2018-07-25 03:34:26,092 [myid:] - INFO [main:Environment@100] - Server environment:java.library.path=/usr/lib/jvm/java-1.8-openjdk/jre/lib/amd64/server:/usr/lib/jvm/java-1.8-openjdk/jre/lib/amd64:/usr/lib/jvm/java-1.8-openjdk/jre/../lib/amd64:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib 2018-07-25 03:34:26,092 [myid:] - INFO [main:Environment@100] - Server environment:java.io.tmpdir=/tmp 2018-07-25 03:34:26,092 [myid:] - INFO [main:Environment@100] - Server environment:java.compiler=<NA> 2018-07-25 03:34:26,094 [myid:] - INFO [main:Environment@100] - Server environment:os.name=Linux 2018-07-25 03:34:26,094 [myid:] - INFO [main:Environment@100] - Server environment:os.arch=amd64 2018-07-25 03:34:26,095 [myid:] - INFO [main:Environment@100] - Server environment:os.version=4.9.87-linuxkit-aufs 2018-07-25 03:34:26,095 [myid:] - INFO [main:Environment@100] - Server environment:user.name=zookeeper 2018-07-25 03:34:26,095 [myid:] - INFO [main:Environment@100] - Server environment:user.home=/home/zookeeper 2018-07-25 03:34:26,096 [myid:] - INFO [main:Environment@100] - Server environment:user.dir=/zookeeper-3.4.12 2018-07-25 03:34:26,111 [myid:] - INFO [main:ZooKeeperServer@835] - tickTime set to 2000 2018-07-25 03:34:26,112 [myid:] - INFO [main:ZooKeeperServer@844] - minSessionTimeout set to -1 2018-07-25 03:34:26,112 [myid:] - INFO [main:ZooKeeperServer@853] - maxSessionTimeout set to -1 2018-07-25 03:34:26,126 [myid:] - INFO [main:ServerCnxnFactory@117] - Using org.apache.zookeeper.server.NIOServerCnxnFactory as server connection factory 2018-07-25 03:34:26,139 [myid:] - INFO [main:NIOServerCnxnFactory@89] - binding to port 0.0.0.0/0.0.0.0:2181
  3. 使用Docker的zookeeper命令行连接zookeeper 因为刚才我们启动的那个zookeeper容器并没有绑定宿主机的端口,因此我们不能直接访问它,但是我们可以通过Docker的link机制来对这个zookeeper容器进行访问。执行如下命令: docker run -it --rm --link zk01:zookeeper zookeeper zkCli.sh -server zookeeper 如果对 Docker 有过了解的话,那么对上面的命令一定不会陌生了。 这个命令的含义是:
    1. 启动一个zookeeper镜像,并运行这个镜像内的zkCli命令,命令参数是 “-server zookeeper”
    2. 将我们先前启动的名为zk01的容器连接(link) 到我们新建的这个容器上,并将其主机名命名为 zookeeper

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

  4. zookeeper集群的搭建 因为一个一个地启动 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_local docker-compose up 即可启动 ZK 集群了。 执行上述命令成功后,接着在另一个终端中运行 docker-compose ps 命令可以查看启动的 ZK 容器: COMPOSE_PROJECT_NAME=zk_local docker-compose ps Name Command State Ports <hr /> 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 注意:我们在 “docker-compose up” 和 “docker-compose ps” 前都添加了 COMPOSE_PROJECT_NAME=zk_test 这个环境变量, 这是为我们的compose工程起一个名字,以免与其他的 compose 混淆。
  5. 使用zookeeper客户端连接zookeeper集群 因为我们分别将 zoo1, zoo2, zoo3 的 2181 端口映射到了 本地主机的2181, 2182, 2183 端口上, 因此我们使用如下命令即可连接 ZK 集群了: zkCli.sh -server localhost:2181,localhost:2182,localhost:2183
  6. 查看zookeeper集群状态 我们可以通过 nc 命令连接到指定的 ZK 服务器, 然后发送 stat 可以查看 ZK 服务的状态, 例如: echo stat | nc 127.0.0.1 2181
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-07-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用Docker搭建Zookeeper集群
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档