1 相关概念简述
1.1 Amazon S3
Amazon Simple Storage Service (Amazon S3)
是由亚马逊网络服务(AWS)提供的一种高度可扩展、可靠、安全、低成本的在线对象存储服务。
Amazon S3
被设计成通过 web 服务接口存储和检索任意数量的数据,从任何地方的互联网访问。它是 AWS 产品组合中最成熟的服务之一,自 2006 年首次推出以来,已经成为全球广泛采用的云存储解决方案。
1.2 S3fs
s3fs
是一个基于 FUSE(Filesystem in Userspace)
的文件系统,它允许你将 Amazon S3
或其他兼容 S3 API
的对象存储服务挂载到本地文件系统中,从而能够像访问本地磁盘一样访问远程对象存储,像操作本地文件系统一样操作 S3 存储桶中的文件和目录。
- s3fs 项目地址:https://github.com/s3fs-fuse/s3fs-fuse
1.3 MinIO
MinIO
是一个对象存储解决方案,它提供了高性能、高可扩展性以及分布式的存储,支持 Amazon S3 API
,使用 S3 的工具或应用程序都可以与 MinIO
无缝集成。
2 MinIO 准备
2.1 安装 Docker
- 操作参考:Docker 基础篇-CSDN博客
# 卸载旧版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
# 安装GCC编译器相关
sudo yum -y install gcc
sudo yum -y install gcc-c++
# 配置yum资源库
sudo yum install -y yum-utils
# 配置阿里云镜像
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装docker
sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 启动docker
sudo systemctl start docker
2.2 安装 MinIO
# 参数 MINIO_ACCESS_KEY 为登录账号(至少3位),MINIO_SECRET_KEY 为登录密码(至少8位)
docker run --restart=always \
-p 9000:9000 \
-p 9001:9001 \
--privileged=true \
-v /app/minio/data:/data \
-v /app/minio/config:/root/.minio \
-e MINIO_ACCESS_KEY=minioadmin \
-e MINIO_SECRET_KEY=12345678 \
--name minio \
-d minio/minio \
server /data --console-address ":9001" -address ":9000"
手动上传 docker 镜像
- 如果 Docker 无法直接拉取到 MinIO 的镜像,可以从这里下载:MinIO-RELEASE.2024-05-10T01-41-38Z资源-CSDN文库
# 下载后上传到服务器,会得到一个镜像 tar 文件,导入镜像再执行上述启动命令即可
docker load -i minio.tar
2.3 创建存储桶
- 访问地址:http://192.168.198.144:9001
注:IP 地址为安装 MinIO 的服务器 IP,账号密码为启动容器时设置的 MINIO_ACCESS_KEY、MINIO_SECRET_KEY 参数
- 创建存储桶 s3-bucket
3 S3fs 挂载 S3 存储桶
3.1 安装 S3fs
# 安装启用 EPEL 仓库
yum install epel-release
# 安装 s3fs
yum install s3fs-fuse
# 查看 s3fs 版本,确定是否成功安装
s3fs --version
3.2 挂载 S3 存储桶
# 创建 passwd 文件
touch /etc/passwd-s3fs
# MINIO_ACCESS_KEY:登录账号 MINIO_SECRET_KEY:登录密码
# echo <MINIO_ACCESS_KEY>:<MINIO_SECRET_KEY> > /etc/passwd-s3fs
echo minioadmin:12345678 > /etc/passwd-s3fs
# 设置密钥文件只能够被当前用户访问
chmod 600 /etc/passwd-s3fs
# 创建挂载目录(-p 选项可以递归创建目录)
mkdir -p /mnt/minio/s3-bucket
# 挂载 S3 存储桶到本地文件系统
# s3fs <存储桶名称> <挂载路径> -o passwd_file=<密钥文件> -o url=<S3兼容存储服务访问点> -o use_path_request_style
# 注:默认情况下,s3fs 使用的是“虚拟主机”(virtual hosting)请求风格,这意味着在访问 bucket 中的对象时,URL 会直接使用 bucket 名称作为子域名。增加参数 -o use_path_request_style 则不会改用路径请求风格
s3fs s3-bucket /mnt/minio/s3-bucket -o passwd_file=/etc/passwd-s3fs -o url=http://192.168.198.144:9000 -o use_path_request_style
检查挂载结果
df -h
卸载 S3 存储桶
# umount <挂载路径>
umount /mnt/minio/s3-bucket
挂载故障排除和调试
# 在挂载命令后增加几个参数 -d -f -o f2 -o curldbg 即可
# -d:启用调试模式。该选项会输出更详细的调试信息,用于故障排除和调试目的。
# -f:以前台模式运行。通常,s3fs 在后台运行并将挂载的 S3 存储桶映射到本地目录。使用 -f 选项,s3fs 将在前台运行,并将输出信息打印到终端。
# -o f2:指定文件系统选项 "f2"。这个选项是 s3fs 的一个特殊选项,用于启用 FUSE 文件系统的第二代实现。它可用于提供更高的性能和可靠性。
# -o curldbg:启用 cURL 调试输出。cURL 是 s3fs 使用的底层工具之一,用于与 S3 存储桶进行通信。启用 -o curldbg 选项会输出关于 cURL 请求和响应的详细调试信息,用于诊断和分析与 S3 存储桶的通信问题。
s3fs s3-bucket /mnt/minio/s3-bucket -o passwd_file=/etc/passwd-s3fs -o url=http://192.168.198.144:9000 -o use_path_request_style -d -f -o f2 -o curldbg
3.3 开机自动挂载 S3 存储桶
查找并显示可执行命令 s3fs 的完整路径
which s3fs
编辑配置文件
# 编辑配置文件
vi /etc/fstab
# 查看配置文件
cat /etc/fstab
# 追加自动挂载命令配置(注:如果 MinIO 也安装在同一台服务器则可能会自动挂载失败,因为挂载时需要确保 S3 存储桶能正常访问)
# 命令格式:[s3fs可执行文件路径]#[S3存储桶] [挂载路径] fuse _netdev,use_path_request_style,url=<S3兼容存储服务访问点>,passwd_file=<密钥文件> 0 0
# _netdev 选项告诉内核此挂载点可能会通过网络访问,因此应该在网络就绪后才尝试挂载
# use_path_request_style 指定使用路径请求风格,即访问 S3 存储桶的方式与传统的 HTTP URL 请求类似,而不是使用虚拟主机风格
# 0 0 这两个数字分别代表挂载点的用户 ID(uid)和组 ID(gid),它们控制着谁可以访问挂载的文件系统。在这里,使用 0 0 意味着 root 用户和 root 组将拥有权限
/usr/bin/s3fs#s3-bucket /mnt/minio/s3-bucket fuse _netdev,use_path_request_style,url=http://192.168.198.144:9000,passwd_file=/etc/passwd-s3fs 0 0