通过s3fs工具以文件系统方式访问obs实践与调优

阿里云服务器优惠

背景

s3fs是一款开源的,支持将对象存储中的bucket以文件形式导出的文件系统接口,兼容POSIX语义。

本文介绍了使用s3fs,将OBS的桶挂载至本地目录,从而通过文件系统的风格进行OBS桶内基本操作。同时,基于性能比对测试,本文推荐了一组s3fs挂载参数参数,以供参考使用。

s3fs挂载示意图如下所示:

image.png

s3fs环境搭建

1、 申请一台CentOS版本的ECS。

2、 在OBS上创建一个桶,用于后续挂载访问。

3、 安装s3fs工具:登录ECS并在root权限下,参考如下步骤安装s3fs。

(1)创建挂载目录

mkdir /data_obs
(2)安装fuse组件(原因:s3fs依赖fuse组件),CentOS可采用如下方式安装。

yum install fuse
(3) 参考官方网页(https://github.com/s3fs-fuse/s3fs-fuse)安装s3fs,CentOS的安装方式如下:

sudo yum install automake fuse fuse-devel gcc-c++ git libcurl-devel libxml2-devel make openssl-devel
git clone https://github.com/s3fs-fuse/s3fs-fuse
cd s3fs-fuse
./autogen.sh
./configure
make
sudo make install

    注意:如果操作系统为Centos6.5,则需要手动安装fuse2.8.4(Centos6.5缺省fuse为2.8.3),详细操作如下

cd /data/software/
wget https://github.com/libfuse/libfuse/releases/download/fuse_2_9_4/fuse-2.8.4.tar.gz
tar -zxvf fuse-2.8.4.tar.gz
cd fuse-2.8.4
./configure
make
make install
export PKG_CONFIG_PATH=/usr/lib/pkgconfig:/usr/lib64/pkgconfig/:/usr/local/lib/pkgconfig
modprobe fuse
echo "/usr/local/lib" >> /etc/ld.so.conf
ldconfig
pkg-config --modversion fuse //看到版本为2.8.4表示安装成功

(4) 在/root/下创建.passwd-s3fs的文件,设置文件权限为600

chmod 600 /root/.passwd-s3fs

文件中的内容为AK:SK,如下所示,修改完毕的.passwd-s3fs文件如下所示:

image.png

(5) 执行如下格式命令实施mount(以下示例中,桶名为obs-hpc-test,在实际使用时,桶名,挂载点,以及url需根据实际情况修改)

s3fs -o allow_other obs-hpc-test /data_obs -o url= -o umask=0
挂载后的结果如下所示:

image.png

挂载目录卸载

     卸载已挂载目录的方式为,使用root账户执行如下命令:

umount -l /data_obs/

     其中/data_obs/目录为示例的挂载路径。

参数调优

     经过比对测试,从性能优化的角度,推荐以下一组参数作为挂载参数。

s3fs obs-hpc-test /data_obs/ -o passwd_file=/root/.passwd-s3fs -o url=http://obs.cn-north-1.myhwclouds.com/ -o allow_other -o umask=0 -o max_write=131072 -o use_cache=/dev/shm -o big_writes -o enable_noobj_cache -o sigv2 -o del_cache
-o allow_other

本参数用于设置挂载目录可以被任意登陆服务器的用户使用,且可以将该挂载目录用于创建NFS/SMB共享。

-o umask=0

本参数用于设置挂载挂载后资源的访问权限,确保挂载后所有用户能够对挂载目录下资源具有访问权限。umask与chmod配套,当设置umask=0时对于文件权限为777,若需要设置权限为755则设置umask=022,以此类推配置所需权限

-o max_write

本参数用于设置vfs的上传块大小,默认值为4096,可将该数值设置为fuse所支持的最大值128k(即设置-o max_write=131072),以提升性能。

-o use_cache

   使用内存作为缓存目录,而非本地磁盘作为cache将提升文件读写性能,即将该值设置为-o use_cache=/dev/shm。如果系统内存使用较高则建议另外挂载一个SSD盘作为缓存目录

-o enable_noobj_cache

     使用本参数后,将减少s3fs发送的列举桶的请求,从而提升性能。

-o big writes

     开启本参数后,内核会进行IO合并,对于大块读写,提升性能。

-o sigv2

     缺省值为采用V4鉴权,使用V2鉴权效率更高,兼容性更好。

-o del_cache

     文件使用完成后及时清理缓存中的数据。

-o multipart_size(default="10"(10MB))

     设定上传是单个分段的大小,缺省值为10MB,按照对象存储支持最大1万个分段,最大支持上传约98GB的对象。如果待上传的文件大小超过100,000MB,则需要调大该参数,最大支持5120单位为MB(对象存储支持单个分片最大5GB)

设置开机启动

为确保客户端重启后,仍可自动挂载OBS桶至本地目录,需在/etc/fstab中新增一行s3fs的开机启动的挂载命令。

参考上述最优参数,则新增的/etc/fstab中的挂载命令格式如下:

s3fs#obs-hpc-test /data_obs/ fuse _netdev,allow_other,umask=0,use_cache=/dev/shm,max_write=131072,big_writes,enable_noobj_cache,sigv2,del_cache,url=http://obs.eu-de.otc.t-systems.com/
其中obs-hpc-test为示例的桶名,/data_obs为示例的挂载路径,http://obs.eu-de.otc.t-systems.com为示例的url,实际配置时,需根据实际情况修改。

同时,对比s3fs直接挂载命令可发现,/etc/fstabl中的s3f3开机启动命令中,各项参数无需-o连接,而是直接使用逗号分隔即可。

补充说明

     如果需要挂载桶内指定目录,而非整个桶,在桶名后添加“:/”再接目录名即可。

如:obs-hpc-test:/dir01