SeaweedFS 是一个用 Go 语言编写、专为高效处理海量小文件而设计的开源分布式存储系统。它的核心理念是"简单且高效",目标是轻松存储数十亿个文件并提供快速的访问速度。
本文着重描述SeadWeedfs的在podman环境中的部署。
未使用podman-compose的方式,以单个容器进行创建的方式,描述其问题。
Seadweedfs的节点可分为多个类型,均可使用同一种镜像,以不同的启动参数指定节点类型。
admin:管理页面
master:主节点
filer:文件目录节点以及外部文件浏览上传下载节点
volume:文件存储节点(卷)
本文设置若干服务器:
主服务器:192.168.10.97/98,存储服务器:192.168.10.99/100;
其中admin,filer,master节点部署在主服务求上,volume节点部署在 192.168.10.99/100。
在节点间相互访问,以及外部访问filer时,使用签名进行验证(各种Key,写在podman的启动环境变量中)。
# ============================================================
# (1) Master 节点
# ============================================================
# 在 98 上执行
podman run -d --name swf_m3 --restart=always -p 9100:9100 -p 19100:19100 -v /mnt/data/swf/m3:/data -v /etc/localtime:/etc/localtime:ro -e TZ=Asia/Shanghai -e WEED_JWT_SIGNING_KEY={xxxKey} -e WEED_JWT_SIGNING_READ_KEY={xxxKey} -e WEED_JWT_FILER_SIGNING_KEY={xxxKey} -e WEED_JWT_FILER_SIGNING_READ_KEY={xxxKey} docker.xuanyuan.run/chrislusf/seaweedfs:4.36 master -peers='192.168.10.97:9100,192.168.10.97:9102' -defaultReplication=010 -port 9100 -ip=192.168.10.98 -ip.bind=0.0.0.0
# 在 97 上执行
podman run -d --name swf_m1 --restart=always -p 9100:9100 -p 19100:19100 -v /mnt/data/swf/m1:/data -v /etc/localtime:/etc/localtime:ro -e TZ=Asia/Shanghai -e WEED_JWT_SIGNING_KEY={xxxKey} -e WEED_JWT_SIGNING_READ_KEY={xxxKey} -e WEED_JWT_FILER_SIGNING_KEY={xxxKey} -e WEED_JWT_FILER_SIGNING_READ_KEY={xxxKey} docker.xuanyuan.run/chrislusf/seaweedfs:4.36 master -peers='192.168.10.97:9102,192.168.10.98:9100' -defaultReplication=010 -port 9100 -ip=192.168.10.97 -ip.bind=0.0.0.0
# 在 97 上执行
podman run -d --name swf_m2 --restart=always -p 9102:9102 -p 19102:19102 -v /mnt/data/swf/m2:/data -v /etc/localtime:/etc/localtime:ro -e TZ=Asia/Shanghai -e WEED_JWT_SIGNING_KEY={xxxKey} -e WEED_JWT_SIGNING_READ_KEY={xxxKey} -e WEED_JWT_FILER_SIGNING_KEY={xxxKey} -e WEED_JWT_FILER_SIGNING_READ_KEY={xxxKey} docker.xuanyuan.run/chrislusf/seaweedfs:4.36 master -peers='192.168.10.97:9100,192.168.10.98:9100' -defaultReplication=010 -port 9102 -ip=192.168.10.97 -ip.bind=0.0.0.0
# ============================================================
# (2) Volume 节点(在 99 和 100 上执行)
# ============================================================
# 在 99 上执行
podman run -d --name swf_v1 --restart=always -p 9300:9300 -p 19300:19300 -v /mnt/data/swf/v1:/data -v /etc/localtime:/etc/localtime:ro -e TZ=Asia/Shanghai -e WEED_JWT_SIGNING_KEY={xxxKey} -e WEED_JWT_SIGNING_READ_KEY={xxxKey} -e WEED_JWT_FILER_SIGNING_KEY={xxxKey} -e WEED_JWT_FILER_SIGNING_READ_KEY={xxxKey} docker.xuanyuan.run/chrislusf/seaweedfs:4.36 volume -dataCenter=dc1 -rack=rack1 -master='192.168.10.97:9100,192.168.10.97:9102,192.168.10.98:9100' -port=9300 -ip=192.168.10.99 -ip.bind=0.0.0.0
# 在 100 上执行
podman run -d --name swf_v2 --restart=always -p 9300:9300 -p 19300:19300 -v /mnt/data/swf/v2:/data -v /etc/localtime:/etc/localtime:ro -e TZ=Asia/Shanghai -e WEED_JWT_SIGNING_KEY={xxxKey} -e WEED_JWT_SIGNING_READ_KEY={xxxKey} -e WEED_JWT_FILER_SIGNING_KEY={xxxKey} -e WEED_JWT_FILER_SIGNING_READ_KEY={xxxKey} docker.xuanyuan.run/chrislusf/seaweedfs:4.36 volume -dataCenter=dc1 -rack=rack2 -master='192.168.10.97:9100,192.168.10.97:9102,192.168.10.98:9100' -port=9300 -ip=192.168.10.100 -ip.bind=0.0.0.0
# ============================================================
# (3) Filer 节点(在 97 和 98 上执行)
# ============================================================
# 在 97 上执行
podman run -d --name swf_f1 --restart=always -p 9300:9300 -p 19300:19300 -v /mnt/data/swf/f1:/data -v /etc/localtime:/etc/localtime:ro -e TZ=Asia/Shanghai -e WEED_JWT_SIGNING_KEY={xxxKey} -e WEED_JWT_SIGNING_READ_KEY={xxxKey} -e WEED_JWT_FILER_SIGNING_KEY={xxxKey} -e WEED_JWT_FILER_SIGNING_READ_KEY={xxxKey} docker.xuanyuan.run/chrislusf/seaweedfs:4.36 filer -master='192.168.10.97:9100,192.168.10.97:9102,192.168.10.98:9100' -ip=192.168.10.97 -ip.bind=0.0.0.0 -port=9300
# 在 98 上执行
podman run -d --name swf_f2 --restart=always -p 9300:9300 -p 19300:19300 -v /mnt/data/swf/f2:/data -v /etc/localtime:/etc/localtime:ro -e TZ=Asia/Shanghai -e WEED_JWT_SIGNING_KEY={xxxKey} -e WEED_JWT_SIGNING_READ_KEY={xxxKey} -e WEED_JWT_FILER_SIGNING_KEY={xxxKey} -e WEED_JWT_FILER_SIGNING_READ_KEY={xxxKey} docker.xuanyuan.run/chrislusf/seaweedfs:4.36 filer -master='192.168.10.97:9100,192.168.10.97:9102,192.168.10.98:9100' -ip=192.168.10.98 -ip.bind=0.0.0.0 -port=9300
# ============================================================
# (4) Admin 节点(在 97 和 98 上执行)
# ============================================================
# 在 97 上执行
podman run -d --name swf_admin --restart=always -p 9101:9333 -p 19101:9333 -v /mnt/data/swf/admin:/data -v /etc/localtime:/etc/localtime:ro -e TZ=Asia/Shanghai -e WEED_JWT_SIGNING_KEY={xxxKey} -e WEED_JWT_SIGNING_READ_KEY={xxxKey} -e WEED_JWT_FILER_SIGNING_KEY={xxxKey} -e WEED_JWT_FILER_SIGNING_READ_KEY={xxxKey} docker.xuanyuan.run/chrislusf/seaweedfs:4.36 admin -master='192.168.10.97:9100,192.168.10.97:9102,192.168.10.98:9100' -adminUser=eletsci -adminPassword=123456 -dataDir=/data -urlPrefix=sw -port 9333 -ip=192.168.10.97 -ip.bind=0.0.0.0
# 在 98 上执行
podman run -d --name swf_admin --restart=always -p 9101:9333 -p 19101:9333 -v /mnt/data/swf/admin:/data -v /etc/localtime:/etc/localtime:ro -e TZ=Asia/Shanghai -e WEED_JWT_SIGNING_KEY={xxxKey} -e WEED_JWT_SIGNING_READ_KEY={xxxKey} -e WEED_JWT_FILER_SIGNING_KEY={xxxKey} -e WEED_JWT_FILER_SIGNING_READ_KEY={xxxKey} docker.xuanyuan.run/chrislusf/seaweedfs:4.36 admin -master='192.168.10.97:9100,192.168.10.97:9102,192.168.10.98:9100' -adminUser=eletsci -adminPassword=123456 -dataDir=/data -urlPrefix=sw -port 9333 -ip=192.168.10.98 -ip.bind=0.0.0.0
注意事项:
在创建容器时,需要手动指定 容器所在宿主机IP地址: 启动命令中使用 "-ip=192.168.10.98"参数; 指定端口:“-port 9333”,对于master,filer,volume 尽量 容器内外端口一致,这样在 admin节点页面中看到的节点地址端口 与实际的外部访问地址端口一致。
“-dataCenter=dc1 -rack=rack2” 表示 数据中心编号 和 机架编号; 内容可自定义。主要作用与存储节点、存储策略有关,备份策略有关
“-- defaultReplication” 表示副本备份策略。取值如下所示:
内容为一个三位字符串 XYZ,表示额外副本的分布策略(单位:数据中心/机架/同机节点),总副本数 = 1 + X + Y + Z;常见值如 "001"(同机架1副本)、"010"(同数据中心不同机架1副本)、"100"(跨数据中心1副本)、"000"(无副本)。
000:不复制(仅1份,节省空间但无冗余)
001:同机架内另1节点存副本(共2份,平衡性能与可用性)
010:同数据中心不同机架1副本(共2份,防机架故障)
100:跨数据中心1副本(共2份,防机房级灾难)
110:同数据中心不同机架 + 跨数据中心各1副本(共3份)
200:跨数据中心各存1副本(共3份,高容灾但成本高)
浙公网安备 33010602011771号