Docker 部署 zookeeper

核能气质少年 提交于 2019-11-30 17:59:08
  • 说明
系统: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方式部署
  1. 可固定容器IP 容器名称
  2. 健康检查无法做到异常退出(仅显示容器状态)
  3. 仅单机部署

创建数据目录

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 方式部署
  1. 集群部署 可指定容器运行在哪个宿主机
  2. 健康策略如果不满足 退出容器重启一个
  3. 无法使用固定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
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!