前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【docker】zookeeper 容器部署

【docker】zookeeper 容器部署

原创
作者头像
用户3052869
修改2024-03-25 10:28:57
2050
修改2024-03-25 10:28:57

ZooKeeper标准软件基于Bitnami ZooKeeper 构建。当前版本为3.9.2

你可以通过Qinghub部署工具直接安装部署,也可以手动按如下文档操作

什么是Zookeeper

zooKeeper 是一个开放源码的分布式协调服务,主要为了解决分布式架构下数据一致性问题, 它是集群的管理者, 监视着集群中各个节点的状态,根据节点提交的反馈进行下一步合理操作。 最终, 将简单易用的接口和性能高效、 功能稳定的系统提供给用户

连接容器

使用Docker 容器网络,应用程序容器可以轻松访问容器内运行的 Apache ZooKeeper 服务器。

连接到同一网络的容器可以使用容器名称作为主机名来相互通信。

使用命令行

在此示例中,我们将创建一个 Apache ZooKeeper 客户端实例,该实例将连接到与客户端在同一 Docker 网络上运行的服务器实例。

第 1 步:创建网络
代码语言:console
复制
docker network create app-tier --driver bridge
步骤 2:启动 Apache ZooKeeper 服务器实例

使用命令--network app-tier的参数docker run将 Apache ZooKeeper 容器连接到网络app-tier。

代码语言:console
复制
docker run -d --name zookeeper-server \
    --network app-tier \
    registry.cn-hangzhou.aliyuncs.com/qingcloudtech/zookeeper:latest
第 3 步:启动 Apache ZooKeeper 客户端实例

最后,我们创建一个新的容器实例来启动 Apache ZooKeeper 客户端并连接到上一步中创建的服务器:

代码语言:console
复制
docker run -it --rm \
    --network app-tier \
    registry.cn-hangzhou.aliyuncs.com/qingcloudtech/zookeeper:latest zkCli.sh -server zookeeper-server:2181  get /

使用 Docker Compose 文件

如果未指定,Docker Compose 会自动设置一个新网络并将所有已部署的服务附加到该网络。但是,我们将显式定义一个bridge名为app-tier的新网络。在此示例中,我们假设您希望从您自己的自定义应用程序映像连接到 Apache ZooKeeper 服务器,该映像在以下代码段中通过服务名称进行标识myapp。

代码语言:yaml
复制
version: '2'

networks:
  app-tier:
    driver: bridge

services:
  zookeeper:
    image: 'registry.cn-hangzhou.aliyuncs.com/qingcloudtech/zookeeper:latest'
    networks:
      - app-tier
  myapp:
    image: 'YOUR_APPLICATION_IMAGE'
    networks:
      - app-tier

重要: 替换YOUR_APPLICATION_IMAGE占位符 在您的应用程序容器中,使用主机名zookeeper连接到 Apache ZooKeeper 服务器 启动容器:

代码语言:console
复制
docker-compose up -d

配置

可以使用以下环境变量设置配置:

  • ZOO_PORT_NUMBER:Apache ZooKeeper 客户端端口。默认值:2181docker run --name zookeeper -e ZOO_SERVER_ID=1 registry.cn-hangzhou.aliyuncs.com/qingcloudtech/zookeeper:latest或修改docker-compose.yml文件:
  • ZOO_SERVER_ID: ensemble 中服务器的 ID。默认值:1
  • ZOO_TICK_TIME:Apache ZooKeeper 用于心跳的基本时间单位(以毫秒为单位)。默认值:2000
  • ZOO_PRE_ALLOC_SIZE':事务日志文件的块大小。默认值:65536
  • ZOO_SNAPCOUNT:在拍摄快照(以及事务日志滚动)之前事务日志中记录的事务数。默认值:100000
  • ZOO_INIT_LIMIT:Apache ZooKeeper 用于限制仲裁中的 Apache ZooKeeper 服务器必须连接到领导者的时间长度。默认值:10
  • ZOO_SYNC_LIMIT:服务器距离领导者有多远。默认值:5
  • ZOO_MAX_CNXNS:限制可与 Apache ZooKeeper 服务器建立的并发连接总数。将其设置为 0 可以完全消除限制。默认值:0
  • ZOO_MAX_CLIENT_CNXNS:限制单个客户端可以与 Apache ZooKeeper 整体的单个成员建立的并发连接数。默认值:60
  • ZOO_4LW_COMMANDS_WHITELIST:列入白名单的4LW命令列表。默认值:srvr、mntr
  • ZOO_SERVERS:逗号、空格或分号分隔的服务器列表。示例:zoo1:2888:3888、zoo2:2888:3888 或如果指定服务器 ID Zoo1:2888:3888::1、zoo2:2888:3888::2。默认值:无默认值。
  • ZOO_CLIENT_USER:将使用 Apache ZooKeeper 客户端进行身份验证的用户。默认值:无默认值。
  • ZOO_CLIENT_PASSWORD:将使用 Apache ZooKeeper 客户端进行身份验证的密码。默认值:无默认值。
  • ZOO_CLIENT_PASSWORD_FILE:包含 Apache ZooKeeper 客户端用于执行身份验证的密码的文件的绝对路径。默认值:无默认值。
  • ZOO_SERVER_USERS:以逗号、分号或空格分隔的要创建的用户列表。示例:用户1、用户2、管理员。默认值:无默认值
  • ZOO_SERVER_PASSWORDS:逗号、分号或空格分隔的密码列表,在创建时分配给用户。示例:pass4user1、pass4user2、pass4admin。默认值:无默认值
  • ZOO_SERVER_PASSWORDS_FILE:文件的绝对路径,该文件包含逗号、分号或空格分隔的密码列表,以便在创建时分配给用户。示例:pass4user1、pass4user2、pass4admin。默认值:无默认值
  • ZOO_ENABLE_AUTH:启用 Apache ZooKeeper 身份验证。它使用 SASL/Digest-MD5。默认值:no
  • ZOO_RECONFIG_ENABLED:启用 Apache ZooKeeper 动态重新配置。默认值:no
  • ZOO_LISTEN_ALLIPS_ENABLED:侦听来自所有可用 IP 地址上的对等方的连接。默认值:no
  • ZOO_AUTOPURGE_INTERVAL:触发自动清除任务的时间间隔(以小时为单位)。设置为正整数(1 及以上)以启用自动清除旧快照和日志文件。默认值:0
  • ZOO_MAX_SESSION_TIMEOUT:服务器允许客户端协商的最大会话超时(以毫秒为单位)。默认值:40000
  • ZOO_AUTOPURGE_RETAIN_COUNT:启用自动清除后,Apache ZooKeeper 会将 dataDir 和 dataLogDir 中的最新快照和相应事务日志分别保留到此编号,并删除其余的。最小值为 3。默认值:3
  • ZOO_HEAP_SIZE:Java 堆选项(Xmx 和 XMs)的大小(以 MB 为单位)。如果通过配置 Xmx 和 Xms,则忽略此环境变量JVMFLAGS。默认值:1024
  • ZOO_ENABLE_PROMETHEUS_METRICS:公开 Prometheus 指标。默认值:no
  • ZOO_PROMETHEUS_METRICS_PORT_NUMBER:Jetty 服务器将公开 Prometheus 指标的端口。默认值:7000
  • ALLOW_ANONYMOUS_LOGIN:如果设置为 true,则允许接受未经身份验证的用户的连接。默认值:no
  • ZOO_LOG_LEVEL:Apache ZooKeeper 日志级别。可用级别有:ALL、DEBUG、INFO、WARN、ERROR、FATAL、OFF、TRACE。默认值:INFO
  • JVMFLAGS:Apache ZooKeeper 进程的默认 JVMFLAGS。默认值:无默认值
  • ZOO_TLS_CLIENT_ENABLE:启用 tls 进行客户端通信。默认值:false
  • ZOO_TLS_PORT_NUMBER:Zookeeper TLS 端口。默认值:3181
  • ZOO_TLS_CLIENT_KEYSTORE_FILE:密钥库文件:默认值:无默认值
  • ZOO_TLS_CLIENT_KEYSTORE_PASSWORD:KeyStore文件密码。这可以是一个环境变量。它将由 bash 评估。默认值:无默认值
  • ZOO_TLS_CLIENT_TRUSTSTORE_FILE:TrustStore 文件:默认值:无默认值
  • ZOO_TLS_CLIENT_TRUSTSTORE_PASSWORD:TrustStore 文件密码。这可以是一个环境变量。它将由 bash 评估。默认值:无默认值
  • ZOO_TLS_CLIENT_AUTH:指定对来自客户端的 TLS 连接进行身份验证的选项。可用值有:none、want、need。默认:need
  • ZOO_TLS_QUORUM_ENABLE:启用 tls 进行仲裁通信。默认值:false
  • ZOO_TLS_QUORUM_KEYSTORE_FILE:密钥库文件:默认值:无默认值
  • ZOO_TLS_QUORUM_KEYSTORE_PASSWORD:KeyStore文件密码。这可以是一个环境变量。它将由 bash 评估。默认值:无默认值
  • ZOO_TLS_QUORUM_TRUSTSTORE_FILE:TrustStore 文件:默认值:无默认值
  • ZOO_TLS_QUORUM_TRUSTSTORE_PASSWORD:TrustStore 文件密码。这可以是一个环境变量。它将由 bash 评估。默认值:无默认值
  • ZOO_TLS_QUORUM_CLIENT_AUTH:指定对来自客户端的 TLS 连接进行身份验证的选项。可用值有:none、want、need。默认:need
  • ZOO_ENABLE_ADMIN_SERVER:启用管理服务器。默认值:yes
  • ZOO_ADMIN_SERVER_PORT_NUMBER:管理服务器端口。默认值:8080
  • ZOO_PEER_TYPE:Zookeeper 节点对等类型。默认值:无默认值
代码语言:yaml
复制
services:
  zookeeper:
  ...
    environment:
      - ZOO_SERVER_ID=1
  ...

Apache ZooKeeper 配置

该镜像配置存放在/opt/bitnami/zookeeper/conf/目录中。

代码语言:console
复制
docker run --name zookeeper -v /path/to/zoo.cfg:/opt/bitnami/zookeeper/conf/zoo.cfg  registry.cn-hangzhou.aliyuncs.com/qingcloudtech/zookeeper:latest

之后,您的更改将被考虑到服务器的行为中。

第 1 步:运行 Apache ZooKeeper 映像

运行 Apache ZooKeeper 容器,从主机安装目录。

代码语言:console
复制
docker run --name zookeeper -v /path/to/zoo.cfg:/opt/bitnami/zookeeper/conf/zoo.cfg registry.cn-hangzhou.aliyuncs.com/qingcloudtech/zookeeper:latest

或使用 Docker Compose:

代码语言:yaml
复制
version: '2'

services:
  zookeeper:
    image: 'registry.cn-hangzhou.aliyuncs.com/qingcloudtech/zookeeper:latest'
    ports:
      - '2181:2181'
    volumes:
      - /path/to/zoo.cfg:/opt/bitnami/zookeeper/conf/zoo.cfg
第 2 步:编辑配置

使用您喜欢的编辑器编辑主机上的配置。

代码语言:console
复制
vi /path/to/zoo.cfg
第 3 步:重新启动 Apache ZooKeeper

更改配置后,重新启动 Apache ZooKeeper 容器以使更改生效。

代码语言:console
复制
docker restart zookeeper

或使用 Docker Compose:

代码语言:console
复制
docker-compose restart zookeeper

安全

通过传递环境变量可以轻松启用基于 SASL/Digest-MD5 的身份验证ZOO_ENABLE_AUTH。启用 Apache ZooKeeper 身份验证时,还需要传递能够登录的用户和密码列表。

注意:使用 CLI 工具启用身份验证zkCli.sh。ZOO_CLIENT_USER因此,设置ZOO_CLIENT_PASSWORD环境变量也是有必要的 。

代码语言:console
复制
docker run -it -e ZOO_ENABLE_AUTH=yes \
               -e ZOO_SERVER_USERS=user1,user2 \
               -e ZOO_SERVER_PASSWORDS=pass4user1,pass4user2 \
               -e ZOO_CLIENT_USER=user1 \
               -e ZOO_CLIENT_PASSWORD=pass4user1 \
               registry.cn-hangzhou.aliyuncs.com/qingcloudtech/zookeeper

或修改docker-compose.yml文件:

代码语言:yaml
复制
services:
  zookeeper:
  ...
    environment:
      - ZOO_ENABLE_AUTH=yes
      - ZOO_SERVER_USERS=user1,user2
      - ZOO_SERVER_PASSWORDS=pass4user1,pass4user2
      - ZOO_CLIENT_USER=user1
      - ZOO_CLIENT_PASSWORD=pass4user1
  ...

设置 Apache ZooKeeper 整体

可以使用以下环境变量通过 Apache ZooKeeper Docker 映像轻松设置Apache ZooKeeper ( https://zookeeper.apache.org/doc/r3.1.2/zookeeperAdmin.html ) 集群:

ZOO_SERVERS:逗号、空格或分号分隔的服务器列表。这可以在指定或不指定集合中服务器的 ID 的情况下完成。没有默认值。例子:

没有服务器 ID - zoo1:2888:3888,zoo2:2888:3888

带有服务器 ID - zoo1:2888:3888::1,zoo2:2888:3888::2

没有服务器ID和观察者-zoo1:2888:3888,zoo2:2888:3888:observer

带有服务器 ID 和观察者 - Zoo1:2888:3888::1,zoo2:2888:3888:observer::2

为了获得可靠的 Apache ZooKeeper 服务,您应该将 Apache ZooKeeper 部署在称为集成的集群中。只要大多数节点都已启动,该服务就可用。由于 Apache ZooKeeper 需要多数,因此最好使用奇数台机器。例如,四台机器的 Apache ZooKeeper 只能处理单台机器的故障;如果两台机器出现故障,剩下的两台机器不占多数。然而,有了五台机器,Apache ZooKeeper 就可以处理两台机器的故障。

您必须使用 0.0.0.0 作为服务器的主机。更具体地说,如果zookeeper1容器启动的ID是1,那么ZOO_SERVERS环境变量必须是0.0.0.0:2888:3888,zookeeper2:2888:3888,zookeeper3:2888:3888,或者如果zookeeper服务器的ID不是-sequential 那么需要指定它们 0.0.0.0:2888:3888::2,zookeeper2:2888:3888::4.zookeeper3:2888:3888::6

见下文:

创建 Docker 网络以通过 docker 容器名称相互可见

代码语言:console
复制
docker network create app-tier --driver bridge
步骤1:创建第一个节点

第一步是创建一个 Apache ZooKeeper 实例。

代码语言:console
复制
docker run --name zookeeper1 \
  --network app-tier \
  -e ZOO_SERVER_ID=1 \
  -e ZOO_SERVERS=0.0.0.0:2888:3888,zookeeper2:2888:3888,zookeeper3:2888:3888 \
  -p 2181:2181 \
  -p 2888:2888 \
  -p 3888:3888 \
  registry.cn-hangzhou.aliyuncs.com/qingcloudtech/zookeeper:latest
步骤2:创建第二个节点

接下来我们启动一个新的 Apache ZooKeeper 容器。

代码语言:console
复制
docker run --name zookeeper2 \
  --network app-tier \
  -e ZOO_SERVER_ID=2 \
  -e ZOO_SERVERS=zookeeper1:2888:3888,0.0.0.0:2888:3888,zookeeper3:2888:3888 \
  -p 2181:2181 \
  -p 2888:2888 \
  -p 3888:3888 \
  registry.cn-hangzhou.aliyuncs.com/qingcloudtech/zookeeper:latest

####步骤3:创建第三个节点

接下来我们启动另一个新的 Apache ZooKeeper 容器。

代码语言:console
复制
docker run --name zookeeper3 \
  --network app-tier \
  -e ZOO_SERVER_ID=3 \
  -e ZOO_SERVERS=zookeeper1:2888:3888,zookeeper2:2888:3888,0.0.0.0:2888:3888 \
  -p 2181:2181 \
  -p 2888:2888 \
  -p 3888:3888 \
  registry.cn-hangzhou.aliyuncs.com/qingcloudtech/zookeeper:latest

您现在已经启动并运行了一个两节点 Apache ZooKeeper 集群。您可以通过添加/删除从属服务器来扩展集群,而不会导致任何停机。

通过 Docker Compose,可以使用以下命令设置整体:

代码语言:yaml
复制
version: '2'

services:
  zookeeper1:
    image: 'registry.cn-hangzhou.aliyuncs.com/qingcloudtech/zookeeper:latest'
    ports:
      - '2181'
      - '2888'
      - '3888'
    volumes:
      - /path/to/zookeeper-persistence:/bitnami/zookeeper
    environment:
      - ZOO_SERVER_ID=1
      - ZOO_SERVERS=0.0.0.0:2888:3888,zookeeper2:2888:3888,zookeeper3:2888:3888
  zookeeper2:
    image: 'registry.cn-hangzhou.aliyuncs.com/qingcloudtech/zookeeper:latest'
    ports:
      - '2181'
      - '2888'
      - '3888'
    volumes:
      - /path/to/zookeeper-persistence:/bitnami/zookeeper
    environment:
      - ZOO_SERVER_ID=2
      - ZOO_SERVERS=zookeeper1:2888:3888,0.0.0.0:2888:3888,zookeeper3:2888:3888
  zookeeper3:
    image: 'registry.cn-hangzhou.aliyuncs.com/qingcloudtech/zookeeper:latest'
    ports:
      - '2181'
      - '2888'
      - '3888'
    volumes:
      - /path/to/zookeeper-persistence:/bitnami/zookeeper
    environment:
      - ZOO_SERVER_ID=3
      - ZOO_SERVERS=zookeeper1:2888:3888,zookeeper2:2888:3888,0.0.0.0:2888:3888

使用 TLS 启动 Apache ZooKeeper

代码语言:console
复制
docker run --name zookeeper \
  -v /path/to/domain.key:/bitnami/zookeeper/certs/domain.key:ro
  -v /path/to/domain.crs:/bitnami/zookeeper/certs/domain.crs:ro
  -e ALLOW_EMPTY_PASSWORD=yes \
  -e ZOO_TLS_CLIENT_ENABLE=yes \
  -e ZOO_TLS_CLIENT_KEYSTORE_FILE=/bitnami/zookeeper/certs/domain.key\
  -e ZOO_TLS_CLIENT_TRUSTSTORE_FILE=/bitnami/zookeeper/certs/domain.crs\
  registry.cn-hangzhou.aliyuncs.com/qingcloudtech/zookeeper:latest

日志

代码语言:console
复制
docker logs zookeeper

或使用 Docker Compose:

代码语言:console
复制
docker-compose logs zookeeper

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是Zookeeper
  • 连接容器
    • 使用命令行
      • 第 1 步:创建网络
      • 步骤 2:启动 Apache ZooKeeper 服务器实例
      • 第 3 步:启动 Apache ZooKeeper 客户端实例
    • 使用 Docker Compose 文件
    • 配置
      • Apache ZooKeeper 配置
        • 第 1 步:运行 Apache ZooKeeper 映像
        • 第 2 步:编辑配置
        • 第 3 步:重新启动 Apache ZooKeeper
      • 安全
        • 设置 Apache ZooKeeper 整体
          • 步骤1:创建第一个节点
          • 步骤2:创建第二个节点
        • 使用 TLS 启动 Apache ZooKeeper
        • 日志
        相关产品与服务
        容器服务
        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
        http://www.vxiaotou.com