SeaweedFS 全解析:从入门到集群部署,横向对比与核心原理一网打尽(下)

#作者:闫乾苓

3.2.3设置文件存储

启动文件管理器服务filer,可以提供基于浏览器的文件上传,下载等文件存储管理服务。默认使用leveldb2存储通过filer上传的文件的元数据。
为实现服务高可用,避免单点故障,可以在不同的集群节点启动多个filer服务:

节点:192.168.61.71
nohup /opt/seaweedfs/sbin/weed filer -ip=192.168.61.71 -master=192.168.61.71:9333,192.168.61.72:9333,192.168.61.73:9333 -dataCenter=dc1 -rack=rack1 -defaultReplicaPlacement=002 -defaultStoreDir=/opt/seaweedfs/filer/data >> /opt/seaweedfs/filer/logs/filer.log 2>&1 &
节点:192.168.61.72
nohup /opt/seaweedfs/sbin/weed filer -ip=192.168.61.72 -master=192.168.61.71:9333,192.168.61.72:9333,192.168.61.73:9333 -dataCenter=dc1 -rack=rack1 -defaultReplicaPlacement=002 -defaultStoreDir=/opt/seaweedfs/filer/data >> /opt/seaweedfs/filer/logs/filer.log 2>&1 &
节点:192.168.61.73
nohup /opt/seaweedfs/sbin/weed filer -ip=192.168.61.73 -master=192.168.61.71:9333,192.168.61.72:9333,192.168.61.73:9333 -dataCenter=dc1 -rack=rack1 -defaultReplicaPlacement=002 -defaultStoreDir=/opt/seaweedfs/filer/data >> /opt/seaweedfs/filer/logs/filer.log 2>&1 &

参数:

  • -defaultReplicaPlacement=002
    设置文件的副本数为2
    如果filer服务启动时设置改副本策略参数,直接使用该参数
    如果请求中没有副本策略参数,使用 Master 自己的默认配置。
  • -defaultStoreDir
    此参数来指定元数据存储filerldb2 的目录

注意:Filer 第一次启动时不会自动扫描已存在于 Volume 服务器上的文件
通过 weed upload -dir=“/home/weed/seaweedfs_upload_test” 方式上传的文件是直接存储到 Volume 服务器的,这种方式绕过了 Filer 的元数据管理系统。Filer 维护自己独立的元数据存储系统。当 Filer 启动时,它会初始化元数据存储后端,Filer 只能看到通过自己处理的文件上传请求,这些请求会在元数据存储中创建相应的条目。

浏览器访问filer服务的webUI并上传文件
在这里插入图片描述
3个节点的元数据自动互相同步。

3.2.4 设置S3服务

S3 Gateway 实际上是作为 filer 的一个前端接口工作的。当您通过 S3 API 上传文件时,S3 服务会将这些操作转换为对 filer 的调用,S3 Gateway 会将请求转发给 filer。
SeaweedFS 的 S3 配置文件是一个 JSON 格式的文件,用于定义身份认证和权限管理。
3.2.4.1 生成 s3.json 的方法
根据下面的格式,可以手动创建一个 s3.json 文件:

{
  "identities": [
    {
      "name": "admin",
      "credentials": [
        {
          "accessKey": "mykey",
          "secretKey": "mysecret"
        }
      ],
      "actions": [
        "Admin",
        "Read",
        "Write"
      ],
      "account": null
    }
  ],
  "accounts": []
}

配置文件的权限说明

  • Admin: 管理员权限
  • Read: 读取权限
  • Write: 写入权限
  • List: 列表权限
  • Tagging: 标签权限

配置文件的加载
S3 服务启动时会加载配置文件,通过 -config 参数指定

3.2.4.2 启动S3 服务
启动多个实例来实现高可用。基于您已经部署的 3 个 filer 节点,您可以在每个节点或其他节点上启动多个 S3 Gateway 实例。
创建相关目录

mkdir s3/{logs,conf} -p

节点1上启动 S3 服务

nohup /opt/seaweedfs/sbin/weed s3 -filer=192.168.61.71:8888 -port=8333 -ip.bind=192.168.61.71 -config=/opt/seaweedfs/s3/conf/s3.json >> /opt/seaweedfs/s3/logs/s3.log 2>&1 &

节点2上启动 S3 服务

nohup /opt/seaweedfs/sbin/weed s3 -filer=192.168.61.72:8888 -port=8333 -ip.bind=192.168.61.72 -config=/opt/seaweedfs/s3/conf/s3.json >> /opt/seaweedfs/s3/logs/s3.log 2>&1 &

节点3上启动 S3 服务

nohup /opt/seaweedfs/sbin/weed s3 -filer=192.168.61.73:8888 -port=8333 -ip.bind=192.168.61.73 -config=/opt/seaweedfs/s3/conf/s3.json >> /opt/seaweedfs/s3/logs/s3.log 2>&1 &

3.2.4.3 使用awscli客户端工具连接seaweedfs s3
AWS CLI官方命令行工具,功能最全面,兼容性最好
安装:

~# pip install awscli
~# aws --version
aws-cli/1.40.35 Python/3.9.9 Linux/5.10.0-153.24.0.100.6.oe2203sp2.bclinux.x86_64 botocore/1.38.36

配置:

~# aws configure
AWS Access Key ID [None]: mykey
AWS Secret Access Key [None]: mysecret
Default region name [None]: us-east-1
Default output format [None]: json

常见操作命令:
设置自定义端点(指向您的 SeaweedFS S3 服务)

export AWS_ENDPOINT_URL=http://192.168.61.71:8333  

列出所有 bucket

aws s3 ls  

创建 bucket

aws s3 mb s3://my-bucket  

上传文件

aws s3 cp local-file.txt s3://my-bucket/  
aws s3 cp /path/to/local/file s3://my-bucket/remote-file.txt  

下载文件

aws s3 cp s3://my-bucket/file.txt ./  
aws s3 cp s3://my-bucket/remote-file.txt /path/to/local/  

创建目录,在 S3 中,目录实际上是通过对象键(object key)的前缀来模拟的。
创建一个以 / 结尾的空对象来表示目录

aws s3api put-object --bucket my-bucket --key my-directory/

同步目录

aws s3 sync /local/directory s3://my-bucket/  
aws s3 sync s3://my-bucket/ /local/directory 

列出 bucket 内容

aws s3 ls s3://my-bucket/  
aws s3 ls s3://my-bucket/folder/ --recursive  

删除文件

aws s3 rm s3://my-bucket/file.txt  

删除 bucket(必须为空)

aws s3 rb s3://my-bucket  

删除 bucket 及其所有内容

aws s3 rb s3://my-bucket --force

通过filer web界面查看通过s3上传的文件:
在这里插入图片描述

3.2.5 SeaweedFS FUSE挂载功能

SeaweedFS 的 FUSE (Filesystem in Userspace) 功能允许将 SeaweedFS 挂载为本地文件系统,使应用程序可以像访问本地文件一样访问 SeaweedFS 中的文件。
3.2.5.1 FUSE 挂载命令和参数
基本的挂载命令格式如下:

weed mount -filer=<filer_host:filer_port> -cacheCapacityMB=xxx -chunkSizeLimitMB=4 -dir=mount_point_dir

核心参数详解

  • -filer: 指定 filer 服务器地址,默认为 localhost:8888
  • -dir: 本地挂载点目录
  • -cacheCapacityMB: 文件块读取缓存容量(MB),默认为 128MB。采用分层缓存(内存 + 磁盘),当 cacheCapacityMB > 0 时,系统会创建分层缓存,包括内存缓存和磁盘缓存。
  • -chunkSizeLimitMB: 本地写入缓冲区大小,也是大文件分块大小,默认 2MB
  • -replication: 文件复制级别,会覆盖 filer 和 master 的默认设置
  • -volumeServerAccess: 卷服务器访问方式,支持 direct、publicUrl、filerProxy
    • direct: 直接访问卷服务器
    • filerProxy: 通过 filer 代理访问卷服务器,适用于卷服务器不对外暴露的场景
    • publicUrl :用卷服务器的公共 URL 地址来直接访问卷服务器,适用于需要通过特定网络路径访问卷服务器的场景,比如:FUSE 客户端与 SeaweedFS 集群之间存在 NAT 或防火墙,负载均衡器地址,不在同一个数据中心,需要通过专线或公网进行跨数据中心访问。

publicUrl 模式提供了更直接的数据访问路径,可能具有更好的性能,但要求卷服务器的公共地址对 FUSE 客户端可达。这与 direct 模式类似,但使用的是专门配置的公共地址而不是内部地址。

3.2.5.2 FUSE 挂载流程

  1. 连接验证: 尝试连接 filer 并获取配置
  2. 参数验证: 检查 chunkSizeLimitMB 等参数的合理性
  3. 权限检查: 验证挂载权限和目录可用性

创建 SeaweedFileSystem 实例:
系统会根据配置参数创建文件系统实例,包括缓存配置、权限映射等。

3.2.5.3高级配置选项
SeaweedFS 的 FUSE 实现提供了完整的 POSIX 文件系统接口,支持标准的文件操作,同时通过缓存和代理机制优化了性能和网络访问。

缓存配置

  • -cacheDirForRead: 读缓存目录,默认为系统临时目录
  • -cacheDirForWrite: 写缓存目录
  • -cacheMetaTtlSec: 元数据缓存有效期,默认 60 秒

权限和安全

  • -allowOthers: 允许其他用户访问文件系统
  • -umask: 文件权限掩码
  • -readOnly: 只读模式

性能调优

  • -concurrentWriters: 并发写入协程数,默认 32
  • -dataCenter: 优先访问的数据中心

3.2.5.4实际使用示例
允许普通用户挂载 FUSE 文件系统,并且让其他用户访问挂载结果
编辑 /etc/fuse.conf,取消user_allow_other,否则使用普通用户无法启动mount.
启用 allow_other 会让所有用户都能访问挂载的文件系统,如果没有设置合理的权限或做隔离控制,可能会造成数据泄露或系统风险。

在开放 user_allow_other 前应充分评估:

  • FUSE 文件系统的类型和用途
  • 宿主机的用户管理策略
  • 是否需要配合使用 umask, gid, uid 等挂载选项进行访问控制
    nohup /opt/seaweedfs/sbin/weed mount -filer=“192.168.61.71:8888,192.168.61.72:8888,192.168.61.73:8888” -dirAutoCreate -dir=/home/weed/seaweedfs -cacheCapacityMB=100 -concurrentWriters=128 >> /opt/seaweedfs/filer/logs/s3.log 2>&1 &

注意事项

  1. 权限要求: FUSE 挂载通常需要特殊权限,在容器环境中需要 SYS_ADMIN 能力
  2. 缓存策略: 合理配置缓存大小可以显著提升性能
  3. 网络访问: volumeServerAccess=filerProxy 适用于卷服务器不对外暴露的生产环境
    查看挂载:
    在这里插入图片描述
    可以正常看到之前上传测试的文件,通过linux命令行创建文件、目录都正常。
    在这里插入图片描述
    关闭时需要先停止FUSE 挂载进程,再umont挂载的目录。否则会有如下报错提示:
    在这里插入图片描述
    3.2.5.5SeaweedFS FUSE 挂载适合的场景
  4. 静态文件存储:图片、视频、文档等
  5. 备份存储:数据库备份文件的存储
  6. 日志文件:应用程序日志的存储
  7. 开发环境:非生产环境的文件共享
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值