- 说明
系统:CentOS-7.6 1810 Minimal
zookeeper_ver: 3.4.14
基于此环境之上
1.安装docke环境 https://my.oschina.net/yx571304/blog/3113758
2.配置存储(Glusterfs) https://my.oschina.net/yx571304/blog/3113769
3.docker-compose 安装(使用下面的脚本安装docker-compose)
curl -sSL https://dwz.cn/XOJj0Njx -o docker.sh
chmod +x docker.sh
./docker.sh compose
- docker-compose方式部署
- 可固定容器IP 容器名称
- 健康检查无法做到异常退出(仅显示容器状态)
- 仅单机部署
创建数据目录
mkdir -p /swarm/volumes/zk-{1..3}
创建yaml文件
cat > zookeeper.yaml <<'EOF'
version: '3.7'
services:
zk-1:
image: zookeeper:3.4.14
restart: always
hostname: zk-1
container_name: zk-1
ports:
- 2181:2181
environment:
TZ: Asia/Shanghai
ZOO_MY_ID: 1
ZOO_SERVERS: server.1=zk-1:2888:3888 server.2=zk-2:2888:3888 server.3=zk-3:2888:3888
volumes:
- type: bind
source: /swarm/volumes/zk-1
target: /data
deploy:
placement:
constraints:
- node.hostname == node01
healthcheck:
test: echo ruok | nc 127.0.0.1 2181 || exit 1
interval: 30s
timeout: 10s
retries: 3
start_period: 20s
networks:
app_net:
ipv4_address: 10.10.10.11
zk-2:
image: zookeeper:3.4.14
restart: always
hostname: zk-2
container_name: zk-2
ports:
- 2182:2181
environment:
TZ: Asia/Shanghai
ZOO_MY_ID: 2
ZOO_SERVERS: server.1=zk-1:2888:3888 server.2=zk-2:2888:3888 server.3=zk-3:2888:3888
volumes:
- type: bind
source: /swarm/volumes/zk-2
target: /data
deploy:
placement:
constraints:
- node.hostname == node02
healthcheck:
test: echo ruok | nc 127.0.0.1 2181 || exit 1
interval: 30s
timeout: 10s
retries: 3
start_period: 20s
networks:
app_net:
ipv4_address: 10.10.10.12
zk-3:
image: zookeeper:3.4.14
restart: always
hostname: zk-3
container_name: zk-3
ports:
- 2183:2181
environment:
TZ: Asia/Shanghai
ZOO_MY_ID: 3
ZOO_SERVERS: server.1=zk-1:2888:3888 server.2=zk-2:2888:3888 server.3=zk-3:2888:3888
volumes:
- type: bind
source: /swarm/volumes/zk-3
target: /data
deploy:
placement:
constraints:
- node.hostname == node03
healthcheck:
test: echo ruok | nc 127.0.0.1 2181 || exit 1
interval: 30s
timeout: 10s
retries: 3
start_period: 20s
networks:
app_net:
ipv4_address: 10.10.10.13
networks:
app_net:
ipam:
driver: default
config:
- subnet: "10.10.10.0/24"
EOF
启动
docker-compose -f zookeeper.yaml up -d
docker-compose -f zookeeper.yaml ps
检测服务状态
for i in zk-1 zk-2 zk-3; do
echo "---------------- $i ----------------"
docker exec $i zkServer.sh status
done
检测端口状态输出(imok为正常)
# 内部IP
echo ruok | nc 10.10.10.11 2181; echo
echo ruok | nc 10.10.10.12 2181; echo
echo ruok | nc 10.10.10.13 2181; echo
# 外部访问(替换 127.0.0.1 为宿主机IP)
echo ruok | nc 127.0.0.1 2181; echo
echo ruok | nc 127.0.0.1 2182; echo
echo ruok | nc 127.0.0.1 2183; echo
删除
docker-compose -f zookeeper.yaml down -v
- docker swarm 方式部署
- 集群部署 可指定容器运行在哪个宿主机
- 健康策略如果不满足 退出容器重启一个
- 无法使用固定IP,无法指定容器名称
创建数据目录
mkdir -p /swarm/volumes/zk-{1..3}
创建yaml文件
cat > zookeeper.yaml <<'EOF'
version: '3.7'
services:
zk-1:
image: zookeeper:3.4.14
restart: always
hostname: zk-1
ports:
- target: 2181
published: 2181
protocol: tcp
mode: host # ingress 群集模式负载平衡(default) # host 仅当前运行容器的宿主机上发布主机端口
environment:
TZ: Asia/Shanghai
ZOO_MY_ID: 1
ZOO_SERVERS: server.1=zk-1:2888:3888 server.2=zk-2:2888:3888 server.3=zk-3:2888:3888
volumes:
- type: bind
source: /swarm/volumes/zk-1
target: /data
deploy:
placement:
constraints:
- node.hostname == node01
healthcheck:
test: echo ruok | nc 127.0.0.1 2181 || exit 1
interval: 30s
timeout: 10s
retries: 3
start_period: 20s
zk-2:
image: zookeeper:3.4.14
restart: always
hostname: zk-2
ports:
- target: 2181
published: 2181
protocol: tcp
mode: host # ingress 群集模式负载平衡(default) # host 仅当前运行容器的宿主机上发布主机端口
environment:
TZ: Asia/Shanghai
ZOO_MY_ID: 2
ZOO_SERVERS: server.1=zk-1:2888:3888 server.2=zk-2:2888:3888 server.3=zk-3:2888:3888
volumes:
- type: bind
source: /swarm/volumes/zk-2
target: /data
deploy:
placement:
constraints:
- node.hostname == node02
healthcheck:
test: echo ruok | nc 127.0.0.1 2181 || exit 1
interval: 30s
timeout: 10s
retries: 3
start_period: 20s
zk-3:
image: zookeeper:3.4.14
restart: always
hostname: zk-3
ports:
- target: 2181
published: 2181
protocol: tcp
mode: host # ingress 群集模式负载平衡(default) # host 仅当前运行容器的宿主机上发布主机端口
environment:
TZ: Asia/Shanghai
ZOO_MY_ID: 3
ZOO_SERVERS: server.1=zk-1:2888:3888 server.2=zk-2:2888:3888 server.3=zk-3:2888:3888
volumes:
- type: bind
source: /swarm/volumes/zk-3
target: /data
deploy:
placement:
constraints:
- node.hostname == node03
healthcheck:
test: echo ruok | nc 127.0.0.1 2181 || exit 1
interval: 30s
timeout: 10s
retries: 3
start_period: 20s
EOF
部署
docker stack deploy -c ./zookeeper.yaml zookeeper
docker stack ps zookeeper; docker service ls
检测服务状态
name=zookeeper; cmd='zkServer.sh status'
docker exec $(docker ps | grep $name | awk '{print $1}') $cmd
echo ruok | nc node01 2181; echo
echo ruok | nc node02 2181; echo
echo ruok | nc node03 2181; echo
删除
docker stack rm zookeeper
- 登录容器
# 进入容器
docker exec -it $(docker ps | grep zookeeper | awk '{print $1}') /bin/bash
# 替换软件源
cat > /etc/apt/sources.list <<EOF
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-updates main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-backports main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian-security buster/updates main contrib non-free
EOF
# 安装软件
apt-get update
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends procps iputils-ping net-tools