fastdfs

fastdfs

因工作需要搭建一个分布式文件系统,用于文件存储。公司的选择是fastdfs。
fastdfs上传文件时系统自动指定路径和文件名,因此如果想要传一个文件夹上去。内部的目录结构会被打乱。不会再以完整文件夹形式存储在服务器上。

fastdfs作者有对fastdfs优缺点和问题做过总结,见 FastDFS FAQ

fastdfs 部署

1
2
3
4
5
6
7
cd /opt && mkdir fastdfs && cd fastdfs  
git clone https://github.com/happyfish100/fastdfs.git
git clone https://github.com/happyfish100/libfastcommon.git
cd /opt/fastdfs/libfastcommon
./make.sh && ./make.sh install
cd /opt/fastdfs/fastdfs
./make.sh && ./make.sh install

安装成功后,FastDFS安装在/usr/bin中。配置文件在/etc/fdfs中。

配置文件放在/etc/fdfs下面:

client配置文件:/etc/fdfs/client.conf.sample

storage配置文件:/etc/fdfs/storage.com.sample

tracker配置文件:/etc/fdfs/tracker.com.sample

1
2
3
4
cd /etc/fdfs  
mv client.conf.sample client.conf
mv storage.conf.sample storage.conf
mv tracker.conf.sample tracker.conf

如果只是使用python客户端进行文件上传下载操作。应该只需要修改 client.conf 即可。

1
2
3
base_path=/etc/fdfs
tracker_server=node2:22122
tracker_server=node3:22122

其中tracker_server是master ip。可以只有一个。

具体安装细节参见 【FastDFS分布式文件系统之一】:搭建、部署、配置

fdfs_client 安装和使用

1
2
3
4
5
6
7
git clone https://github.com/jefforeilly/fdfs_client-py.git
cd fdfs_client-py
vi ./fdfs_client/storage_client.py
将第12行 from fdfs_client.sendfile import * 注释掉
python3 setup.py install

sudo pip3 install mutagen

fastdfs python客户端只有python2版本,python3版本需要自己下载源码并且修改代码后安装。

1
2
3
4
5
6
from fdfs_client.client import * 
client = Fdfs_client('/etc/fdfs/client.conf')
# upload
client.upload_by_filename(filename)
# download
client.download_to_file(local_filename, remote_file_id)

其中remote_file_id应该形如group1/M00/00/00/...

具体的并行上传操作参见 【FastDFS分布式文件系统之二】:FastDFS小文件上传性能测试及Python客户端上传操作