【Docker学习】—— docker-compose部署之zookeeper

前言

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

1.构建zookeeper文件目录结构

在这里插入图片描述

2.zookeeper配置文件的路径及内容

在这里插入图片描述

  • 服务器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
  • 服务器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文件

  • 服务器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 # 容器总是重新启动

  • 服务器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.在最外层创建环境变量文件(参考上面截图,创建在home层级下)

  • 文件名:hosts-prod(用于docker-compose等文件获取统一环境变量)
127.0.0.1 master

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

  • 文件名:prod.env(用于sh脚本使用docker-compose启动时的环境变量设置)
version=1.0.0 #当前版本
active=prod  #测试环境test 生产环境prod

5.编写sh执行脚本

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

接下来执行sh脚本就好啦,注意观察是否部署成功

进入容器  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

猜你喜欢

转载自blog.csdn.net/weixin_43387699/article/details/131815946