Lain's Blog

s3fs使用指南

概述

KS3(Kingsoft Standard Storage Service)服务是一个对象存储类服务。类似于网盘,可以通过网络随时随地的获取存储数据。金山云为用户管理KS3存储桶提供了两种控制管理方式:金山云的后台Consol、金山云官方KS3的SDK。

相比于以上两种使用场景,在实际的开发应用中,常常还有这样的场景:把KS3存储桶mount到本地文件系统,使得用户可以像操作文件目录一样操作KS3的对象。

本节所介绍的S3FS fuse,就是这么一款工具;针对linux操作系统,帮助用户把KS3的桶mount到本地文件系统,使得用户操作存储桶里的数据就如同操作本地文件一样方便。

安装

依赖环境准备

Ubuntu环境

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

CentOS环境

1
sudo yum install automake fuse fuse-devel gcc-c++ git libcurl-devel libxml2-devel make openssl-devel

源码安装

下载源码

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

安装

1
2
3
4
5
cd s3fs-fuse
./autogen.sh
./configure
make
sudo make install

使用

配置KS3秘钥

配置KS3的KS3ACCESSKEYID、KS3SECRETACCESSKEY信息,并将其存储在/etc/passwd-s3fs 文件中

1
echo KS3ACCESSKEYID:KS3SECRETACCESSKEY > /etc/passwd-s3fs

修改秘钥文件权限,来限制访问:

1
chmod 600 /etc/passwd-s3fs

挂载KS3存储桶

将KS3 bucket 挂载到指定目录

1
s3fs <your-ks3-bucket-name> <your-mount-point> -o url=<your-ks3-endpoint>

示例:

将KS3北京region的 ks3-fs-test 存储桶挂载到本地 /mnt/ks3 目录下:
(Ks3AccesskeyId: sgyO124X+/ZRbmgrbP7d,
Ks3SecretAccessKey:p9/6yLzbU2FZEPw5vCPf2/buQOz1SVNdqqBtzscH,
ks3 endpoint: http://ks3-cn-shanghai-internal.ksyun.com)

1
2
3
4
echo sgyO124X+/ZRbmgrbP7d:p9/6yLzbU2FZEPw5vCPf2/buQOz1SVNdqqBtzscH > /etc/passwd-s3fs
chmod 600 /etc/passwd-s3fs
mkdir /mnt/ks3
s3fs ks3-fs-test /mnt/ks3 -o passwd_file=/etc/passwd-s3fs -o url=http://ks3-cn-shanghai-internal.ksyun.com

多线程分块上传

1
s3fs <your-ks3-bucket-name> <your-mount-point> -o multipart_size=100 -o parallel_count=10 -o sigv2 -o curldbg -o url=<your-ks3-endpoint>

注:
-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?
  1. 安装supervisor,在ubuntu中执行sudo apt-get install supervisor
  2. 建立一个目录,编辑s3fs的启动脚本:

    1
    2
    3
    4
    mkdir /root/s3fs_scripts
    vi /root/s3fs_scripts/start_s3fs.sh
    # contents of start_s3fs.sh
    s3fs 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
  3. 编辑/etc/supervisor/supervisord.conf,在最后加入下面一段:

    1
    2
    3
    4
    5
    6
    7
    [program:s3fs]
    command=bash /root/s3fs_scripts/start_s3fs.sh
    logfile=/var/log/s3fs.log
    log_stdout=true
    log_stderr=true
    logfile_maxbytes=1MB
    logfile_backups=10
  4. 运行supervisor:

    1
    supervisord
  5. 确认一切正常:

    1
    2
    3
    4
    ps 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。

扫二维码
扫一扫,用手机访问本站

扫一扫,用手机访问本站