小哥之哥 小哥之哥
首页
    • Prometheus
    • Kubertenes
    • Docker
    • MySQL
  • Go
  • Python
  • Vue
  • Jenkins
  • ELK
  • LDAP
  • 随笔
  • 最佳实践
  • 博客搭建
  • 问题杂谈
关于
友链
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

小哥之哥

运维扫地僧
首页
    • Prometheus
    • Kubertenes
    • Docker
    • MySQL
  • Go
  • Python
  • Vue
  • Jenkins
  • ELK
  • LDAP
  • 随笔
  • 最佳实践
  • 博客搭建
  • 问题杂谈
关于
友链
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Kubertenes

  • Prometheus

  • Docker

    • Docker实战

      • Docker 部署Confluence15.2
      • Docker 部署Jira8.1.0
      • Docker 部署Gitlab11.10.4
      • Docker 部署ELK6.6
      • Docker 部署ELK之Sentinl日志报警
      • Docker 部署MySQL5.7.20
      • Apollo分布式Docker部署
      • Docker部署Gitlab 16.2.0
      • Docker部署zookeeper3.6集群
        • Docker部署kafka3.4集群
        • Docker 部署Redis6.2.6
        • Docker构建多架构镜像
      • Docker杂谈

    • 数据库

    • 运维利器

    • 运维
    • Docker
    • Docker实战
    tchua
    2023-08-03
    目录

    Docker部署zookeeper3.6集群

    # 一、Zookeeper介绍


    Zookeeper是一个开源的分布式协调服务,主要用于管理和协调分布式系统中的大量节点。它由Apache软件基金会开发和维护,为构建可靠、高性能、分布式应用程序提供支持。

    Zookeeper的设计目标是为分布式应用提供一致性、可靠性和高性能的服务,使得分布式应用可以更轻松地处理节点故障、数据同步、配置管理、服务发现等问题。它为开发人员提供了一个分布式的数据存储和协调解决方案,使得分布式系统中的各个节点能够相互协作,共享信息,并在节点发生故障时维护系统的一致性。

    Zookeeper的工作原理主要基于“Zab”(ZooKeeper Atomic Broadcast)协议,该协议保证了数据在分布式系统中的原子广播,确保所有节点都能以相同的顺序接收到更新。

    # 二、应用场景


    • 分布式配置管理:各个节点可以共享和管理配置信息,当配置变化时,通知所有相关节点。

    • 服务发现:允许节点动态地发现和加入到分布式系统中的服务。

    • 分布式锁:实现分布式系统中的同步和互斥,以确保数据的一致性和正确性。

    • 集群管理:监视节点状态,处理节点故障,维护集群的健康状态。

    • 队列管理:实现分布式队列,用于协调和控制任务的执行顺序。

    # 三、集群部署


    # 3.1 机器规划

    zookeeper版本: 3.6

    主机 IP 端口
    kafka-zk-01 172.16.10.79 2181,2888,3888
    kafka-zk-01 172.16.10.80 2181,2888,3888
    kafka-zk-01 172.16.10.81 2181,2888,3888
    # 3.2 镜像下载

    更多版本参考:zookeeper官方镜像 (opens new window)

    docker pull zookeeper:3.6
    
    1
    # 3.3 配置准备

    创建宿主机映射目录

    mkdir /opt/zookeeper/{conf,data,logs} -p
    
    1

    新建配置文件:mkdir /opt/zookeeper/{conf,data,logs} -p

    # vim /opt/zookeeper/conf/zoo.cfg
    clientPort=2181 
    dataDir=/data
    dataLogDir=/datalog
    tickTime=2000
    initLimit=5
    syncLimit=2
    autopurge.snapRetainCount=3
    autopurge.purgeInterval=0
    maxClientCnxns=60
    server.1=172.16.10.79:2888:3888;2181
    server.2=172.16.10.80:2888:3888;2181
    server.3=172.16.10.81:2888:3888;2181
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13

    配置zookeeper主机id,每个机器id不能相同,同一个集群中,必须唯一,并且需要对应配置文件中server后面的值

    [root@kafka-zk-01 ~]# echo "1" > /opt/zookeeper/data/myid
    [root@kafka-zk-02 ~]# echo "2" > /opt/zookeeper/data/myid
    [root@kafka-zk-03 ~]# echo "3" > /opt/zookeeper/data/myid
    
    1
    2
    3

    参数解释

    配置文件:

    • autopurge.snapRetainCount: 自动清理(autopurge)保留的快照文件数量。当Zookeeper服务器保存的快照文件超过此数量时,旧的快照文件将被自动删除。
    • autopurge.purgeInterval: 自动清理(autopurge)运行的时间间隔。设置为0将禁用自动清理,否则,Zookeeper将在指定的时间间隔内检查并执行清理操作。
    • server.x: 这里的"x"代表Zookeeper集群中的每个服务器的编号。格式为server.ID=hostname:peerPort:leaderPort;clientPort。其中hostname是服务器的IP地址或主机名,peerPort是该服务器与其他Zookeeper服务器通信的端口号,leaderPort是用于选举Leader的端口号,clientPort是主机端口,3.5版本之后才加入。
    # 3.4 启动

    容器网络采用的是host模式,因此不需要再进行端口映射,三台机器上zk部署,基本类似,只有myid每个机器需要有唯一值

    docker run --network host --restart=always \
     -v /opt/zookeeper/data:/data \
     -v /opt/zookeeper/conf:/conf \
     -v /opt/zookeeper/logs:/datalog \
     --name zookeeper -d zookeeper:3.6
    
    1
    2
    3
    4
    5

    启动参数:

    • /opt/zookeeper/data:/data : 数据目录
    • /opt/zookeeper/conf:/conf : 配置文件
    • /opt/zookeeper/logs:/datalog: 日志目录
    # 3.5 集群状态查看
    • kafka-zk-01
    [root@kafka-zk-01 ~]# docker exec -it zookeeper /bin/bash
    root@kafka-zk-01:/apache-zookeeper-3.6.4-bin# ./bin/zkServer.sh status
    ZooKeeper JMX enabled by default
    Using config: /conf/zoo.cfg
    Client port found: 2181. Client address: localhost. Client SSL: false.
    Mode: follower
    
    1
    2
    3
    4
    5
    6
    • kafka-zk-02
    [root@kafka-zk-02 ~]# docker exec -it zookeeper /bin/bash
    root@kafka-zk-02:/apache-zookeeper-3.6.4-bin# ./bin/zkServer.sh status
    ZooKeeper JMX enabled by default
    Using config: /conf/zoo.cfg
    Client port found: 2181. Client address: localhost. Client SSL: false.
    Mode: follower
    
    1
    2
    3
    4
    5
    6
    • kafka-zk-03
    [root@kafka-zk-03 ~]# docker exec -it zookeeper /bin/bash
    root@kafka-zk-03:/apache-zookeeper-3.6.4-bin# ./bin/zkServer.sh status
    ZooKeeper JMX enabled by default
    Using config: /conf/zoo.cfg
    Client port found: 2181. Client address: localhost. Client SSL: false.
    Mode: leader
    
    1
    2
    3
    4
    5
    6

    可以看到kafka-zk-03节点为主节点,另外两台为从节点

    编辑 (opens new window)
    #Docker
    上次更新: 2023/08/03, 16:46:14
    Docker部署Gitlab 16.2.0
    Docker部署kafka3.4集群

    ← Docker部署Gitlab 16.2.0 Docker部署kafka3.4集群→

    最近更新
    01
    cert-manager自动签发Lets Encrypt
    09-05
    02
    Docker构建多架构镜像
    08-02
    03
    Prometheus数据迁移至VMstorage
    08-01
    更多文章>
    Theme by Vdoing | Copyright © 2023-2024 |豫ICP备2021026650号
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式