使用s3fs将Ceph的桶挂载到Linux系统当作本地目录使用

/ Ceph / 没有评论 / 1207浏览

Ceph提供了兼容S3存储服务,普通用户并不能直接使用此项服务,需要通过S3所提供的API才能对S3里的文件进行读写。 有没有一个工具能够让用户不修改程序也可以使用S3服务呢? 答案肯定是有的 ,一个叫 s3fs 的工具就能够帮助我们做这件事,通过 s3fs 可以把S3挂载到本地,我们使用时就跟使用本地磁盘的方式一样,非常方便。

需要注意的是用S3只适合存储一些静态文件等,不要用S3来直接存储数据库之类的数据文件,而且也会受到速度的影响,但可存储备份文件。

环境:RHEL6.5 x64

安装s3fs

s3fs github地址:https://github.com/s3fs-fuse/s3fs-fuse

1)安装依赖包

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

2)安装fuse:

卸载老的fuse命令:

rpm -qa|grep fuse

[root@localhost fuse-2.8.4]# rpm -qa|grep fuse

fuse-devel-2.8.3-5.el6.x86_64

fuse-2.8.3-5.el6.x86_64

fuse-libs-2.8.3-5.el6.x86_64
rpm -e fuse-devel-2.8.3-5.el6.x86_64

安装新的fuse(已更名为libfuse):

项目地址:https://github.com/libfuse/libfuse

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 //看到版本表示安装成功(如果是2.8.3,需要先卸载)

3)安装s3fs

github下载并编译安装:

cd /data/software/
git clone https://github.com/s3fs-fuse/s3fs-fuse.git
cd s3fs-fuse
./autogen.sh
./configure
make
make install

4)配置s3fs:

新建一个文件去储存AWS秘钥,以允许s3fs去访问你的S3存储桶:

vim /etc/passwd-s3fs

内容为AWS秘钥,请注意保管

秘钥的储存方式为 ACCESSKEY:SECRET

chmod 640 /etc/passwd-s3fs

需要注意passwd-s3fs的权限为640。

挂载S3存储桶

新建一个文件夹来作为S3与本地交互的缓存

mkdir ~/cache

挂载:

s3fs yos /s3/yos -o passwd_file=/etc/passwd-s3fs -o url=http://10.151.21.13:7480/ -o use_path_request_style   (yos是在ceph里的桶名,/s3/yos是本地挂载点)

查看是否挂载成功:

[root@sg ~]# df -h

Filesystem      Size  Used Avail Use% Mounted on

/dev/xvda1       20G  2.8G   16G  15% /

tmpfs           3.6G     0  3.6G   0% /dev/shm

s3fs            256T     0  256T   0% /mnt

已成功挂载到/mnt目录。

这样就可以按照平时操作文件一样操作S3存储桶了。

如果在 ./configure时如果得到错误信息,请删除老的fuse参照步骤安装新的fuse:

# ./configure
checking for common_lib_checking... configure: error: Package requirements (fuse >= 2.8.4 libcurl >= 7.0 libxml-2.0 >= 2.6) were not met:
Requested 'fuse >= 2.8.4' but version of fuse is 2.8.3
Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.
Alternatively, you may set the environment variables common_lib_checking_CFLAGS
and common_lib_checking_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.

卸载挂载的S3存储桶

如果不再需要通过挂载方式访问S3存储桶,可以使用Linux “umount”命令卸载。

sudo umount /s3/yos