跳到主要内容

File 集群

服务器IP主机角色
192.168.10.16File Node01
192.168.10.17File Node02
192.168.10.18File Node03
192.168.10.19File Node04

初始化 Swarm 环境

  1. 在 File Node01 执行 swarm 初始化命令

    docker swarm init

    # 初始化命令执行后会输出 join 命令,后面需要在其他三节点上运行
    # 当服务器上有多个IP地址时,可以使用 --advertise-addr 参数指定其他节点用来连接到当前管理节点的IP和端口
    # docker swarm init --advertise-addr 192.168.1.11
  2. 分别在 File Node02、3、4 上运行 join 命令,加入 swarm 集群

    docker swarm join --token xxxxxxxx

    # 如遗忘 token ,可在 File Node01 上通过以下命令查看:
    # docker swarm join-token worker
  3. 查看节点并记录下来节点ID

    docker node ls

部署文件存储

第1、2步骤四台服务器都需要操作

  1. 下载镜像

    docker pull registry.cn-hangzhou.aliyuncs.com/mdpublic/mingdaoyun-file:1.7.0
  2. 创建数据目录

    mkdir -p /data/file/volume/{cache,data,fetchtmp,multitmp,tmp}

以下所有步骤仅需在 File Node01 节点操作

  1. 创建配置文件存放目录

    mkdir -p /usr/local/MDPrivateDeployment/clusterMode
  2. 创建 file.yaml 文件

    cat > /usr/local/MDPrivateDeployment/clusterMode/file.yaml <<EOF
    version: '3'
    services:
    file1:
    hostname: file1
    image: registry.cn-hangzhou.aliyuncs.com/mdpublic/mingdaoyun-file:1.7.0
    volumes:
    - /usr/share/zoneinfo/Etc/GMT-8:/etc/localtime
    - /data/file/volume:/data/storage
    ports:
    - "9001:9000"
    environment:
    MINIO_ACCESS_KEY: storage
    MINIO_SECRET_KEY: 123456
    ENV_MINGDAO_PROTO: "http"
    ENV_MINGDAO_HOST: "hap.domain.com"
    ENV_MINGDAO_PORT: "80"
    # Redis 主从模式
    ENV_FILE_CACHE: "redis://:123456@192.168.10.13:6379"
    # Redis 哨兵模式
    #ENV_REDIS_SENTINEL_ENDPOINTS: "192.168.10.13:26379,192.168.10.14:26379,192.168.10.15:26379"
    #ENV_REDIS_SENTINEL_MASTER: "mymaster"
    #ENV_REDIS_SENTINEL_PASSWORD: "password"
    ENV_FILECACHE_EXPIRE: "false"
    ENV_FILE_ID: "file1"
    command: "./main server http://file{1...4}/data/storage/data"
    deploy:
    placement:
    constraints:
    - node.id == xxxxxxxxxxxxxxxx # File Node01的 node.id 值

    file2:
    hostname: file2
    image: registry.cn-hangzhou.aliyuncs.com/mdpublic/mingdaoyun-file:1.7.0
    volumes:
    - /usr/share/zoneinfo/Etc/GMT-8:/etc/localtime
    - /data/file/volume:/data/storage
    ports:
    - "9002:9000"
    environment:
    MINIO_ACCESS_KEY: storage
    MINIO_SECRET_KEY: 123456
    ENV_MINGDAO_PROTO: "http"
    ENV_MINGDAO_HOST: "hap.domain.com"
    ENV_MINGDAO_PORT: "80"
    # 主从模式
    ENV_FILE_CACHE: "redis://:123456@192.168.10.13:6379"
    # Redis 哨兵模式
    #ENV_REDIS_SENTINEL_ENDPOINTS: "192.168.10.13:26379,192.168.10.14:26379,192.168.10.15:26379"
    #ENV_REDIS_SENTINEL_MASTER: "mymaster"
    #ENV_REDIS_SENTINEL_PASSWORD: "password"
    ENV_FILECACHE_EXPIRE: "false"
    ENV_FILE_ID: "file2"
    command: "./main server http://file{1...4}/data/storage/data"
    deploy:
    placement:
    constraints:
    - node.id == xxxxxxxxxxxxxxxx # File Node02的 node.id 值

    file3:
    hostname: file3
    image: registry.cn-hangzhou.aliyuncs.com/mdpublic/mingdaoyun-file:1.7.0
    volumes:
    - /usr/share/zoneinfo/Etc/GMT-8:/etc/localtime
    - /data/file/volume:/data/storage
    ports:
    - "9003:9000"
    environment:
    MINIO_ACCESS_KEY: storage
    MINIO_SECRET_KEY: 123456
    ENV_MINGDAO_PROTO: "http"
    ENV_MINGDAO_HOST: "hap.domain.com"
    ENV_MINGDAO_PORT: "80"
    # 主从模式
    ENV_FILE_CACHE: "redis://:123456@192.168.10.13:6379"
    # Redis 哨兵模式
    #ENV_REDIS_SENTINEL_ENDPOINTS: "192.168.10.13:26379,192.168.10.14:26379,192.168.10.15:26379"
    #ENV_REDIS_SENTINEL_MASTER: "mymaster"
    #ENV_REDIS_SENTINEL_PASSWORD: "password"
    ENV_FILECACHE_EXPIRE: "false"
    ENV_FILE_ID: "file3"
    command: "./main server http://file{1...4}/data/storage/data"
    deploy:
    placement:
    constraints:
    - node.id == xxxxxxxxxxxxxxxx # File Node03的 node.id 值

    file4:
    hostname: file4
    image: registry.cn-hangzhou.aliyuncs.com/mdpublic/mingdaoyun-file:1.7.0
    volumes:
    - /usr/share/zoneinfo/Etc/GMT-8:/etc/localtime
    - /data/file/volume:/data/storage
    ports:
    - "9004:9000"
    environment:
    MINIO_ACCESS_KEY: storage
    MINIO_SECRET_KEY: 123456
    ENV_MINGDAO_PROTO: "http"
    ENV_MINGDAO_HOST: "hap.domain.com"
    ENV_MINGDAO_PORT: "80"
    # 主从模式
    ENV_FILE_CACHE: "redis://:123456@192.168.10.13:6379"
    # Redis 哨兵模式
    #ENV_REDIS_SENTINEL_ENDPOINTS: "192.168.10.13:26379,192.168.10.14:26379,192.168.10.15:26379"
    #ENV_REDIS_SENTINEL_MASTER: "mymaster"
    #ENV_REDIS_SENTINEL_PASSWORD: "password"
    ENV_FILECACHE_EXPIRE: "false"
    ENV_FILE_ID: "file4"
    command: "./main server http://file{1...4}/data/storage/data"
    deploy:
    placement:
    constraints:
    - node.id == xxxxxxxxxxxxxxxx # File Node04的 node.id 值
    EOF
    • 变量中指定的访问地址,在部署中注意替换为实际的系统主地址
    • redis 连接信息在实际部署中注意替换为实际的密码与IP
    • 注意替换各节点的 node.id 值,可通过 docker node ls 看到
  3. 创建启动脚本

    mkdir -p /usr/local/MDPrivateDeployment/clusterMode
    cat > /usr/local/MDPrivateDeployment/start.sh <<EOF
    docker stack deploy -c /usr/local/MDPrivateDeployment/clusterMode/file.yaml file
    EOF
    chmod +x /usr/local/MDPrivateDeployment/start.sh
  4. 启动服务

    bash /usr/local/MDPrivateDeployment/start.sh
  5. 加入开机自启动

    echo "bash /usr/local/MDPrivateDeployment/start.sh" >> /etc/rc.local
    chmod +x /etc/rc.local
  6. 确认服务状态启动成功

    $ docker stack ps file
    ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
    XXXX1XXXX file_file4.1 registry.cn-hangzhou.aliyuncs.com/mdpublic/mingdaoyun-file:1.7.0 file1 Running Running 3 minutes ago
    XXXX2XXXX file_file3.1 registry.cn-hangzhou.aliyuncs.com/mdpublic/mingdaoyun-file:1.7.0 file2 Running Running 3 minutes ago
    XXXX3XXXX file_file2.1 registry.cn-hangzhou.aliyuncs.com/mdpublic/mingdaoyun-file:1.7.0 file3 Running Running 3 minutes ago
    XXXX4XXXX file_file1.1 registry.cn-hangzhou.aliyuncs.com/mdpublic/mingdaoyun-file:1.7.0 file4 Running Running 3 minutes ago