File 集群
| 服务器IP | 主机角色 |
|---|---|
| 192.168.10.16 | File Node01 |
| 192.168.10.17 | File Node02 |
| 192.168.10.18 | File Node03 |
| 192.168.10.19 | File Node04 |
- File 各节点都需要提前安装 docker
初始化 Swarm 环境
-
在 File Node01 执行 swarm 初始化命令
docker swarm init
# 初始化命令执行后会输出 join 命令,后面需要在其他三节点上运行
# 当服务器上有多个IP地址时,可以使用 --advertise-addr 参数指定其他节点用来连接到当前管理节点的IP和端口
# docker swarm init --advertise-addr 192.168.1.11 -
分别在 File Node02、3、4 上运行 join 命令,加入 swarm 集群
docker swarm join --token xxxxxxxx
# 如遗忘 token ,可在 File Node01 上通过以下命令查看:
# docker swarm join-token worker -
查看节点并记录下来节点ID
docker node ls
部署文件存储
第1、2步骤四台服务器都需要操作
-
下载镜像
- 服务器支持访问互联网
- 服务器不支持访问互联网
docker pull registry.cn-hangzhou.aliyuncs.com/mdpublic/mingdaoyun-file:1.7.0# 离线镜像包文件下载链接,下载完成后上传到部署服务器
https://pdpublic.mingdao.com/private-deployment/offline/mingdaoyun-file-linux-amd64-1.7.0.tar.gz
# 在服务器上通过 docker load -i 命令加载离线镜像
docker load -i mingdaoyun-file-linux-amd64-1.7.0.tar.gz -
创建数据目录
mkdir -p /data/file/volume/{cache,data,fetchtmp,multitmp,tmp}
以下所有步骤仅需在 File Node01 节点操作
-
创建配置文件存放目录
mkdir -p /usr/local/MDPrivateDeployment/clusterMode -
创建 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 看到
-
创建启动脚本
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 -
启动服务
bash /usr/local/MDPrivateDeployment/start.sh -
加入开机自启动
echo "bash /usr/local/MDPrivateDeployment/start.sh" >> /etc/rc.local
chmod +x /etc/rc.local -
确认服务状态启动成功
$ 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