侧边栏壁纸
  • 累计撰写 22 篇文章
  • 累计创建 29 个标签
  • 累计收到 2 条评论

目 录CONTENT

文章目录

使用s3fs安装存储区

胖虎
2024-05-16 / 0 评论 / 0 点赞 / 20 阅读 / 5103 字
温馨提示:
本文最后更新于 2024-05-16,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

需要对 NFS 样式的文件系统执行读写操作的应用程序可以使用 s3fs,s3fs 可以将存储区安装为目录,同时保留文件的本机对象格式。

这允许您使用熟悉的 shell 命令(如用于列示的 ls 或用于复制文件的 cp)与 Cloud Storage 进行交互,以及提供对依赖于读写本地文件的旧应用程序的访问权。 有关更详细的概述,请访问项目的官方自述文件

安装植入

在 Debian 或 Ubuntu 上:

sudo apt-get install automake autotools-dev fuse g++ git libcurl4-openssl-dev libfuse-dev libssl-dev libxml2-dev make pkg-config

在 RHEL 和 CentOS 7 或更高版本上,通过 EPEL:

sudo yum install epel-release
sudo yum install s3fs-fuse

提示:官方 s3fs 文档建议使用的是 libcurl4-gnutls-dev,而不是 libcurl4-openssl-dev。 这两者均可正常工作,但 OpenSSL 版本的性能可能更佳。

对于 macOS,您将需要从源构建 s3fs :

确保已安装以下软件包 (所有软件包都可通过 Homebrew 获得):

  • macfuse
  • automake
  • gcc
  • curl
  • libxml2
  • pkg-config
  • openssl

openssl 安装的输出中所述,您将需要设置以下环境变量:

export LDFLAGS="-L/usr/local/opt/openssl@3/lib"
export CPPFLAGS="-I/usr/local/opt/openssl@3/include"
export PKG_CONFIG_PATH="/usr/local/opt/openssl@3/lib/pkgconfig"

请首先克隆 Github 存储库:

git clone https://github.com/s3fs-fuse/s3fs-fuse.git 

然后构建 s3fs和安装二进制文件:

cd s3fs-fuse
./autogen.sh
./configure
make && make install

配置

创建s3fs密码文件 将ACCESS_KEY_ID和SECRET_ACCESS_KEY替换为你自己的

echo ACCESS_KEY_ID:SECRET_ACCESS_KEY > ${HOME}/.passwd-s3fs
chmod 600 ${HOME}/.passwd-s3fs

使用以下命令将S3FS文件系统挂载到本地目录:

s3fs <bucket> <mountpoint> -o url=http{s}://<endpoint> -o passwd_file=<credentials_file>

示例中的 <bucket> 引用了现有存储区,而 <mountpoint> 是要在其中安装存储区的本地路径。 <endpoint> 必须对应于存储区的位置。 credentials_file 是创建的包含 API 密钥或 HMAC 凭证的文件。

性能优化

虽然性能绝不会与真正的本地文件系统完全一样,但是可以使用一些高级选项来提高吞吐量。

s3fs mp4 /data/s3 -o url=https://ap-south-1.linodeobjects.com -o passwd_file=${HOME}/.passwd-s3fs \
-o cipher_suites=AESGCM \
-o max_background=1000 \
-o max_stat_cache_size=100000 \
-o max_dirty_data=102400 \
-o multipart_size=52 \
-o parallel_count=30 \
-o multireq_max=30 \
-o sigv2 \
-o curldbg \
-o allow_other
  1. -o sigv2 :签名版本号,默认为v2,可选v2和v4版本。
  2. -o max_dirty_data=102400
  3. -o passwd_file= :密码文件存储路径
  4. -o allow_other:允许所有用户访问
  5. cipher_suites=AESGCM 仅在使用 HTTPS 端点时适用。 缺省情况下,与 IBM COS 的安全连接使用的是 AES256-SHA 密码套件。 使用 AESGCM 套件可大大降低客户机上的 CPU 负载 (由 TLS 加密功能导致),同时提供相同级别的加密安全性。
  6. -o kernel_cache 支持 s3fs mountpoint 安装点上的内核缓冲区高速缓存。 这意味着对象将仅由 s3fs 读取一次,因为同一文件的重复读取可以通过内核的缓冲区高速缓存进行处理。 内核缓冲区高速缓存将仅使用未被其他进程使用的可用内存。 如果在存储区安装期间预期存储区对象会被其他进程/机器覆盖,并且您的用例需要实时访问最新的内容,那么建议不要使用此选项。
  7. -o max_background=1000 可提高 s3fs 并行文件读取性能。 缺省情况下,FUSE 支持最多 128 KB 的文件读请求。 当要求读取的对象超过此大小时,内核会将大请求拆分为较小的子请求,并允许 s3fs 以异步方式处理这些子请求。 max_background 选项用于设置此类并行异步请求的全局最大数目。 缺省情况下,它设置为 12,但将其设置为任意高值 (1000) 会阻止读取请求,即使在同时读取许多文件时也是如此。
  8. -o max_stat_cache_size=100000 可减少 HEAD 发送的冗余 HTTP s3fs 请求数,并缩短列出目录或检索文件属性所用的时间。 典型的文件系统用法会通过 stat() 调用频繁访问文件的元数据,该调用将映射到对象存储系统上的 HEAD 请求。 缺省情况下,s3fs 会高速缓存最多 1000 个对象的属性(元数据)。 每个高速缓存的条目最多需要 0.5 KB 内存。 理想情况下,您希望高速缓存能够保存存储区中所有对象的元数据。 但是,您可能需要考虑这种高速缓存对内存使用量的影响。 将其设置为 100000 需要的内存不超过 0.5 KB * 100000 = 50 MB。
  9. -o multipart_size=52 将设置从 COS 服务器发送和接收的请求和响应的最大大小 (以 MB 为单位)。缺省情况下,s3fs 将此值设置为 10 MB。 增大此值还会增加每个 HTTP 连接的吞吐量(MB/秒)。 另一方面,从文件提供的第一个字节的等待时间也将增加。 因此,如果您的用例仅读取每个文件中的少量数据,那么您可能不需要增大此值。 此外,对于大型对象(例如,超过 50 MB),如果此值足够小,允许使用多个请求来并行访存文件,那么吞吐量会增加。 我发现此选项的最佳值大约为 50 MB。 COS 最佳实践建议使用的请求数为 4 MB 的倍数,因此建议将此选项设置为 52 (MB)。
  10. -o parallel_count=30 设置每个文件读/写操作中并行发送给 COS 的最大请求数。 缺省情况下,此值设置为 5。 对于非常大的对象,您可以通过增大此值来获取更多吞吐量。 与先前选项一样,如果只读取每个文件的少量数据,请使此值保持较小。
  11. -o multireq_max=30 - 列出目录时,会针对列表中的每个对象发送对象元数据请求 (HEAD),除非在高速缓存中找到元数据。 此选项用于限制针对单个目录列示操作发送到 COS 的此类并发请求数。 缺省情况下,此值设置为 20。 请注意,此值必须大于或等于上面的 parallel_count 选项。
  12. -o dbglevel=warn 将调试级别设置为 warn,而不设置为缺省值 (crit),以将消息记录到 /var/log/syslog。

限制

请务必记住,s3fs 可能并不适用于所有应用程序,因为 Object Storage 服务的首字节响应时间的等待时间较长,并且缺少随机写访问权。 仅读取大文件的工作负载(如深度学习工作负载)可以使用 s3fs 实现良好的吞吐量。

0

评论区