用一次FastDFS

FastDFS

c编写的分布式文件系统,用于搭建文件服务器集群提供文件的上传、下载

特点

  • 冗余备份
  • 负载均衡
  • 线性扩容
  • 高性能、高可用

FastDFS架构

  • Tracker server 负载均衡和调度、任务状态跟踪
  • Storage server 文件上传,存储
  • client

Tracker server and Storage server都可以配置集群 每个节点地位相同 没有主从概念

FastDFS 安装

安装FastDFS依赖包

  1. tar -zxvf libfastcommon-master.zip
  2. cd libfastcommon-master
  3. ./make.sh
  4. sudo ./make.sh install

安装FastDFS

  1. tar -zxvf fastdfs-master.zip
  2. cd fastdfs-master
  3. ./make.sh
  4. sudo ./make.sh install

配置Tracker Server

  1. sudo cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
  2. 在当前用户的家目录下创建目录fastdfs/tracker
    mkdir -p /home/mark/fastdfs/tracker
    
  3. sudo vim /etc/fdfs/tracker.conf
    base_path=/home/mark/fastdfs/tracker
    

配置Storage Server

  1. sudo cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
  2. 在当前用户的家目录下创建目录fastdfs/storage
    mkdir -p /home/mark/fastdfs/storage
    
  3. 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

  1. sudo service fdfs_trackerd start
  2. sudo service fdfs_storaged start

在ubuntu18上源码编译安装不会自动生成systemd文件,上述方法无法启动服务
可以使用fdfs_trackerd <config file> start的方式启动

测试

  1. sudo cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
  2. sudo vim /etc/fdfs/client.conf
    base_path=/home/mark/fasdfs/tracker
    tracker_server=Tracker Server的ip+port
    
  3. 上传文件测试
    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服务器

  1. tar -zxvf nginx-1.14.2.tar.gz

  2. cd nginx-1.14.2/

  3. 执行

    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
    
  4. sudo make

  5. sudo make install

  6. fastdfs-nginx-module-master解压后的目录中src下的mod_fastdfs.conf复制到/etc/fdfs/mod_fastdfs.conf

  7. 修改内容:

    connect_timeout=10    
    tracker_server=Tracker Server 的ip地址:22122     
    url_have_group_name=true   
    store_path0=/home/mark/fastdfs/storage
    
  8. 将解压缩的fastdfs-master目录conf目录中的mime.typeshttp.conf复制到/etc/fdfs/

  9. 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;
                }
            }
    
  10. 启动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)

文档 https://github.com/jefforeilly/fdfs_client-py

posted @ 2019-01-21 16:56  苏幕遮_凌枫  阅读(231)  评论(0编辑  收藏  举报