【Docker】搭建Zookeeper集群

news2024/9/21 11:16:06

【Docker】搭建Zookeeper集群

下载镜像

docker pull zookeeper:3.5.8
wy:study wy$ docker pull zookeeper:3.5.8
3.5.8: Pulling from library/zookeeper

Digest: sha256:12af523731cbe390f5332d6c1e254f1d56c734a786910d5582653445a5cee299
Status: Downloaded newer image for zookeeper:3.5.8
docker.io/library/zookeeper:3.5.8
docker images

在这里插入图片描述

Standalone模式

启动容器

通过如下命令启动容器:

docker run -p 8080:8080 --name zookeeper-standalone --restart always -d zookeeper:3.5.8

上述命令在后台运行一个名为 zookeeper-standalone 的容器。由于 Zookeeper 是’快速失败’,因此最好通过 --retart参数设置容器在意外停止时自动重启。默认是 no,表示不重启。-p 参数将宿主机端口 8080 与容器端口 8080 映射。

通过如下命令查看运行中的 Zookeeper 容器:

[root@codingce0 docker]# docker ps


CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                  NAMES
2268f5dd10f2        zookeeper:3.5.8     "/docker-entrypoint.…"   8 minutes ago       Up 8 minutes        2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp, 8080/tcp   zookeeper-standalone

可以看到容器对外暴露了4个端口:2181 2888 3888 8080(分别是 Zookeeper 客户端端口,主从节点交互信息的端口,选举端口以及 AdminServer 端口)。暴露端口主要是镜像包含了 EXPOSE 2181 2888 3888 8080 命令,具体可以参阅镜像Dockerfile。

Zookeeper 3.5 版本开始提供 AdminServer 功能。AdminServer 是嵌入式 Jetty 服务器,为四字母命令提供 HTTP 接口。默认端口是8080。由于在启动容器时做了端口映射,可以直接通过 http://localhost:8080/commands/stats 进行访问。

在Docker中容器默认是无法与外部通信,需要将容器内的端口映射到本地宿主机的端口,这样用户通过访问宿主机指定端口时相当于访问容器内的端口。

进入容器

通过如下命令进入容器内:

docker exec -it zookeeper-standalone /bin/bash
root@2268f5dd10f2:/apache-zookeeper-3.5.8-bin#

容器的默认工作目录为 /apache-zookeeper-3.5.8-bin,是因为 Zookeeper 镜像做如下设置:

ARG DISTRO_NAME=apache-zookeeper-3.5.8-bin
WORKDIR $DISTRO_NAME

配置文件默认在 /conf 目录下,具体看一下默认配置:

root@2268f5dd10f2:/apache-zookeeper-3.5.8-bin# cat /conf/zoo.cfg
dataDir=/data
dataLogDir=/datalog
tickTime=2000
initLimit=5
syncLimit=2
autopurge.snapRetainCount=3
autopurge.purgeInterval=0
maxClientCnxns=60
standaloneEnabled=true
admin.enableServer=true
server.1=localhost:2888:3888;2181

可以使用 zkServer.sh status 命令来查看 Zookeeper 启动状态:

root@2268f5dd10f2:/apache-zookeeper-3.5.8-bin# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: standalone

连接Zookeeper服务

可以使用如下命令连接Zookeeper服务:

zkCli.sh -server 127.0.0.1:2181

可以不用先进入容器再连接Zookeeper服务,使用如下命令一步到位:

docker exec -it zookeeper-standalone zkCli.sh -server 127.0.0.1:2181

集群模式

搭建3个 Zookeeper 节点的集群。

启动容器

Docker Compose

Linux 上可以从 Github 上下载它的二进制包来使用,最新发行的版本地址:
https://github.com/docker/compose/releases
运行以下命令以下载 Docker Compose 的当前稳定版本:

sudo curl -L "https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

将可执行权限应用于二进制文件:

sudo chmod +x /usr/local/bin/docker-compose

创建软链

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

测试是否安装成功

docker-compose --version

启动容器操作

为了避免一个一个的启动,使用 docker-compose 的方式来启动 Zookeeper 集群。首先创建一个名为 docker-compose.yml 的文件, 其内容如下:
在这里插入图片描述

version: '3.1'

services:
  zoo1:
    image: zookeeper:3.5.8
    restart: always
    hostname: zoo1
    ports:
      - 2181:2181
    environment:
      ZOO_MY_ID: 1
      ZOO_SERVERS: server.1=0.0.0.0:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181

  zoo2:
    image: zookeeper:3.5.8
    restart: always
    hostname: zoo2
    ports:
      - 2182:2181
    environment:
      ZOO_MY_ID: 2
      ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=0.0.0.0:2888:3888;2181 server.3=zoo3:2888:3888;2181

  zoo3:
    image: zookeeper:3.5.8
    restart: always
    hostname: zoo3
    ports:
      - 2183:2181
    environment:
      ZOO_MY_ID: 3
      ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=0.0.0.0:2888:3888;2181

上述配置将以副本模式启动 Zookeeper 3.5.8,同时会告诉 Docker 运行三个 Zookeeper 容器:zoo1、zoo2、zoo3,并分别将本地的 2181, 2182, 2183 端口绑定到对应的容器的 2181 端口上。

ZOO_MY_ID 和 ZOO_SERVERS 是搭建 Zookeeper 集群需要设置的两个环境变量, 其中 ZOO_MY_ID 表示 Zookeeper 服务的 id, 它是1-255 之间的整数, 必须在集群中唯一。ZOO_SERVERS 是Zookeeper 集群的主机列表。

接着在 docker-compose.yml 当前目录下运行如下命令:
在这里插入图片描述

COMPOSE_PROJECT_NAME=zookeeper_cluster docker-compose up -d

或者指定配置文件名称 COMPOSE_PROJECT_NAME=zookeeper_cluster docker-compose -f docker-compose.yml up -d。
在 docker-compose up 前添加 COMPOSE_PROJECT_NAME=zookeeper_cluster 环境变量是为 compose 工程起一个名字。

COMPOSE_PROJECT_NAME=zookeeper_cluster docker-compose up -d
Creating network "zookeeper_cluster_default" with the default driver
Creating zookeeper_cluster_zoo1_1 ... done
Creating zookeeper_cluster_zoo3_1 ... done
Creating zookeeper_cluster_zoo2_1 ... done

通过docker p命令查看运行中的 Zookeeper 集群容器

[root@codingce0 docker]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                  NAMES
2268f5dd10f2        zookeeper:3.5.8     "/docker-entrypoint.…"   About an hour ago   Up About an hour    2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp, 8080/tcp   zookeeper_cluster-zoo1-1
1e08efd91c98        zookeeper:3.5.8     "/docker-entrypoint.…"   About an hour ago   Up About an hour    2888/tcp, 3888/tcp, 8080/tcp, 0.0.0.0:2182->2181/tcp   zookeeper_cluster-zoo2-1
0006137a82f2        zookeeper:3.5.8     "/docker-entrypoint.…"   About an hour ago   Up About an hour    2888/tcp, 3888/tcp, 8080/tcp, 0.0.0.0:2183->2181/tcp   zookeeper_cluster-zoo3-1
[root@codingce0 docker]#

进入容器

通过docker exec -it zookeeper_clusteroo1-1 /bin/bash命令进入 zookeeper_cluster-zoo1-1 容器内:

[root@codingce0 docker]# docker exec -it zookeeper_cluster-zoo1-1 /bin/bash
root@zoo1:/apache-zookeeper-3.5.8-bin#

zkServer.sh status 查看 Zookeeper 的启动状态

root@zoo1:/apache-zookeeper-3.5.8-bin# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower
root@zoo1:/apache-zookeeper-3.5.8-bin#

可以看到该节点是 Follower 节点,以此类推,查看 zookeeper_cluster-zoo2-1、zookeeper_cluster-zoo3-1 容器的启动状态:

[root@codingce0 docker]# docker exec -it zookeeper_cluster-zoo2-1 /bin/bash
root@zoo2:/apache-zookeeper-3.5.8-bin# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower
root@zoo2:/apache-zookeeper-3.5.8-bin#

[root@codingce0 docker]# docker exec -it zookeeper_cluster-zoo3-1 /bin/bash
root@zoo3:/apache-zookeeper-3.5.8-bin# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: leader

创建了一个主节点Leader,2个从节点Follower。

连接Zookeeper服务

zkCli.sh -server localhost:2181

在这里插入图片描述
zoo1, zoo2, zoo3 的 2181 端口分别映射到了本地主机的 2181, 2182, 2183 端口上, 因此使用如下命令连接 Zookeeper 集群:

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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/141829.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Allegro174版本新功能介绍之动态铜皮对单独层面参数设置

Allegro174版本新功能介绍之动态铜皮对单独层面参数设置 Allegro升级到了174版本的时候,可以支持动态铜皮对单独的层面进行参数设置,如下图 具体操作如下 在低版本166以及172的时候,只有Global Dynamic Shape Parameter设置,如下图,只有全局的铜皮参数设置升级到了174时候…

WMS智能仓储管理系统源码 SpringMVC物流仓库管理系统源码

淘源码:国内知名的源码免费下载平台 需要源码学习可私信我。 系统介绍: 基于SpringMVCHibernatMinidao(类Mybatis)Easyui(UI库) Jquery Boostrap Ehcache Redis Ztree等基础架构开发的物流仓库管理系…

人脸识别:我是如何工作的?

任何自动人脸识别过程都必须考虑导致其复杂性的几个因素,因为人脸是一个动态实体,在多个因素的影响下不断变化,例如光照、姿势、年龄……这三个参数中的任何一个的变化都会导致同一个人的两幅图像之间的误差值大于不同个体的两幅图像之间的误…

分享136个PHP源码,总有一款适合您

PHP源码 分享136个PHP源码,总有一款适合您 136个PHP源码下载链接:https://pan.baidu.com/s/1A5sR357dh_SlS7pu33lW1Q?pwdkzgn 提取码:kzgn import os# 查找指定文件夹下所有相同名称的文件 def search_file(dirPath, fileName):dirs os…

红中私教-文件上传漏洞DVWA靶场实战(浅析)

前言 🍀作者简介:被吉师散养、喜欢前端、学过后端、练过CTF、玩过DOS、不喜欢java的不知名学生。 🍁个人主页:红中 首先呢,针对于文件上传漏洞 这个漏洞为什么存在?目的是什么?我们为什幺要攻击…

开发环境和测试环境共用Eureka

问题描述 在开发过程中会遇到一种情况,那就是只需要修改一个服务,但是这个服务依赖了其他的3个服务,导致开发人员在本地也要启动其他的3个服务,还要启动一个Eureka注册中心。问题显而易见,在依赖过多的情况下&#xf…

一种多维数据库的数据事务专利解读

什么是事务? 事务是数据库系统中的核心机制。我们要理解下事务概念:什么是事务呢?事务是并发控制的单位,是用户定义的一个操作序列。有四个特性(ACID): 原子性(Atomicity): 事务是数据库的逻辑工作单位&…

使用 VSCode 开发的必备插件,你都安装了吗?

0️⃣前言 VSCode是由微软研发的一款免费、开源的跨平台代码编辑器,目前是前端开发使用最多的一款软件开发工具。 因为每个开发者所接触项目、所有技术不同, 用到的插件不同, 但总有几个插件基本是必备的, 以下就给出一些插件推荐,希望能给大家一些参考。…

腾讯会议发布录屏工具“会记”,让云端视频协作随用随录、随享随看

随着云端协同成为新常态,企业和组织沟通的形式也在不断丰富。1月5日,腾讯会议发布云端录屏工具“会记”, 用户在腾讯会议中就能自由使用人像、屏幕、声音、窗口等多种组合方式进行录制,录制完成后视频将自动上传至云端&#xff0c…

Centos7.9安装WebLogic详细步骤

目录 一、weblogic下载 二、准备环境 三、创建用户和组 四、安装jdk 安装 五、安装WebLogic 1、使用root用户创建目录/opt/weblogic并授权 2.创建 oraInst.loc 文件 3、创建wls.rsp 响应文件 4、安装weblogic 5、静默创建域 六、启动weblogic 一、weblogic下载 直…

程序员面试中一面、二面、三面有什么区别?

很多公司面试都分一面、二面、三面甚至更多,大家可能会好奇,为什么要面这么多面,每一面又有啥区别呢? 首先我来回答下为什么要这么多面,最核心的是最后3点: 如果光是一个人面,担心会看走眼&…

解决IDEA中ctrl+shift+f快捷键搜索没反应的问题

文章目录0写在前面1 问题解决1.1 直接切换英文输入法1.2 win10 输入法1.3 搜狗输入法1.4 其他2 写在末尾0写在前面 今天想使用《在文件中查询》功能,使用ctrlshiftf进行搜索的时候,疯狂的按组合键一直没用。最后用手点的…… 原因是IDEA的快捷键与输入…

【 java 集合】List接口常用方法总结

📋 个人简介 💖 作者简介:大家好,我是阿牛,全栈领域优质创作者。😜📝 个人主页:馆主阿牛🔥🎉 支持我:点赞👍收藏⭐️留言&#x1f4d…

五、条件构造器和常用接口

文章目录五、条件构造器和常用接口1、wapper介绍2、QueryWrapper2.1 例1:组装查询条件2.2 例2:组装排序条件2.3 例3:组装删除条件2.4 例4:条件的优先级2.5 例5:组装select子句2.6 例6:实现子查询3、UpdateW…

基于opencv的数字识别系统

一、目的 想要实现的功能:帮助我们在泵中扫描燃油,并在应用程序中输入燃油信息。 所需技术:①python程序对于拍摄的汽油泵的图像,尝试从中读取数字。——opencv实现。②先使用python对其进行原型设计,然后将代码转换…

TiDB分布式数据库部署与安装详解

TiUP 是 TiDB 4.0 版本引入的集群运维工具,TiUP cluster 是 TiUP 提供的使用 Golang 编写的集群管理组件,通过 TiUP cluster 组件就可以进行日常的运维工作,包括部署、启动、关闭、销毁、弹性扩缩容、升级 TiDB 集群,以及管理 TiD…

EMQX Enterprise 4.4.124.4.13 发布:集群负载重平衡、TDengine 3.0 适配以及子表批量插入

我们很高兴地告诉大家,EMQX Enterprise 4.4.12 以及 4.4.13 版本正式发布! 在本次发布中,我们带来了集群负载重平衡与节点疏散功能为运维人员提供更灵活的集群管理方式,适配了 TDengine 3.0 版本并新增分表批量插入功能&#xff…

ECMAScript 2022 中的新特性!

新钛云服已累计为您分享718篇技术干货本文盘点ECMAScript 2022 中的新特性,包括顶级等待、RegExp 匹配索引、新的公共和私有类字段等。一、公共和私有实例字段最新的 ES13 规范允许我们将成员字段内联定义为类主体的一部分,我们可以使用#来表示私有字段。…

Python打包(问题记录,带解决)

引言 文章用于测试在Python3.8的版本,打包Obspy地震包,最后集成到PyQt5上。 部署或冻结应用程序是 Python 项目的重要组成部分, 这意味着捆绑所有必需的资源,以便应用程序找到它需要的一切 能够在客户端计算机上运行。 但是&…

Ethereum 基础(一)

以太坊(Ethereum)是社区运行的技术,为加密货币以太币(ETH)和数千个去中心化应用程序提供动力。 ethereum.org是您进入以太坊世界的门户。这项技术是新的、不断发展的——有个向导会有帮助。如果你想深入研究,我们建议你这样做。 …