[Docker Learning]——zookeeper deployed by docker-compose

Preface

   基于若依框架,慢慢学习,总结笔记
   该篇文章,博主使用了两台服务器。由于zookeeper需要三个服务才能做选举。所以我在服务器A上搭了一个zookeeper,服务器B上搭了两个zookeeper

1. Build the zookeeper file directory structure

Insert image description here

2.The path and content of the zookeeper configuration file

Insert image description here

  • Server A

# 存储快照文件snapshot的目录(相当于redis的rdb)
dataDir=/data

# ZK中的一个时间单元。ZK中所有时间都是以这个时间单元为基础,进行整数倍配置的。例如,session的最小超时时间是2*tickTime
tickTime=2000

# 初始值显示的刻度数,同步阶段可能需要
initLimit=10

# 发送请求和获得确认之间可以传递的心跳数
syncLimit=5

# 暴露服务端对外端口
clientPort=2181

# 单个客户端与单台服务器之间的连接数的限制,是ip级别的,默认是60,如果设置为0,那么表明不作任何限制
maxClientCnxns=60

# 需要保留的文件数目,默认是保留3个
autopurge.snapRetainCount=3

# ZK提供了自动清理事务日志和快照文件的功能,这个参数指定了清理频率,单位是小时,需要配置一个1或更大的整数,默认是0,表示不开启自动清理功能
autopurge.purgeInterval=1

# 监控指标
metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider
metricsProvider.httpPort=7000
metricsProvider.exportJvmInfo=true

audit.enable=true

server.1=0.0.0.0:2888:3888 # 0.0.0.0代表本机IP
server.2=zookeeper2.host:2888:3888 # zookeeper2.host再最外层配置了环境变量
server.3=zookeeper3.host:2889:3889
  • Server B

# 存储快照文件snapshot的目录(相当于redis的rdb)
dataDir=/data

# ZK中的一个时间单元。ZK中所有时间都是以这个时间单元为基础,进行整数倍配置的。例如,session的最小超时时间是2*tickTime
tickTime=2000

# 初始值显示的刻度数,同步阶段可能需要
initLimit=10

# 发送请求和获得确认之间可以传递的心跳数
syncLimit=5

# 暴露服务端对外端口
clientPort=2181

# 单个客户端与单台服务器之间的连接数的限制,是ip级别的,默认是60,如果设置为0,那么表明不作任何限制
maxClientCnxns=60

# 需要保留的文件数目,默认是保留3个
autopurge.snapRetainCount=3

# ZK提供了自动清理事务日志和快照文件的功能,这个参数指定了清理频率,单位是小时,需要配置一个1或更大的整数,默认是0,表示不开启自动清理功能
autopurge.purgeInterval=1

# 监控指标
metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider
metricsProvider.httpPort=7000
metricsProvider.exportJvmInfo=true

audit.enable=true

server.1=zookeeper1.host:2888:3888 # zookeeper1.host再最外层配置了环境变量
server.2=0.0.0.0:2888:3888 # 0.0.0.0代表本机IP
server.3=0.0.0.0:2889:3889

3.docker-compose file

  • Server A
# 描述 Compose 文件的版本信息
version: '3.8'
# 定义服务,可以多个
services:
  nanjing-project-zookeeper1: # 服务名称
    image: zookeeper:3.7.0 # 创建容器时所需的镜像
    container_name: nanjing-project-zookeeper1 # 容器名称
    ports:
      - '2181:2181'
      - '2888:2888'
      - '3888:3888'
    volumes: # 数据卷,目录挂载
      - "./zookeeper/data:/data"
      - "./zookeeper/datalog:/datalog"
      - "./../hosts-${active}:/etc/hosts" 
      - "./zookeeper/conf:/conf"  
    environment: # 添加环境变量
      - ZOO_MY_ID:1
      - ALLOW_ANONYMOUS_LOGIN=yes
    restart: always # 容器总是重新启动

  • Server B
version: '3.8'
networks:
  zk-net:
    name: zk-net

services:
  nanjing-project-zookeeper2:
    image: zookeeper:3.7.0
    container_name: nanjing-project-zookeeper2
    networks:
      - zk-net
    ports:
      - '2181:2181'
      - '2888:2888'
      - '3888:3888'
    volumes:
      - "./zookeeper/data:/data"
      - "./zookeeper/datalog:/datalog"
      - "./../hosts-${active}:/etc/hosts" 
      - "./zookeeper/conf:/conf"  
    environment:
      - ZOO_MY_ID:2
      - ALLOW_ANONYMOUS_LOGIN=yes
    restart: always

  nanjing-project-zookeeper3:
    image: zookeeper:3.7.0
    container_name: nanjing-project-zookeeper3
    networks:
      - zk-net
    ports:
      - '2182:2182'
      - '2889:2889'
      - '3889:3889'
    volumes:
      - "./zookeeper/data:/data"
      - "./zookeeper/datalog:/datalog"
      - "./../hosts-${active}:/etc/hosts" 
      - "./zookeeper/conf:/conf"  
    environment:
      - ZOO_MY_ID:3 
      - ALLOW_ANONYMOUS_LOGIN=yes
    restart: always

4. Create an environment variable file in the outermost layer (refer to the screenshot above, created under the home level)

  • File name: hosts-prod (used for docker-compose and other files to obtain unified environment variables)
127.0.0.1 master

服务器A内网IP zookeeper1.host
服务器B内网IP zookeeper2.host
服务器B内网IP zookeeper3.host

  • File name: prod.env (used for environment variable settings when the sh script is started using docker-compose)
version=1.0.0 #当前版本
active=prod  #测试环境test 生产环境prod

5. Write sh execution script

docker-compose -f docker-compose-zookeeper.yml  --env-file ./../prod.env -p zookeeper down
docker-compose -f docker-compose-zookeeper.yml  --env-file ./../prod.env -p zookeeper build
docker-compose -f docker-compose-zookeeper.yml  --env-file ./../prod.env -p zookeeper up -d

Next, just execute the sh script. Pay attention to see whether the deployment is successful.

进入容器  docker exec -it zookeeper的容器ID /bin/bash
执行 zkService.sh status

ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower # 查看当前节点是leader还是follower

Guess you like

Origin blog.csdn.net/weixin_43387699/article/details/131815946