本节所介绍的S3FS fuse,是一款针对linux操作系统,帮助用户把对象存储桶挂载到本地文件系统的工具,使得用户操作存储桶里的数据就如同操作本地文件一样方便。

1.安装S3fs软件

debian系列:

更新软件源

apt update 

安装s3fs

apt install s3fs
centos系列:

更新软件源

yum update

安装s3fs

yum install s3fs

2.挂载存储桶

示例存储桶:

自建miniio为例
存储桶地址:http://127.0.0.1:9000
账号:dhHvhafhUglqsTJUfPWG
密码:9hsEHyvDiRiLOVvt5bfrWy99deADrvL5AxQOxv6i
桶名称:000

1.创建密钥

echo 账号:密码 > 密钥路径

echo dhHvhafhUglqsTJUfPWG:9hsEHyvDiRiLOVvt5bfrWy99deADrvL5AxQOxv6i > /etc/passwd-s3fs

修改秘钥文件权限,来限制访问 :

chmod 600 /etc/passwd-s3fs

2.挂载存储

创建挂载目录 新建文件夹

mkdir /opt/000

挂载S3 存储桶

s3fs 000 /opt/000 -o passwd_file=/etc/passwd-s3fs -o url=http://127.0.0.1:9000 -o use_path_request_style -o allow_other

卸载 S3 存储桶
umount <挂载路径>

umount /opt/000

3.挂载参数

故障排除和调试

-d
启用调试模式。该选项会输出更详细的调试信息,用于故障排除和调试目的

-f
以前台模式运行。通常,s3fs 在后台运行并将挂载的 S3 存储桶映射到本地目录。使用 -f 选项,s3fs 将在前台运行,并将输出信息打印到终端。

-o curldbg
启用 cURL 调试输出。cURL 是 s3fs 使用的底层工具之一,用于与 S3 存储桶进行通信。启用 -o curldbg 选项会输出关于 cURL 请求和响应的详细调试信息,用于诊断和分析与 S3 存储桶的通信问题。

挂载参数

-o passwd_file=/path/to/passwd
指定包含MinIO访问密钥和密钥ID的文件的路径。

-o use_path_request_style
使用路径请求样式而不是子域请求样式

-o allow_other
允许其他用户访问挂载点。

-o umask=022
设置文件和目录的默认权限掩码。用全部权限777去减这个数值

-o nonempty
允许挂载非空目录

-o url=http://127.0.0.1:9000
指定对象存储服务器服务器的URL。

性能优化

-o f2
指定文件系统选项 "f2"。这个选项是 s3fs 的一个特殊选项,用于启用 FUSE 文件系统的第二代实现。它可用于提供更高的性能和可靠性。

-o use_cache=路径
指定本地磁盘缓存的路径。启用本地磁盘缓存可以显著提高读取性能。

-o stat_cache_expire=
设置目录和文件属性的缓存过期时间。较短的过期时间可确保及时获取对象的最新信息

-o enable_noobj_cache
启用对象的缓存,以避免重复的S3 HEAD请求。

-o max_parallel=10
指定并行请求的最大数量。

multipart_size=100M
设置多部分上传的分块大小,可以影响写入性能。

use_disk_cache
启用本地磁盘缓存。
disk_cache_size=1000M
设置本地磁盘缓存的大小限制。

4.使用supervisor启动s3fs 进程保活 开机自启

  1. 安装supervisor
apt install supervisor
  1. 建立一个目录,存放s3fs的启动脚本:
mkdir /root/s3fs_scripts
  1. 编辑启动脚本
nano /root/s3fs_scripts/start_s3fs.sh
  1. 写入启动脚本
s3fs 000 /opt/s3000 -o passwd_file=/opt/passwd-s3fs -o url=http://127.0.0.1:9000 -o use_path_request_style -o allow_other
  1. 编辑/etc/supervisor/supervisord.conf,在最后加入下面一段:
[program:s3fs]
command=bash /root/s3fs_scripts/start_s3fs.sh #脚本路径
logfile=/var/log/s3fs.log
log_stdout=true
log_stderr=true
logfile_maxbytes=1MB
logfile_backups=10
  1. 运行supervisor:
supervisord
  1. 确认一切正常:
ps aux | grep supervisor # 应该能看到supervisor进程
ps aux | grep s3fs # 应该能看到s3fs进程
killall s3fs # 杀掉s3fs进程,supervisor应该会重启它
ps aux | grep s3fs # 应该能看到s3fs进程

如果出错,请检查/var/log/supervisor/supervisord.log和/var/log/s3fs.log。

愿这盛世 每一天