Windows本地部署seaweedfs

📅 2026/8/26 18:06:24
Windows本地部署seaweedfs
文章目录SeaweedFS 本机 Windows 部署及冒烟测试1. 适用范围和实测结论2. 目录规划2.1 NAS 参考信息和字段说明3. S3 账号配置4. 启动服务4.1 启动 Master 和 Volume4.2 启动独立 Filer4.3 启动 S3 Gateway4.4 服务检查5. Postman 冒烟测试5.0 postman部署5.1 环境变量5.2 创建 bucket5.3 上传 ZIP5.4 HEAD 检查5.5 下载和校验5.6 删除和确认6. 本次冒烟结论7. 常见问题SeaweedFS 本机 Windows 部署及冒烟测试1. 适用范围和实测结论本文适用于 Windows x64 本机运行 SeaweedFS 4.42并使用 S3 API 上传、下载 ZIP 做冒烟测试。本机已确认的二进制version 8000GB 4.42 f04da8e9ad8db7ae06bd2caba1b6560b36e28e31 windows amd64本次实际使用的本机地址和端口组件地址Master HTTP本机IP:9333Master gRPC本机IP:19333Volume HTTP本机IP:8080Filer HTTP本机IP:8888Filer gRPC本机IP:18888S3 Gateway本机IP:90002. 目录规划D:\seaweedfs-test\weed.exe D:\seaweedfs-test\volume\ # Master/Volume 数据和对象文件 D:\seaweedfs-test\config\ # s3.json D:\seaweedfs-test\log\ # 日志 D:\seaweedfs-test\filer\ # 独立 Filer 元数据 D:\seaweedfs-test\backup\ # 人工备份目录不会自动写入 E:\seaweedfs-test\master\ # 预留目录本次实际实例未写入 E:\lot1\ # ZIP 源文件创建目录New-Item-ItemType Directory-Force D:\seaweedfs-test\volumeNew-Item-ItemType Directory-Force D:\seaweedfs-test\configNew-Item-ItemType Directory-Force D:\seaweedfs-test\logNew-Item-ItemType Directory-Force D:\seaweedfs-test\filerNew-Item-ItemType Directory-Force D:\seaweedfs-test\backupNew-Item-ItemType Directory-Force E:\seaweedfs-test\masterNew-Item-ItemType Directory-Force E:\seaweedfs-test\backup本次运行后实际可见的数据位置D:\seaweedfs-test\volume\m9333\ # Master 元数据 D:\seaweedfs-test\volume\*.dat # Volume 对象数据 D:\seaweedfs-test\volume\*.idx # Volume 索引 D:\seaweedfs-test\volume\*.vif # Volume 信息 D:\seaweedfs-test\filer\filerldb2\ # Filer bucket/object 元数据其中D:\seaweedfs-test\volume\m9333\实际的 Master 元数据包含conf、state、snapshot、log。D:\seaweedfs-test\volume\*.dat/.idx/.vifVolume Server 存储的对象数据和索引上传的 ZIP 最终在这里。D:\seaweedfs-test\filer\filerldb2\实际的 Filer 元数据记录 bucket、目录、对象 key 等信息。E:\seaweedfs-test\master\原本规划给 Master 元数据但当前运行实例没有把数据写到这里所以为空。E:\seaweedfs-test\backup\只是预留的人工备份目录SeaweedFS 不会自动把数据备份进去因此为空。各目录的作用目录作用volume保存 ZIP 实际内容、Volume 索引以及当前实际生成的 Master 数据master规划用于保存 Master 元数据本次实际没有使用filer保存 Filer 的 LevelDB 元数据记录 bucket、文件路径和对象信息config保存s3.json等配置文件不保存 ZIPbackup人工备份 Master/Filer 配置和元数据的目标目录不会自动写入E:\lot1上传源 ZIP 文件目录不是 SeaweedFS 数据目录SeaweedFS 的数据关系是Postman/S3 请求 - S3 Gateway - Filer 元数据 - Volume 数据文件因此 S3 上传下载成功实际说明Filer 元数据已经写入D:\seaweedfs-test\filer\filerldb2ZIP 内容已经写入D:\seaweedfs-test\volumeE:\seaweedfs-test\master和E:\seaweedfs-test\backup为空不影响当前测试结果。本次 Filer 启动命令明确使用了-defaultStoreDir D:\seaweedfs-test\filer因此 Filer 写入 D 盘是确定的。当前weed server实例的 Master 元数据也实际出现在D:\seaweedfs-test\volume\m9333说明E:\seaweedfs-test\master没有被该运行实例采用。不要手动删除或复制.dat、.idx、.vif文件backup目录需要通过明确的备份流程写入不是 SeaweedFS 自动备份目录。2.1 NAS 参考信息和字段说明以下是与本机同步相关的 NAS 当前信息。它描述的是 NAS 集群的拓扑和容量状态不代表 NAS Filer/S3 已经完成部署或联通验证。项目当前值版本4.42MasterNAS_IP:9333Master gRPCNAS_IP:19333VolumeNAS_IP:8081对外地址对外IP:8081数据中心/Rackdc1/rack1集群容量标识8000 GB当前 volume 限制128,000 MB约 128 GB当前 volume 数量14ID 1-14最大 volume 数量140剩余可用 volume 数量126纠删码未启用字段含义版本NAS 运行的 SeaweedFS 构建版本。本机与 NAS 长期同步时应保持兼容当前目标是统一到 4.42。MasterMaster 的 HTTP 地址和端口负责集群拓扑、Volume 注册、分配和调度它不是对象上传地址也不是filer.sync的 Filer 地址。Master gRPCMaster 的 gRPC 通信端口Volume/Filer 等组件用于与 Master 进行内部控制通信它不是 Postman 的 S3 地址。VolumeVolume Server 的 HTTP 地址负责实际.dat/.idx/.vif对象数据读写不要把它当作 S3 Gateway 或 Filer 地址。对外地址Volume Server 向其他组件公布的可访问地址。NAS Master/Filer 必须能访问该地址否则可能出现分配到 Volume 但无法读写对象的问题。数据中心/RackSeaweedFS 拓扑标签用于副本放置、故障域和调度。单 NAS 主机通常只有一个数据中心和 Rack。集群容量标识构建或集群显示的容量级别不等于 NAS 当前已经占用或必须一次性提供的物理容量。当前 volume 限制单个 Volume 文件允许达到的大小上限128,000 MB 约为 128 GB。达到上限后SeaweedFS 会创建或分配新的 Volume不会要求单卷一次性达到 8 TB。当前 volume 数量现有 Volume 的数量及 ID 清单。删除对象不会立即删除对应 Volume 文件空间通常由 compaction 回收。最大 volume 数量该 Volume Server/集群允许创建的 Volume 数量上限。剩余可用数量是最大数量减去当前数量的估算值。纠删码是否启用 Erasure Coding。未启用表示当前数据不使用 SeaweedFS EC 编码NAS RAID、快照和硬件冗余不等同于 SeaweedFS 软件副本或纠删码。要执行跨端同步还必须另外确认 NAS Filer HTTP/gRPC例如8888/18888和 S3 Gateway例如9001仅有 Master 和 Volume 信息不能开始filer.sync。3. S3 账号配置创建D:\seaweedfs-test\config\s3.json。ChangeThisStrongPassword是占位符实际部署必须替换并且不要把真实 SecretKey 写入 Git 或文档。{identities:[{name:账号名,credentials:[{accessKey:AccessKey,secretKey:SecretKey}],actions:[Admin,Read,Write,List]}]}创建 bucket 需要Admin。bucket 创建完成后建议把权限改为actions:[Read,Write,List]修改配置后必须重启 S3 进程。4. 启动服务4.1 启动 Master 和 Volume在第一个 PowerShell 窗口执行保持窗口运行Set-LocationD:\seaweedfs-test.\weed.exe server -ip 本机IP -dirD:\seaweedfs-test\volume-master.dirE:\seaweedfs-test\master-master.volumeSizeLimitMB 131072 -master.defaultReplication 000 -volume.max 0 -volume.minFreeSpace 15% -metricsPort 9324本次 4.42 Windows 构建对-ip...等号写法解析异常使用“参数和值以空格分隔”的写法。不要将-ip.bind127.0.0.1直接照搬到此构建实测使用192.168.76.63。4.2 启动独立 Filer第二个 PowerShell 窗口执行Set-LocationD:\seaweedfs-test.\weed.exe filer -ip 本机IP -master 本机IP:9333 -port 8888 -port.grpc 18888 -maxMB 64 -defaultStoreDir D:\seaweedfs-test\filer本次构建虽然接受weed server -filer -s3但实测该组合命令只监听 Master/Volume因此 Filer 使用独立进程。4.3 启动 S3 Gateway第三个 PowerShell 窗口执行Set-LocationD:\seaweedfs-test.\weed.exe s3 -ip 192.168.76.63 -filer 192.168.76.63:8888 -port 9000 -config D:\seaweedfs-test\config\s3.json4.4 服务检查netstat-ano|findstr:8080 :8888 :9000 :9333Test-NetConnection192.168.76.63-Port 8080Test-NetConnection192.168.76.63-Port 8888Test-NetConnection192.168.76.63-Port 9000Invoke-WebRequesthttp://192.168.76.63:9000/-UseBasicParsing必须确认 8080、8888、9000、9333 均在监听。只有 9333/8080 表示 Master/Volume 已启动不能进行 S3 测试。5. Postman 冒烟测试5.0 postman部署先增加一个新的collection添加新的环境5.1 环境变量local_s3 http://192.168.76.63:9000 access_key deepiobjectdata secret_key 从 s3.json 读取 bucket deepiresults所有请求在 Authorization 页签设置Type: AWS Signature AccessKey: {{access_key}} SecretKey: {{secret_key}} AWS Region: us-east-1 Service Name: s3 Add authorization data to: Request Headers5.2 创建 bucketPUT {{local_s3}}/{{bucket}}要确认有Admin权限否则会创建失败。Body 选择none。预期200或204。若返回403 AccessDenied确认账号拥有临时Admin权限。5.3 上传 ZIPPUT {{local_s3}}/{{bucket}}/smoke/lot1/sample.zipBody 选择binary选择E:\lot1下的 ZIPHeaders 增加Content-Type: application/zip5.4 HEAD 检查HEAD {{local_s3}}/{{bucket}}/smoke/lot1/sample.zip预期200检查Content-Length是否等于源 ZIP 字节数。5.5 下载和校验GET {{local_s3}}/{{bucket}}/smoke/lot1/sample.zip下载请求的 Body 必须选择none。点击 Send 右侧下拉箭头选择Download response。若出现Maximum response size reached点击错误下方的Increase response size limit或在 Settings 中搜索response size将限制调到至少 300 MB。校验命令Get-FileHashE:\lot1\response.zip-Algorithm SHA256Get-FileHashE:\lot1\2526072911034801.zip-Algorithm SHA256本次两次结果一致5.6 删除和确认DELETE {{local_s3}}/{{bucket}}/smoke/lot1/sample.zip HEAD {{local_s3}}/{{bucket}}/smoke/lot1/sample.zip删除预期204随后 HEAD 预期404。.dat文件不会立即消失SeaweedFS 会在后续 compaction 中回收空间不得手动删除.dat/.idx/.vif。6. 本次冒烟结论已确认S3 地址http://192.168.76.63:9000可访问bucketdeepiresults可用196.57 MB ZIP 上传成功PostmanDownload response下载成功源文件和下载文件 SHA-256 一致删除返回204随后对象访问返回404。未在本文测试NAS Filer/S3、跨站点网络、filer.sync和长期循环上传压力。7. 常见问题现象处理Invalid URL方法下拉框已经选择 GET/PUT 时URL 中不要再写 GET/PUT。ECONNREFUSED 127.0.0.1本次服务绑定内网地址使用192.168.76.63:9000不要使用 localhost。403 AccessDenied核对 AWS Signature 密钥创建 bucket 需要 Admin。Maximum response size reached调大 Postman response size下载 Body 选择 none。deepiresults_8.dat仍存在正常删除是逻辑删除等待 Volume compaction不要手动删除数据文件。