通过s3fs工具以文件系统方式访问obs实践与调优
背景
s3fs是一款开源的,支持将对象存储中的bucket以文件形式导出的文件系统接口,兼容POSIX语义。
本文介绍了使用s3fs,将OBS的桶挂载至本地目录,从而通过文件系统的风格进行OBS桶内基本操作。同时,基于性能比对测试,本文推荐了一组s3fs挂载参数参数,以供参考使用。
s3fs挂载示意图如下所示:
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文件如下所示:
(5) 执行如下格式命令实施mount(以下示例中,桶名为obs-hpc-test,在实际使用时,桶名,挂载点,以及url需根据实际情况修改)
s3fs -o allow_other obs-hpc-test /data_obs -o url= -o umask=0
挂载后的结果如下所示:
挂载目录卸载
卸载已挂载目录的方式为,使用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
本参数用于设置挂载目录可以被任意登陆服务器的用户使用,且可以将该挂载目录用于创建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