操作场景
s3fs通过FUSE挂载ZOS的桶到本地文件系统,可以让用户像在本地文件系统下操作目录和文件一样,操作ZOS桶里的对象。
支持的功能如下:
- 支持POSIX文件系统的大部分功能:
- 文件读写操作,包括随机读写、追加写等。
- 目录操作,包括目录的创建、删除等。
- 其他chmod/chown/truncate/link等功能。
- 支持MD5校验,保证数据完整性。
本文案例是在成都4资源池内,开通ZOS服务和云主机,并在云主机上挂载s3fs,使用vdbench工具进行测试的。
约束与限制
s3fs不能提供与本地文件系统完全相同的性能或语义,体现在以下几方面:
- 随机写或者追加写需要重写整个文件。
- 受限于网络性能,元数据操作,比如list目录,性能较差。
- rename操作不能保证原子性。
- 挂载相同存储桶的多个客户端之间没有相互协调机制,不能保证数据一致性。
- 不支持硬链接。
- 不适合高并发读写场景。
- 不支持挂载归档类型的桶。
前提条件
- 所属地域已开通ZOS服务。
- 已创建一个桶。
推荐配置
- 云主机型号:通用型
- cpu: 8核
- 内存:16GB
- 网卡带宽:300MB
操作步骤
安装
CentOS
目前在EPEL源上提供了最新版本,只要配置了EPEL源,在CentOS下可以通过yum进行安装。
[root@host0 ~]# yum list| grep s3fs
s3fs-fuse.x86_64 1.92-1.el7 epel
[root@host0 ~]# yum install -y s3fs-fuse
[root@host0 ~]# s3fs --version Amazon Simple Storage Service File System V1.92 (commit:unknown) with OpenSSL
CTyunOS
目前在云主机内直接可以通过yum直接安装即可。
配置
-
开通ZOS服务,并创建桶。
-
建立凭证文件,需要用到步骤1中的AK和SK,注意该凭证文件的权限需要设置为600。
echo AK:SK > ${HOME}/.passwd-s3fs chmod 600 ${HOME}/.passwd-s3fs
-
挂载桶。
通过s3fs命令将桶(bucket-9095)挂载到/data/bucket-9095目录。
[root@host0 ~]# mkdir -p /data/bucket-9095 [root@host0 ]# s3fs bucket-9095 /data/bucket-9095 -o passwd_file= /.passwd s3fs -o url=http://192.168.1.40 -o use_path_request_style
s3fs的更多挂载命令,可以通过s3fs -h获得。
-
查看挂载结果。
通过df 命令可以看到s3fs的挂载点。
[root@host0 ~]# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 2.9G 0 2.9G 0% /dev tmpfs 2.9G 0 2.9G 0% /dev/shm tmpfs 2.9G 18M 2.9G 1% /run tmpfs 2.9G 0 2.9G 0% /sys/fs/cgroup /dev/mapper/centos-root 26G 8.1G 18G 32% / /dev/sdb 200G 54G 147G 27% /data /dev/sda1 1014M 239M 776M 24% /boot s3fs 4.0G 0 4.0G 0% /data/bucket-9095
-
在该目录下创建一个文件。
[root@host0 ~]# cd /data/bucket-9095/ [root@host0 bucket-9095]# ls [root@host0 bucket-9095]# echo "hello zos" > test.txt [root@host0 bucket-9095]# ls test.txt [root@host0 bucket-9095]# cat test.txt hello zos
-
通过控制台查看该桶下的对象。
下载该对象到本地,然后查看文件内容,是"hello zos"。
完成验证,说明此时s3fs是可以正常工作的。 -
卸载。
通过umount命令可以卸载s3fs的挂载。[root@host0 ~]# umount /data/bucket-9095 [root@host0 ~]# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 2.9G 0 2.9G 0% /dev tmpfs 2.9G 0 2.9G 0% /dev/shm tmpfs 2.9G 18M 2.9G 1% /run tmpfs 2.9G 0 2.9G 0% /sys/fs/cgroup /dev/mapper/centos-root 26G 8.2G 18G 32% / /dev/sdb 200G 54G 147G 27% /data /dev/sda1 1014M 239M 776M 24% /boot
执行完上述命令后,看不到之前挂载的"/data/bucket-9095"。
其他
关于日志
通过参数dbglevel,可以设置日志级别,包括如下:
- critical(默认值)
- error
- warn
- info
- debug
通过logfile参数,可以将日志输出到文件中。
如果在线上运行时,建议将日志级别调整为warn,并且将日志输出到文件中。
s3fs bucket-9095 /data/bucket-9095 -o passwd_file=~/.passwd-s3fs -o
url=http://192.168.1.40 -o use_path_request_style -o dbglevel=warn -
logfile=/var/log/s3fs.log
注意该日志文件不会自动备份和删除,所以可能会占用比较大的磁盘空间,需要定期的备份和删除, 以免磁盘空间被用完。
关于自动挂载
在CentOS中,当系统重启后可以自动挂载桶,可以在/etc/fstab文件下增加以下内容:
s3fs bucket-9095 /data/bucket-9095 fuse.s3fs
_netdev,allow_other,use_path_request_style,url=http://192.168.1.40:7480,dbglevel
=warn,logfile=/var/log/s3fs.log 0 0
关于分段大小设置
通过增加参数nomultipart,可以禁用分段上传的功能,所有的分段上传,都用原子上传来实现。
s3fs bucket-9095 /data/bucket-9095 fuse.s3fs
_netdev,allow_other,use_path_request_style,nomultipart,url=http://192.168.1.40:7
480,dbglevel=warn,logfile=/var/log/s3fs.log 0 0
每个分段大小可以通过参数multipart_size来控制,默认值为10MB,采用该默认值,最大能上传97GB 的对象,可以根据业务需求调整,分段大小的计算公式为:
multipart_size:最大对象大小(转换为MB)/10000,取整。
s3fs bucket-9095 /data/bucket-9095 fuse.s3fs
_netdev,allow_other,use_path_request_style,,url=http://192.168.1.40:7480,dbgleve
l=warn,logfile=/var/log/s3fs.log multipart_size=100 0 0
说明
分段上传是把一个文件分成很多段,每段分别上传完毕后之后,再合并成一个文件。 原子上传是不将文件分段,直接当作一个文件上传。
调试功能
当挂载失败,可以通过增加调试参数(-o dbglevel=debug -f -o curldbg),将更加详细的日志输出到屏幕上。
[root@host0 ~]# s3fs bucket-9095 /data/bucket-9095 -o passwd_file=~/.passwd-s3fs
-o url=http://192.168.1.40 -o use_path_request_style -o dbglevel=debug -f -o
curldbg
也可以通过参数logfile(此时不需要-f参数),将日志输出到文件中。
[root@host0 ~]# s3fs bucket-9095 /data/bucket-9095 -o passwd_file=~/.passwd-s3fs
-o url=http://192.168.1.40 -o use_path_request_style -o dbglevel=debug -o curldbg
-o logfile=/tmp/s3fs.log