概述
KS3(Kingsoft Standard Storage Service)服务是一个对象存储类服务。类似于网盘,可以通过网络随时随地的获取存储数据。金山云为用户管理KS3存储桶提供了两种控制管理方式:金山云的后台Consol、金山云官方KS3的SDK。
相比于以上两种使用场景,在实际的开发应用中,常常还有这样的场景:把KS3存储桶mount到本地文件系统,使得用户可以像操作文件目录一样操作KS3的对象。
本节所介绍的S3FS fuse,就是这么一款工具;针对linux操作系统,帮助用户把KS3的桶mount到本地文件系统,使得用户操作存储桶里的数据就如同操作本地文件一样方便。
安装
依赖环境准备
Ubuntu环境
|
|
CentOS环境
|
|
源码安装
下载源码
|
|
安装
|
|
使用
配置KS3秘钥
配置KS3的KS3ACCESSKEYID、KS3SECRETACCESSKEY信息,并将其存储在/etc/passwd-s3fs 文件中
修改秘钥文件权限,来限制访问:
挂载KS3存储桶
将KS3 bucket 挂载到指定目录
示例:
将KS3北京region的 ks3-fs-test 存储桶挂载到本地 /mnt/ks3 目录下:
(Ks3AccesskeyId: sgyO124X+/ZRbmgrbP7d,
Ks3SecretAccessKey:p9/6yLzbU2FZEPw5vCPf2/buQOz1SVNdqqBtzscH,
ks3 endpoint: http://ks3-cn-shanghai-internal.ksyun.com)
多线程分块上传
|
|
注:
-o multipart_size 100: 分块大小100M
-o parallel_count 10 : 10线程并发
卸载bucket:
fusermount -u /mnt/s3fs
功能支持
文件操作 | 测试结果 | 备注 |
---|---|---|
mkdir | pass | |
listdir | pass | |
rmdir | pass | |
isfile | pass | |
isdir | pass | |
isabs | pass | |
exists | pass | |
makedirs | pass | |
stat | pass | |
getsize | pass | |
mknod | pass | |
open | pass | |
read | pass | |
readline | pass | |
readlines | pass | |
close | pass | |
flush | pass | |
fileno | pass | |
lell | pass | |
next | pass | |
seek | pass | |
truncate | pass | |
rename | pass | |
copyfile | pass | |
move | pass | |
remove | pass | |
rmdir | pass | |
copy | pass | |
copytree | pass | |
chmod | Filed |
局限性
s3fs提供的功能和性能和本地文件系统相比,具有一些局限性。具体包括:
- 随机或追加写文件会导致整个文件的重写。
- 元数据操作,例如list directory,性能较差,因为需要远程访问KS3服务器。
- 最终一致性可能导致临时过期的数据。
- 文件/文件夹的重命名操作不是原子的。
- 不支持hard link。
- 不适合用在高并发读/写的场景,这样会让系统的load升高。
- 多个客户端挂载同一个KS3 bucket时,依赖用户自行协调各个客户端的行为。例如避免多个客户端写同一个文件等等。
使用场景
FAQ
1
- Q: s3fs适合什么样的程序?
s3fs能把ks3 bucket挂载到本地,如果您使用的软件没有支持KS3,但您又想让数据能自动同步到KS3,那么s3fs是一个很好的选择。
2
- Q: s3fs一定要金山云的机器才能用么?
s3fs不限制一定要金山云的内网才可以使用,外网机器依然可以使用。只是内网机房有KS3的专线,保证了KS3的访问速度。
3
- Q: s3fs如何Debug?
您可以使用在挂载时,加上-d -o f2参数,s3fs会把日志写入到系统日志中。在centos系统中,在/var/log/messages中。
您也可以在挂载时使用-f -d -o f2参数,s3fs会把日志输出到屏幕上。
4
- Q: s3fs提示s3fs: unable to access MOUNTPOINT /mnt/ks3: No such file or directory
这是您未创建该目录导致的,在挂载前需要创建对应目录。
5
- Q: 如何使用supervisor启动s3fs?
- 安装supervisor,在ubuntu中执行sudo apt-get install supervisor
建立一个目录,编辑s3fs的启动脚本:
1234mkdir /root/s3fs_scriptsvi /root/s3fs_scripts/start_s3fs.sh# contents of start_s3fs.shs3fs ks3test /mnt/ks3 -f -o passwd_file=/home/lain/passwd-ks3fs -o multipart_size=100 -o parallel_count=10 -o sigv2 -o curldbg -o url=http://ks3-cn-shanghai-internal.ksyun.com编辑/etc/supervisor/supervisord.conf,在最后加入下面一段:
1234567[program:s3fs]command=bash /root/s3fs_scripts/start_s3fs.shlogfile=/var/log/s3fs.loglog_stdout=truelog_stderr=truelogfile_maxbytes=1MBlogfile_backups=10运行supervisor:
1supervisord确认一切正常:
1234ps aux | grep supervisor # 应该能看到supervisor进程ps aux | grep s3fs # 应该能看到s3fs进程killall s3fs # 杀掉s3fs进程,supervisor应该会重启它ps aux | grep s3fs # 应该能看到s3fs进程如果出错,请检查/var/log/supervisor/supervisord.log和/var/log/s3fs.log。