docker-compose搭建zookeeper集群环境

使用docker-compose搭建zookeeper集群环境

zookeeper是一个集群环境,用来管理微服务架构下面的配置管理功能。

这篇文章是一个基础步骤如何搭建zookeeper的docker集群环境。
我们使用docker-compose来搭建如下的zookeeper集群环境:

  1. 集群包含三个node:zookeeper1, zookeeper2, zookeeper3
  1. 下载zookeeper docker image
$ docker pull zookeeper
  1. 编辑docker-compose.yaml文件
version: '2'
networks:
byfn: services:
zookeeper1:
image: zookeeper
container_name: zookeeper1
environment:
- ZOO_MY_ID=1
- ZOO_SERVERS=server.1=zookeeper1:2888:3888 server.2=zookeeper2:2888:3888 server.3=zookeeper3:2888:3888
ports:
- 2181
networks:
- byfn zookeeper2:
image: zookeeper
container_name: zookeeper2
environment:
- ZOO_MY_ID=2
- ZOO_SERVERS=server.1=zookeeper1:2888:3888 server.2=zookeeper2:2888:3888 server.3=zookeeper3:2888:3888
ports:
- 2181
networks:
- byfn zookeeper3:
image: zookeeper
container_name: zookeeper3
environment:
- ZOO_MY_ID=3
- ZOO_SERVERS=server.1=zookeeper1:2888:3888 server.2=zookeeper2:2888:3888 server.3=zookeeper3:2888:3888
ports:
- 2181
networks:
- byfn

详细的配置请参考文档:https://hub.docker.com/_/zookeeper/
这里非常清楚的描述了如何修改配置,存储数据,以及调整日志级别以及输出等设置。

  1. 启动服务
$ docker-compose up
  1. 验证集群的状态
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c1f7646bf0e6 zookeeper "/docker-entrypoin..." 23 minutes ago Up 23 minutes 2888/tcp, 3888/tcp, 0.0.0.0:32794->2181/tcp zookeeper2
7e05f06c258d zookeeper "/docker-entrypoin..." 23 minutes ago Up 23 minutes 2888/tcp, 3888/tcp, 0.0.0.0:32793->2181/tcp zookeeper3
d293438c1813 zookeeper "/docker-entrypoin..." 23 minutes ago Up 23 minutes 2888/tcp, 3888/tcp, 0.0.0.0:32792->2181/tcp zookeeper1 $ docker exec -t zookeeper1 zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Mode: follower
$ docker exec -t zookeeper2 zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Mode: follower
$ docker exec -t zookeeper3 zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Mode: leader

这里我们看到三个zookeeper节点,zookeeper3是leader,zookeeper1和zookeeper2是follower。

其他状态检查命令:

$ nc localhost 32794 <<< ruok
imok $ echo srvr | nc localhost 32794
Zookeeper version: 3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03, built on 06/29/2018 04:05 GMT
Latency min/avg/max: 0/7/116
Received: 40
Sent: 39
Connections: 1
Outstanding: 0
Zxid: 0x10000000e
Mode: follower
Node count: 5
  1. 集群的使用

4.1 基本操作

[zk: localhost:2181(CONNECTED) 4] create /foo "Hello foo"
Created /foo [zk: localhost:2181(CONNECTED) 5] get /foo
Hello foo
cZxid = 0x100000013
ctime = Fri Jan 04 02:29:47 GMT 2019
mZxid = 0x100000013
mtime = Fri Jan 04 02:29:47 GMT 2019
pZxid = 0x100000013
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 9
numChildren = 0 [zk: localhost:2181(CONNECTED) 6] ls /foo
[]

4.2 创建路径create

[zk: localhost:2181(CONNECTED) 7] create /foo1/foo1 "Hello foo1"
Node does not exist: /foo1/foo1

创建失败,因为zookeeper不支持递归创建,必须先一级一级的创建父目录节点。
创建父目录时,让值为空就可以。(其实目录也可以带值,两者并不冲突。)

[zk: localhost:2181(CONNECTED) 14] create /foo1 ""     # 或者:create /foo1 ""
Created /foo1 [zk: localhost:2181(CONNECTED) 15] create /foo1/foo1 "Hello foo1"
Created /foo1/foo1

4.3 查看节点的元素ls

[zk: localhost:2181(CONNECTED) 21] ls /foo1
[foo1]

因为/foo1是一个目录,他下面有一个子节点/foo1/foo1

[zk: localhost:2181(CONNECTED) 21] ls /foo1/foo1
[]

因为/foo1/foo1是一个元节点,他下面没有子节点了。

注意,ls命令只能列出一级目录,不能递归列出所有的子目录。

4.4 获取值get

get /foo1/foo1

4.5 修改值set

set /foo1/foo1 'newvalue'

4.6 删除节点delete

delete /foo1/foo1

注意只能删除子节点为空的节点;所以如果要删除一个节点,必须先把所有的子节点都删除。
如果要删除非空目录,还可以使用rmr命令。

作者:CodingCode
链接:https://www.jianshu.com/p/8d31ede99206
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

docker-compose搭建zookeeper集群环境 CodingCode的更多相关文章

  1. Docker中搭建zookeeper集群

    1.获取官方镜像 从dockerhub获取官方的zookeeper镜像: docker pull zookeeper 2.了解镜像内容 拉取完镜像后,通过 docker inspect zookeep ...

  2. 05.kafka提前准备工作:搭建zookeeper集群环境

    总体参考:http://www.cnblogs.com/zhangs1986/p/6564839.html 搭建之间同步下spark01.02.03的环境 复制/opt/flume这个文件夹到 spa ...

  3. 在本地模拟搭建zookeeper集群环境实例

    先给一堆学习文档,方便以后查看 官网文档地址大全: OverView(概述) http://zookeeper.apache.org/doc/r3.4.6/zookeeperOver.html Get ...

  4. docker 搭建zookeeper集群和kafka集群

    docker 搭建zookeeper集群 安装docker-compose容器编排工具 Compose介绍 Docker Compose 是 Docker 官方编排(Orchestration)项目之 ...

  5. docker容器中搭建kafka集群环境

    Kafka集群管理.状态保存是通过zookeeper实现,所以先要搭建zookeeper集群 zookeeper集群搭建 一.软件环境: zookeeper集群需要超过半数的的node存活才能对外服务 ...

  6. [转]ZooKeeper 集群环境搭建 (本机3个节点)

    ZooKeeper 集群环境搭建 (本机3个节点) 是一个简单的分布式同步数据库(或者是小文件系统) ------------------------------------------------- ...

  7. zookeeper集群环境搭建详细图文教程

    zookeeper集群环境搭建详细图文教程 zhoubang @ 2018-01-02 [文档大纲] 友情介绍 软件环境 注意点 环境安装 1. 新建用于存储安装包以及软件安装的目录 2. 下载安装z ...

  8. Linux环境下ZooKeeper集群环境搭建关键步骤

    ZooKeeper版本:zookeeper-3.4.9 ZooKeeper节点:3个节点 以下为Linux环境下ZooKeeper集群环境搭建关键步骤: 前提条件:已完成在Linux环境中安装JDK并 ...

  9. 如何搭建Zookeeper集群

     ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提供一致性服务的软件,提供的 ...

随机推荐

  1. 在ASP.NET Web API 2中使用Owin基于Token令牌的身份验证

    基于令牌的身份验证 基于令牌的身份验证主要区别于以前常用的常用的基于cookie的身份验证,基于cookie的身份验证在B/S架构中使用比较多,但是在Web Api中因其特殊性,基于cookie的身份 ...

  2. Spring @Import注解源码解析

    简介 Spring 3.0之前,创建Bean可以通过xml配置文件与扫描特定包下面的类来将类注入到Spring IOC容器内.而在Spring 3.0之后提供了JavaConfig的方式,也就是将IO ...

  3. 【开发笔记】- Grails框架定义一个不是数据库字段得属性

    实体类 class Book{ String name String author // myfiled 我不想他在数据库中生成book表的字段 String myfield } 添加声明 class ...

  4. Bugku 代码审计

    0x01.extract变量覆盖 代码: <?php$flag='xxx';extract($_GET);if(isset($shiyan)){$content=trim(file_get_co ...

  5. 使用Git Flow规范!

    Git Flow常用的分支 Production 分支 也就是我们经常使用的Master分支,这个分支最近发布到生产环境的代码,最近发布的Release, 这个分支只能从其他分支合并,不能在这个分支直 ...

  6. 安装centos6.10时,安装完成重启报错error 15,file not found

    今天在一台老式联想服务器上安装centos6.10操作系统,安装完成,重启时,出现报错 error 15, file not found...... 在百度上搜索到进grub编辑,可还是无法解决问题, ...

  7. springboot工程启动即执行一段代码

    最近在做一个项目, 需要Tomcat启动后就执行一段代码 在这里需要用到CommandLineRunner这个接口, Spring boot的CommandLineRunner接口主要用于实现在应用初 ...

  8. snowflake时间回退问题思考

    算法比较简单,每个id-generator负责生成的ID由3部分组成,41位时间戳可以表示到毫秒,10bit worker-id内部可自行划分,比如3位表示IDC,7位表示机器.最后12位是在一毫秒的 ...

  9. Python实现斐波那契数列,九九乘法表,金字塔方法。

    斐波那契数列普通函数实现 #普通函数 def fb(max): a,b=0,1 while a<max: print(a) a,b=b,a+b fb(100) 递归实现方法1 def fb1(m ...

  10. Pytorch: parameters(),children(),modules(),named_*区别

    nn.Module vs nn.functional 前者会保存权重等信息,后者只是做运算 parameters() 返回可训练参数 nn.ModuleList vs. nn.ParameterLis ...