59k star的开源项目——MinIO正式宣布代码不再更新,项目处于停止维护状态,这款高性能,与S3兼容的对象存储系统,难道说就此落幕?

多年Minio的使用经历,已经在新项目,甚至将历史项目的存储部分从原有的GlusterFS,FastFS等迁移了过来,如果有一天Minio真的闭源和采取更加严格的开源协议,那还真要思考未来存储的选型了。
已经习惯使用S3的,包括云厂商各种各样“类S3”块存储产品,项目中对开源Minio还有很大的依赖和不舍,毕竟好用有免费:
- Minio兼容 S3 API – 与现有S3工具无缝集成
- 专为人工智能和分析而打造——针对大规模数据管道进行了优化
- 高性能——是高要求存储工作负载的理想之选。
由于好用,由于兼容,所以爱的深切!
简单给大家看下我Minio的一个开发环境(容器启动)
支持Bucket(桶)

好用的AK,SK等权限管理

UI简介大方,方便存储内容的管理

多种认证方式的支持,包括LDAP

总之,Minio项目的变化,也没说目前不让能用,也不是Minio目前bug多的都无法修复的状态,我还是持观望态度,安静等待项目后续的操作…
既然这样,那我们还是要提前做好准备,寻找一下Minio的替代品吧,其中就有如下产品可供挑选:
- Ceph Object Gateway (RGW)
- SeaweedFS
- OpenStack Swift
- JuiceFS
- Dragonfly
- Storj
- Garage
以上每种产品都有自己的特点和需求场景,简答总结如下:

看到有国外大神提到了SeaweedFS

那咱就听话,立即行动起来,试试其他开源存储产品,第一从SeaweedFS开始。
SeaweedFS,目前github上28.4k star,看着也是个优秀的开源好项目!

SeaweedFS 安装
(1)安装比较简单,可以二进制下载,直接运行
下载解压缩单个二进制文件 weed 或 weed.exe,或者运行
go install github.com/seaweedfs/seaweedfs/weed@latest
设置访问对象存储的管理员凭据。
export AWS_ACCESS_KEY_ID=admin ; export AWS_SECRET_ACCESS_KEY=key
运行
weed server -dir=/some/data/dir -s3
启动一个主服务器、一个卷服务器、一个文件服务器和一个 S3 网关。
(2)我本地还是习惯于使用docker启动
下载seaweedfs-compose.yml

使用如下命令启动即可:
docker compose -f seaweedfs-compose.yml -p seaweedfs up
启动后:

这里提示我本地9000端口被占用了,更换为9002,顺利启动

(3) seaweedfs 简单使用
上传文件前需要先请求接口,获取文件的fid

$ curl http://10.133.254.123:9333/dir/assign
{“fid”:”3,02d45b5df0″,”url”:”volume:8080″,”publicUrl”:”volume:8080″,”count”:1
开头的数字 3 代表卷 ID。逗号后面是一个文件键 02 和一个文件 cookie d45b5df0。
根据获取到的fid上传本地文件:

curl -F file=@/home/fisher/wx01.png http://10.133.254.123:8080/3,02d45b5df0
其中:本地文件为wx01.png
查看上传的文件:
下面三种方式都可以获取到图片
http://10.133.254.123:8080/3/02d45b5df0/wx01.png
http://10.133.254.123:8080/3/02d45b5df0.png
http://10.133.254.123:8080/3/02d45b5df0
如:

还可以简单的对图片进行缩放显示,如我把图片设置为400*400

SeaweedFS 也提供了简单UI


(4)从Minio迁移数据到SeaweedFS
可以使用s3cmd迁移数据
s3cmd sync s3://minio-bucket/ s3://seaweedfs-bucket/
–host-bucket=”%(bucket).localhost:8333″
–access_key=access_key
–secret_key=secret_key
(5)使用Python API操作SeaweedFS
import boto3
from botocore.client import Config
import io
class SeaweedFSS3Client:
def __init__(self, endpoint='http://localhost:8333'):
self.s3 = boto3.client(
's3',
endpoint_url=endpoint,
aws_access_key_id='access_key',
aws_secret_access_key='secret_key',
config=Config(signature_version='s3v4')
)
self.bucket = 'my-bucket'
self._ensure_bucket()
def _ensure_bucket(self):
"""确保存储桶存在"""
try:
self.s3.head_bucket(Bucket=self.bucket)
except:
self.s3.create_bucket(Bucket=self.bucket)
def upload_file(self, key, file_path):
"""上传文件"""
self.s3.upload_file(file_path, self.bucket, key)
return f"s3://{self.bucket}/{key}"
实际使用体验中,发现SeaweedFS 有些“拉胯”,特别是对于Minio完善的对于S3 API的兼容,各种使用丝滑的不行。
可惜,SeaweedFS好像本身在原生设计中并没有内置 Bucket 的概念(更贴近文件系统的目录层级),也没有原生的 AK/SK(Access Key/Secret Key)权限控制,
不过可以通过以下方式实现类似 S3 的 Bucket 管理和 AK/SK 认证授权,满足对象存储的常用需求:
- 模拟 Bucket:利用 Volume 和目录层级实现
- 按 Filer 目录层级模拟 Bucket(轻量,灵活性高)
另外在实现 AK/SK 认证授权方面我也没有从文档里面找到清晰的使用方案,查了下,可以通过第三方插件或反向代理方式,如:
- 使用 SeaweedFS 的 S3 网关(推荐,兼容 S3 AK/SK)
- 通过 Nginx 反向代理实现 AK/SK 认证(自定义,灵活性高)
- 集成第三方身份认证服务(企业级,扩展性强)
总之,SeaweedFS 的体验感觉一般般,跟Minio项目比说实在话是有些“拉胯”,除了UI太简陋之外,有些功能还需要自己去实现或者找三方工具,列如在安全方面,需要在前面加一层Nginx或者Lua来处理认证等逻辑。
看到有人提到了rustfs不错,有时间我还是得再试试其他开源工具,给Minio留一个后路…
过往皆为序章,未来当赴新途!
(全文完)




rustfs
其他替代产品好用吗?
SeaweedFS感觉一般,准备测试下rustfs
收藏了,感谢分享