需求背景


简单来说就是想要实现 S3 协议和 Posix 协议的统一命名空间能力,两种协议上传/写入的文件可以互相访问。本文简述相关部署过程,供社区小伙伴们参考。
部署前提
1.已经部署了一套 CurveFS 共享文件存储系统;
2.已经挂载了一个 CurveFS 文件系统到服务器的 /mnt/minio-data目录上;
部署 CurveFS 和挂载文件系统的操作步骤可以参考 Curve 官方部署工具 CurveAdm 的用户手册:
部署步骤
这里使用 minio-s3-gateway 服务作为 S3 网关,并用 docker 进行部署,相关参考资料:
https://github.com/minio/minio/blob/RELEASE.2022-04-26T01-20-24Z/docs/gateway/nas.md
$ docker run --privileged -p 9000:9000 \--name curvefs-minio-s3-gateway \-v mnt/minio-data:/data \-e "MINIO_ROOT_USER=minio-access-key" \-e "MINIO_ROOT_PASSWORD=minio-secret-key" \-e "MINIO_REGION=us-east-1" \--console-address ":9001" \docker.io/minio/minio:RELEASE.2022-04-26T01-20-24Z \gateway nas data
API: http://10.88.0.18:9000 http://127.0.0.1:9000Console: http://10.88.0.18:9001 http://127.0.0.1:9001Documentation: https://docs.min.ioFinished loading IAM sub-system (took 0.0s of 0.0s to load data)....... // 以下内容省略
参考资料:https://min.io/docs/minio/linux/administration/minio-console.html
功能验证
接下来我们部署一个 minio 的客户端,来验证 S3 网关的可用性,以及 S3 网关与 CurveFS 文件系统挂载点是否可以做到统一命名空间下互相访问文件。
部署 minio 客户端
$ docker run -it --entrypoint=/bin/sh minio/mc:RELEASE.2022-04-26T18-00-22Z
{ "version": "10", "aliases": { "curvefs": { "url": "http://10.88.0.18:9000", "accessKey": "minio-access-key", "secretKey": "minio-secret-key", "api": "S3v4", "path": "auto" } }}
$ mc mb curvefs/bucket1Bucket created successfully `curvefs/bucket1`.$ mc cp anaconda-ks.cfg curvefs/bucket1//root/anaconda-ks.cfg: 7.53 KiB 7.53 KiB ┃▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓┃ 777.03 KiB/s 0s$ mc ls curvefs/bucket1/[2023-04-25 09:16:37 UTC] 7.5KiB STANDARD anaconda-ks.cfg
$ ls mnt/minio-data/bucket1$ ls mnt/minio-data/bucket1/anaconda-ks.cfg
$ mc cp curvefs/bucket1/dir1/bigfile.500M...t1/dir1/bigfile.500M: 500.00 MiB 500.00 MiB ┃▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓┃ 628.02 MiB/s 0s
$ ls mnt/minio-data/bucket1/dir1bigfile.500M
$ cd mnt/minio-data/bucket1/dir1$ dd if=/dev/zero of=./newbigfile.10M bs=1M count=10
$ mc ls curvefs/bucket1/dir1[2023-04-25 09:29:33 UTC] 10MiB STANDARD newbigfile.10M$ mc cp curvefs/bucket1/dir1/newbigfile.10M ./root/newbigfile.10M: 10.00 MiB / 10.00 MiB ┃▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓┃ 76.14 MiB/s 0s
补充说明
高可用及单节点性能问题
这里的操作步骤均是单节点模式,如果要做到 S3 网关的高可用及防止性能瓶颈,可以在多台服务器上重复上述步骤,并给 S3 网关服务部署负载均衡服务(如 Nginx 或 haproxy 等),只需要 CurveFS 挂载的是同一个文件系统即可。
CurveAdm 部署工具集成问题
本次实践是一次功能验证,后续 Curve 社区将把相关功能集成到 CurveAdm 部署工具中,方便用户使用维护。
minio gateway 的废弃问题
minio 的 S3 gateway 服务已经于 2020 年初开始逐步废弃了,但老版本的仍然可以继续使用,只需要指定版本号即可正常部署。如果有特殊需求,也可以 fork minio 的代码仓库自行定制修改。


关于 Curve
Curve 亦可作为云存储中间件使用 S3 兼容的对象存储作为数据存储引擎,为公有云用户提供高性价比的共享文件存储。
GitHub:https://github.com/opencurve/curve 官网:https://opencurve.io/ 用户论坛:https://ask.opencurve.io/ 微信群:搜索群助手微信号 OpenCurve_bot
文章转载自OpenCurve,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




