锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

docker 搭建 zookeeper 集群

时间:2023-08-12 17:37:01 202a交流电流变送器

文章目录

  • 下载官方zookeeper镜像
    • 搜索官方镜像
    • 下载官方镜像
    • 查看镜像元数据
  • 创建docker网络
    • 新建bridge网络
  • 创建吊载路径
  • 创建容器并添加网络
    • 查看节点状态
  • 集群生成脚本
  • 参考文献

下载官方zookeeper镜像

搜索官方镜像

$ docker search zookeeper  NAME                               DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED zookeeper                          Apache ZooKeeper is an open-source server wh…   1216      [OK]        ... 

下载官方镜像

$ docker pull zookeeper  Using default tag: latest latest: Pulling from library/zookeeper a2abf6c4d29d: Pull complete  2bbde5250315: Pull complete  202a34e7968e: Pull complete  4e4231e30efc: Pull complete  707593b95343: Pull complete  b070e6dedb4b: Pull complete  46e5380f3905: Pull complete  8b7e330117e6: Pull complete  Digest: sha256:2c8c5c2db6db22184e197afde13e33dad849af90004c330f20b17282bcd5afd7 Status: Downloaded newer image for zookeeper:latest docker.io/library/zookeeper:latest 

查看镜像元数据

$ docker inspect zookeeper [     { 
                 "Id": "sha256:36c607e7b14df07e3976ebe6216db9aabd41ef0884f73d4e6b5ccf5d44d9c195",         "RepoTags": [             "zookeeper:latest"         ],         "RepoDigests": [             "zookeeper@sha256:2c8c5c2db6db22184e197afde13e33dad849af90004c330f20b17282bcd5afd7"         ],         "Parent": "",         "Comment": "",         "Created": "2021-12-22T18:17:20.28518457Z",         "Container": "086e5b0d9ac03c033e92402c9a0ac04376e6c4530f798549645a0fb834edc180",         "ContainerConfig": { 
                     "Hostname": "086e5b0d9ac0",             "Domainname": "",             "User": "",             "AttachStdin": false,             "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": { 
        
                "2181/tcp": { 
        },
                "2888/tcp": { 
        },
                "3888/tcp": { 
        },
                "8080/tcp": { 
        }
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/openjdk-11/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/apache-zookeeper-3.7.0-bin/bin",
                "JAVA_HOME=/usr/local/openjdk-11",
                "LANG=C.UTF-8",
                "JAVA_VERSION=11.0.13",
                "ZOO_CONF_DIR=/conf",
                "ZOO_DATA_DIR=/data",
                "ZOO_DATA_LOG_DIR=/datalog",
                "ZOO_LOG_DIR=/logs",
                "ZOO_TICK_TIME=2000",
                "ZOO_INIT_LIMIT=5",
                "ZOO_SYNC_LIMIT=2",
                "ZOO_AUTOPURGE_PURGEINTERVAL=0",
                "ZOO_AUTOPURGE_SNAPRETAINCOUNT=3",
                "ZOO_MAX_CLIENT_CNXNS=60",
                "ZOO_STANDALONE_ENABLED=true",
                "ZOO_ADMINSERVER_ENABLED=true",
                "ZOOCFGDIR=/conf"
            ],
            "Cmd": [
                "/bin/sh",
                "-c",
                "#(nop) ",
                "CMD [\"zkServer.sh\" \"start-foreground\"]"
            ],
            "Image": "sha256:034a6fb5e9094c790fd637c3b8098df0dbeacd0327461859e79f3ca268f4e6c9",
            "Volumes": { 
        
                "/data": { 
        },
                "/datalog": { 
        },
                "/logs": { 
        }
            },
            "WorkingDir": "/apache-zookeeper-3.7.0-bin",
            "Entrypoint": [
                "/docker-entrypoint.sh"
            ],
            "OnBuild": null,
            "Labels": { 
        }
        },
        "DockerVersion": "20.10.7",
        "Author": "",
        "Config": { 
        
            "Hostname": "",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": { 
        
                "2181/tcp": { 
        },
                "2888/tcp": { 
        },
                "3888/tcp": { 
        },
                "8080/tcp": { 
        }
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/openjdk-11/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/apache-zookeeper-3.7.0-bin/bin",
                "JAVA_HOME=/usr/local/openjdk-11",
                "LANG=C.UTF-8",
                "JAVA_VERSION=11.0.13",
                "ZOO_CONF_DIR=/conf",
                "ZOO_DATA_DIR=/data",
                "ZOO_DATA_LOG_DIR=/datalog",
                "ZOO_LOG_DIR=/logs",
                "ZOO_TICK_TIME=2000",
                "ZOO_INIT_LIMIT=5",
                "ZOO_SYNC_LIMIT=2",
                "ZOO_AUTOPURGE_PURGEINTERVAL=0",
                "ZOO_AUTOPURGE_SNAPRETAINCOUNT=3",
                "ZOO_MAX_CLIENT_CNXNS=60",
                "ZOO_STANDALONE_ENABLED=true",
                "ZOO_ADMINSERVER_ENABLED=true",
                "ZOOCFGDIR=/conf"
            ],
            "Cmd": [
                "zkServer.sh",
                "start-foreground"
            ],
            "Image": "sha256:034a6fb5e9094c790fd637c3b8098df0dbeacd0327461859e79f3ca268f4e6c9",
            "Volumes": { 
        
                "/data": { 
        },
                "/datalog": { 
        },
                "/logs": { 
        }
            },
            "WorkingDir": "/apache-zookeeper-3.7.0-bin",
            "Entrypoint": [
                "/docker-entrypoint.sh"
            ],
            "OnBuild": null,
            "Labels": null
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 277821092,
        "VirtualSize": 277821092,
        "GraphDriver": { 
        
            "Data": { 
        
                "LowerDir": "/var/lib/docker/overlay2/49465b4bfe0763fa582987f66ace8500f7855a68e5d78e97c015d2a59f34d983/diff:/var/lib/docker/overlay2/2ce2eda42d094c73fb77c3957ca0c164a3629c53a50048319fbde62a1e5e05b8/diff:/var/lib/docker/overlay2/b67d2bc434b170f11b0e1549e68446ada1234db1acc42fc58284f745d5a93204/diff:/var/lib/docker/overlay2/b82b007f28635d8601982206284c3aa1e0ca29f40f75dc03ed48f901df64dea7/diff:/var/lib/docker/overlay2/63aa7a8639204ccb5c393d04ab28c11048fd0cb367e9264f9e710e1a08fbbdde/diff:/var/lib/docker/overlay2/a6ffcae54ad0cbbc9d04b1bf46d14c13dc92c533223464e2eb86acc92df509bf/diff:/var/lib/docker/overlay2/968d924353f2cf0f7226df1d44a28557ae4a473e853a4cfea72a49bf79feb3ce/diff",
                "MergedDir": "/var/lib/docker/overlay2/decf5b31c5806d0d0065958867be916743e953ee67518bddaabc4a677a822036/merged",
                "UpperDir": "/var/lib/docker/overlay2/decf5b31c5806d0d0065958867be916743e953ee67518bddaabc4a677a822036/diff",
                "WorkDir": "/var/lib/docker/overlay2/decf5b31c5806d0d0065958867be916743e953ee67518bddaabc4a677a822036/work"
            },
            "Name": "overlay2"
        },
        "RootFS": { 
        
            "Type": "layers",
            "Layers": [
                "sha256:2edcec3590a4ec7f40cf0743c15d78fb39d8326bc029073b41ef9727da6c851f",
                "sha256:afda989d53ee25f18b7810206b39580df30518043d1f34f1d514f665ba8026f4",
                "sha256:c3aa798711862658bf26a9c0d64e917e737ddfe89558554b02d22022694f45d7",
                "sha256:d0771a598f012fdd2b325314c006c37843f6be2f59d30a862a68c6c17f27e2b8",
                "sha256:2490c30bbef3f75a4c1a4874b9eb550f90eec35c4ec098e4734ae6e52d67a6fa",
                "sha256:00510f82f2cdfb4a39f994b7461d1bad936998a355f7baac29821ef92a4f5ad4",
                "sha256:b2f57731deef9b512cf5cef75f1f373c4869e6e6d9740181f31cad4aa564b890",
                "sha256:73d59a6eacae0c15469ec7fa4f219be70cc9a2bda526b181340903d200531cc8"
            ]
        },
        "Metadata": { 
        
            "LastTagTime": "0001-01-01T00:00:00Z"
        }
    }
]

通过元数据,主要是了解如下信息:

  • 暴露端口:
"ExposedPorts": {
	"2181/tcp": {},
	"2888/tcp": {},
	"3888/tcp": {},
	"8080/tcp": {}
},
  • 挂载文件位置:
"Volumes": {
	"/data": {},
	"/datalog": {},
	"/logs": {}
},
  • 环境变量,如

创建docker网络

Docker有三种网络模式,bridge、host、none,在创建容器的时候,不指定 --network 默认是bridge模式

  • bridge:为每一个容器分配IP,并将容器连接到一个docker0虚拟网桥,通过docker0网桥与宿主机通信。此模式下,不能用宿主机IP+容器映射端口来进行Docker容器之间的通信。
  • host:容器不会虚拟自己的网卡,配置自己的IP,而是使用宿主机的IP和端口。此模式下,Docker容器之间的通信使用宿主机IP+容器映射端口
  • none:无网络

新建bridge网络

$ docker network create --driver bridge --subnet=172.88.0.0/16 --gateway=172.88.0.1 bnet

$ docker network ls
NETWORK ID     NAME          DRIVER    SCOPE
0eb12f8968c5   bnet          bridge    local

$ docker inspect 0eb12f8968c5
[
    { 
        
        "Name": "bnet",
        "Id": "0eb12f8968c5b102ca6955f8ad31be525a1f89d0da7c3e8e24bf492e35c9bbde",
        "Created": "2022-04-19T19:17:23.127433237+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": { 
        
            "Driver": "default",
            "Options": { 
        },
            "Config": [
                { 
        
                    "Subnet": "172.88.0.0/16",
                    "Gateway": "172.88.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": { 
        
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": { 
        },
        "Options": { 
        },
        "Labels": { 
        }
    }
]

创建挂载路径

实际路径看情况修改,假设建立3节点集群

mkdir -p $PWD/zookeeper_nodes/node_1
mkdir -p $PWD/zookeeper_nodes/node_2
mkdir -p $PWD/zookeeper_nodes/node_3

创建容器并加入网络

docker run -d -p 2181:2181 --name zookeeper_1 --privileged --restart always --network bnet --ip 172.88.0.2 \
-v $PWD/zookeeper_nodes/node_1/volumes/data:/data \
-v $PWD/zookeeper_nodes/node_1/volumes/datalog:/datalog \
-v $PWD/zookeeper_nodes/node_1/volumes/logs:/logs \
-e ZOO_MY_ID=1 \
-e "ZOO_SERVERS=server.1=172.88.0.2:2888:3888;2181 server.2=172.88.0.3:2888:3888;2181 server.3=172.88.0.4:2888:3888;2181" \
zookeeper:latest

docker run -d -p 2182:2181 --name zookeeper_2 --privileged --restart always --network bnet --ip 172.88.0.3 \
-v $PWD/zookeeper_nodes/node_2/volumes/data:/data \
-v $PWD/zookeeper_nodes/node_2/volumes/datalog:/datalog \
-v $PWD/zookeeper_nodes/node_2/volumes/logs:/logs \
-e ZOO_MY_ID=2 \
-e "ZOO_SERVERS=server.1=172.88.0.2:2888:3888;2181 server.2=172.88.0.3:2888:3888;2181 server.3=172.88.0.4:2888:3888;2181" \
zookeeper:latest

docker run -d -p 2183:2181 --name zookeeper_3 --privileged --restart always --network bnet --ip 172.88.0.4 \
-v $PWD/zookeeper_nodes/node_3/volumes/data:/data \
-v $PWD/zookeeper_nodes/node_3/volumes/datalog:/datalog \
-v $PWD/zookeeper_nodes/node_3/volumes/logs:/logs \
-e ZOO_MY_ID=3 \
-e "ZOO_SERVERS=server.1=172.88.0.2:2888:3888;2181 server.2=172.88.0.3:2888:3888;2181 server.3=172.88.0.4:2888:3888;2181" \
zookeeper:latest

查看节点状态

$ docker ps
CONTAINER ID   IMAGE              COMMAND                  CREATED         STATUS         PORTS                                                                     NAMES
614f30e10235   zookeeper:latest   "/docker-entrypoint.…"   4 minutes ago   Up 4 minutes   2888/tcp, 3888/tcp, 8080/tcp, 0.0.0.0:2183->2181/tcp, :::2183->2181/tcp   zookeeper_3
5aac903dae27   zookeeper:latest   "/docker-entrypoint.…"   4 minutes ago   Up 4 minutes   2888/tcp, 3888/tcp, 8080/tcp, 0.0.0.0:2182->2181/tcp, :::2182->2181/tcp   zookeeper_2
67b2fd1b3df6   zookeeper:latest   "/docker-entrypoint.…"   4 minutes ago   Up 4 minutes   2888/tcp, 3888/tcp, 8080/tcp, 0.0.0.0:2181->2181/tcp, :::2181->2181/tcp   zookeeper_1

$ docker exec -it zookeeper_1 bash
root@67b2fd1b3df6:/apache-zookeeper-3.7.0-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

$ docker exec -it zookeeper_2 bash
root@5aac903dae27:/apache-zookeeper-3.7.0-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

$ docker exec -it zookeeper_3 bash
root@614f30e10235:/apache-zookeeper-3.7.0-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

此外,可以测试创建节点,此不赘述

集群生成脚本

#!/bin/bash

echo "删除所有zookeeper容器"
sudo docker ps -a | grep zookeeper_ | awk '{print $1}' | xargs -I { 
        } sudo docker rm -f { 
        }

# 设置节点个数
num_nodes=3
if [ $# -ge 1 ] && [ $1 -ge 0 ];then
    num_nodes=$1
fi

# 设置存储位置
data_path=/data/zookeeper_nodes
if [ -d $data_path ];then
    sudo rm -rf $data_path
fi

# 设置集群IP
ip_prefix="172.88.0"
servers=""
for i in `seq $num_nodes`; do
    servers="$servers server.$i=zookeeper_$i:2888:3888;2181"
done
servers=${servers#* }

temp_file="init_containers.sh"
echo > $temp_file

for i in `seq $num_nodes`; do
    cmd="sudo docker run -d -p `expr 2181 + $i`:2181 --name zookeeper_$i --hostname zookeeper_$i --privileged --restart always --network bnet --ip $ip_prefix.`expr $i + 1` -v $data_path/zookeeper_nodes/node_$i/volumes/data:/data -v $data_path/zookeeper_nodes/node_$i/volumes/datalog:/datalog -v $data_path/zookeeper_nodes/node_$i/volumes/logs:/logs -e ZOO_MY_ID=$i -e ZOO_SERVERS='$servers' zookeeper:latest"
    echo $cmd >> $temp_file
    echo >> $temp_file
done
echo "创建具有$num_nodes个节点的zookeeper集群"
sh $temp_file && rm -f $temp_file

参考文献

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章