FastDFS
c编写的分布式文件系统,用于搭建文件服务器集群提供文件的上传、下载
特点
- 冗余备份
- 负载均衡
- 线性扩容
- 高性能、高可用
FastDFS架构
Tracker server
负载均衡和调度、任务状态跟踪
Storage server
文件上传,存储client
Tracker server and Storage server都可以配置集群 每个节点地位相同 没有主从概念
FastDFS 安装
安装FastDFS依赖包
tar -zxvf libfastcommon-master.zip
cd libfastcommon-master
./make.sh
sudo ./make.sh install
安装FastDFS
tar -zxvf fastdfs-master.zip
cd fastdfs-master
./make.sh
sudo ./make.sh install
配置Tracker Server
sudo cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
- 在当前用户的家目录下创建目录fastdfs/tracker
mkdir -p /home/mark/fastdfs/tracker
sudo vim /etc/fdfs/tracker.conf
base_path=/home/mark/fastdfs/tracker
配置Storage Server
sudo cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
- 在当前用户的家目录下创建目录fastdfs/storage
mkdir -p /home/mark/fastdfs/storage
sudo vim /etc/fdfs/storage.conf
base_path=/home/mark/fastdfs/storage store_path0=/home/mark/fastdfs/storage tracker_server=Tracker Server的IP+端口 默认端口22122
启动Tracker and Storage server
sudo service fdfs_trackerd start
sudo service fdfs_storaged start
在ubuntu18上源码编译安装不会自动生成systemd文件,上述方法无法启动服务
可以使用fdfs_trackerd <config file> start
的方式启动
测试
sudo cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
sudo vim /etc/fdfs/client.conf
base_path=/home/mark/fasdfs/tracker tracker_server=Tracker Server的ip+port
- 上传文件测试
mark@ocarina:~$ fdfs_upload_file /etc/fdfs/client.conf /home/mark/图片/hack.jpg group1/M00/00/00/wKgDDlxFMc2ATakWAACLAixyQHY987.jpg 上传文件成功
安装nginx+fastdfs-nginx-module
nginx服务器在提供静态资源方面性能好,所以将nginx和FastDFS结合
FastDFS负责上传,下载文件的任务交给nginx服务器
-
tar -zxvf nginx-1.14.2.tar.gz
-
cd nginx-1.14.2/
-
执行
mark@ocarina:~/package/nginx-1.14.2$ sudo ./configure --prefix=/usr/local/nginx/ --add-module=/home/mark/package/fastdfs-nginx-module-master/src --without-http_rewrite_module --without-http_gzip_module
-
sudo make
-
sudo make install
-
将
fastdfs-nginx-module-master
解压后的目录中src下的mod_fastdfs.conf
复制到/etc/fdfs/mod_fastdfs.conf
-
修改内容:
connect_timeout=10 tracker_server=Tracker Server 的ip地址:22122 url_have_group_name=true store_path0=/home/mark/fastdfs/storage
-
将解压缩的
fastdfs-master
目录conf目录中的mime.types
、http.conf
复制到/etc/fdfs/
中 -
sudo vim /usr/local/nginx/conf/nginx.conf
#在http部分中添加配置信息如下: server { listen 8888; server_name localhost; location ~/group[0-9]/ { ngx_fastdfs_module; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
-
启动nginx服务
sudo /usr/local/nginx/sbin/nginx
(关闭nginx -s stop)
Python与FastDFS交互
使用pip install fdfs_client-py-master.zip
安装fdfs_client-py-master.zip
# 引入Fdfs_client类
from fdfs_client.client import Fdfs_client
# 创建Fdfs_client类对象 参数是配置文件的路径
client = Fdfs_client('/etc/fdfs/client.conf')
# 上传文件
ret = client.upload_by_filename('base_model.py')
# 返回值
print(ret)
-----------------------------------------
getting connection
<fdfs_client.connection.Connection object at 0x7f5ce39307f0>
<fdfs_client.fdfs_protol.Tracker_header object at 0x7f5ce3930d30>
{'Group name': 'group1', 'Remote file_id': 'group1/M00/00/00/wKgDDlxFQ0-ARToDAAACBtn6q1o4007.py', 'Status': 'Upload successed.', 'Local file name': 'base_model.py', 'Uploaded size': '518B', 'Storage IP': '192.168.3.14'}
fdfs_client-py from x import StringIO 及 import basestring 报错
修改为 from io import StringIO basestring在python3中没有 将这一行注释掉
将 isinstance(filename, basestring) 改为 isinstance(filename, str)