zoukankan      html  css  js  c++  java
  • Centos7搭建FastFDS----分布式文件服务系统服务端

    一、FastDFS介绍

    FastDFS开源地址:https://github.com/happyfish100
    参考:分布式文件系统FastDFS设计原理
    参考:FastDFS分布式文件系统

    1.1简介

    FastDFS 是一个开源的高性能分布式文件系统(DFS)。 它的主要功能包括:文件存储,文件同步和文件访问,以及高容量和负载平衡。主要解决了海量数据存储问题,特别适合以中小文件(建议范围:4KB < file_size <500MB)为载体的在线服务。
    FastDFS 系统有三个角色:跟踪服务器(Tracker Server)、存储服务器(Storage Server)和客户端(Client)。

    1.2Tracker Server

    跟踪服务器,主要做调度工作,起到均衡的作用;负责管理所有的 storage server和 group,每个 storage 在启动后会连接 Tracker,告知自己所属 group 等信息,并保持周期性心跳。Tracker需要管理的元信息很少,会全部存储在内存中;另外tracker上的元信息都是由storage汇报的信息生成的,本身不需要持久化任何数据,这样使得tracker非常容易扩展,直接增加tracker机器即可扩展为tracker cluster来服务,cluster里每个tracker之间是完全对等的,所有的tracker都接受stroage的心跳信息,生成元数据信息来提供读写服务。

    1.3Storage Server

    Storage server(后简称storage)以组(卷,group或volume)为单位组织,一个group内包含多台storage机器,数据互为备份,存储空间以group内容量最小的storage为准,所以建议group内的多个storage尽量配置相同,以免造成存储空间的浪费。
    以group为单位组织存储能方便的进行应用隔离、负载均衡、副本数定制(group内storage server数量即为该group的副本数),比如将不同应用数据存到不同的group就能隔离应用数据,同时还可根据应用的访问特性来将应用分配到不同的group来做负载均衡;缺点是group的容量受单机存储容量的限制,同时当group内有机器坏掉时,数据恢复只能依赖group内地其他机器,使得恢复时间会很长。

    group内每个storage的存储依赖于本地文件系统,storage可配置多个数据存储目录,比如有10块磁盘,分别挂载在/data/disk1-/data/disk10,则可将这10个目录都配置为storage的数据存储目录。

    storage接受到写文件请求时,会根据配置好的规则(后面会介绍),选择其中一个存储目录来存储文件。为了避免单个目录下的文件数太多,在storage第一次启动时,会在每个数据存储目录里创建2级子目录,每级256个,总共65536个文件,新写的文件会以hash的方式被路由到其中某个子目录下,然后将文件数据直接作为一个本地文件存储到该目录中。

    1.4Client

    客户端,上传下载数据的服务器,也就是我们自己的项目所部署在的服务器。

     

     二、FastDFS安装

    资源包:
    资源包百度云链接
    1、解决Windows下安装FastDFS报 Microsoft Visual C++ 9.0 is required Unable to find vcvarsall.bat 问题
    2、解决Windows下安装FastDFS报 fdfs_client/sendfilemodule.c(53) fatal error C1189: #error : platfom not supported 问题,fdfs_client-py-1.2.6-jj 安装包已经修改过, 使用python setup.py install 安装

    2.1安装gcc

    yum install gcc

     2.2安装libfastcommon

    1. 解压缩libfastcommon-master.zip
    2. 进入到libfastcommon-master的目录中
    3. 执行 ./make.sh
    4. 执行 sudo ./make.sh install

    2.3安装fastdfs

    1. 解压缩fastdfs-master.zip
    2. 进入到 fastdfs-master目录中
    3. 执行 ./make.sh
    4. 执行 sudo ./make.sh install

    三、FastDFS配置

    3.1配置跟踪服tracker

    1. sudo cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
    2. 在/home/python/目录中创建目录 fastdfs/tracker      
    mkdir –p /home/python/fastdfs/tracker
    3. 编辑/etc/fdfs/tracker.conf配置文件    sudo vim /etc/fdfs/tracker.conf
    修改 base_path=/home/python/fastdfs/tracker

    3.2配置存storage

    1. sudo cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
    2. 在/home/python/fastdfs/ 目录中创建目录 storage
        mkdir –p /home/python/fastdfs/storage
    3. 编辑/etc/fdfs/storage.conf配置文件  sudo vim /etc/fdfs/storage.conf
    修改内容:
    base_path=/home/python/fastdfs/storage
    store_path0=/home/python/fastdfs/storage
    tracker_server=自己ubuntu虚拟机的ip地址:22122

    3.3tracker 和 storage

    # 启动跟踪器
    sudo service fdfs_trackerd start
    # 启动存储器 sudo service fdfs_storaged start

    3.4测试是否安装成功

    1. sudo cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
    2. 编辑/etc/fdfs/client.conf配置文件  sudo vim /etc/fdfs/client.conf
    修改内容:
    base_path=/home/python/fastdfs/tracker
    tracker_server=自己ubuntu虚拟机的ip地址:22122
    3. 上传文件测试:
    fdfs_upload_file /etc/fdfs/client.conf 要上传的图片文件 
    如果返回类似group1/M00/00/00/rBIK6VcaP0aARXXvAAHrUgHEviQ394.jpg的文件id则说明文件上传成功

    3.5设置开机自启动

    vi /etc/rc.local
    
    # 启动跟踪器
    sudo service fdfs_trackerd start
    # 启动存储器
    sudo service fdfs_storaged start

    4.安装nginxfastdfs-nginx-module web服 epoll

    4.1安装

    使用清空命令
    yum clean all
    然后执行
    yum groupinstall "Development Tools"

    yum -y install pcre-devel zlib-devel

    yum -y install openssl openssl-devel

    1. 解压缩 nginx-1.8.1.tar.gz
    2. 解压缩 fastdfs-nginx-module-master.zip
    3. 进入nginx-1.8.1目录中
    4. 执行
    sudo ./configure --prefix=/usr/local/nginx/ --add-module=fastdfs-nginx-module-master解压后的目录的绝对路径/src
    
    sudo make
    sudo make install

    4.2修改配置文件

    1. sudo cp fastdfs-nginx-module-master解压后的目录中src下的mod_fastdfs.conf  /etc/fdfs/mod_fastdfs.conf
    2. sudo vim /etc/fdfs/mod_fastdfs.conf
    修改内容:
    connect_timeout=10
    tracker_server=自己ubuntu虚拟机的ip地址:22122
    url_have_group_name=true
    store_path0=/home/python/fastdfs/storage
    3. sudo cp 解压缩的fastdfs-master目录conf目录中的http.conf  /etc/fdfs/http.conf
    4. sudo cp 解压缩的fastdfs-master目录conf目录中的mime.types /etc/fdfs/mime.types
    5.sudo vim /usr/local/nginx/conf/nginx.conf
    注意:在顶部必须添加:user  root;   

    worker_processes  1;

    events {

        worker_connections  1024;

    }

        http {

            include      mime.types;

            default_type  application/octet-stream;

            sendfile        on;

            keepalive_timeout  65;

            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;

                }

            }

        }

    4.3开放防火墙中相关你端口

     #(--permanent永久生效,没有此参数重启后失效)
    
    firewall-cmd --zone=public --add-port=8888/tcp --permanent
    firewall-cmd --zone=public --add-port=22122/tcp --permanent 
    
    firewall-cmd --zone=public --add-port=80/tcp --permanent 
    
    firewall-cmd --zone=public --add-port=23000/tcp --permanent
    
     
    #重载防火墙
    firewall-cmd --reload

    4.4nginx

    sudo /usr/local/nginx/sbin/nginx

    5、使用python客户端上传测试

    github源码:https://github.com/JaceHo/fdfs_client-py

    5.1Linux下安装

    1. workon django_py3 # 这里是进入正在Linux建的python虚拟环境(可跳过)
    2. 进入fdfs_client-py-master.zip所在目录
    3. pip install fdfs_client-py-master.zip
    4. 
    
    >>> from fdfs_client.client import Fdfs_client
    >>> client = Fdfs_client('/etc/fdfs/client.conf')
    >>> ret = client.upload_by_filename('test')
    >>> ret
    {'Group name':'group1','Status':'Upload successed.', 'Remote file_id':'group1/M00/00/00/
        wKjzh0_xaR63RExnAAAaDqbNk5E1398.py','Uploaded size':'6.0KB','Local file name':'test'
        , 'Storage IP':'192.168.243.133'}

    5.2windows下安装

    1.解压fdfs_client-py-master.zip
    进入fdfs_client-py-master所在目录
    将fdfs_client文件夹copy到python解释器的 /lib 目录下
    2.修改fdfs_client/storage_client.py文件,将第12行删除或注释(否则,使用时会报错ImportError: No module named sendfile)
    # from fdfs_client.sendfile import *
    3.安装 mutagen 和 requests
    pip install mutagen
    pip isntall requests

     

    4.修改fastdfs配置文件:client_config

    # connect timeout in seconds
    # default value is 30s
    connect_timeout=30
    
    # network timeout in seconds
    # default value is 30s
    network_timeout=60
    
    # the base path to store log files
    
    # 日志存放路径  
    base_path=../../logs    
    
    # tracker_server can ocur more than once, and tracker_server format is
    # "host:port", host can be hostname or ip address
    # tracker服务器
    tracker_server=192.168.11.200:22122     
    
    #standard log level as syslog, case insensitive, value list:
    ### emerg for emergency
    ### alert
    ### crit for critical
    ### error
    ### warn for warning
    ### notice
    ### info
    ### debug
    log_level=info
    
    # if use connection pool
    # default value is false
    # since V4.05
    use_connection_pool = false
    
    # connections whose the idle time exceeds this time will be closed
    # unit: second
    # default value is 3600
    # since V4.05
    connection_pool_max_idle_time = 3600
    
    # if load FastDFS parameters from tracker server
    # since V4.05
    # default value is false
    load_fdfs_parameters_from_tracker=false
    
    # if use storage ID instead of IP address
    # same as tracker.conf
    # valid only when load_fdfs_parameters_from_tracker is false
    # default value is false
    # since V4.05
    use_storage_id = false
    
    # specify storage ids filename, can use relative or absolute path
    # same as tracker.conf
    # valid only when load_fdfs_parameters_from_tracker is false
    # since V4.05
    storage_ids_filename = storage_ids.conf
    
    
    #HTTP settings
    http.tracker_server_port=80
    
    #use "#include" directive to include HTTP other settiongs
    ##include http.conf


    5.在 python 虚拟环境下进入 shell 终端进行上传测试

    导入模块:
    from fdfs_client.client import Fdfs_client
    
    导入配置文件
    注意:windows环境下绝对路径会发生转义,需要加上 "r" 说明是原生字符串
    client = Fdfs_client(r'配置文件绝对路径')
    
    上传图片
    注意:windows环境下绝对路径会发生转义,需要加上 "r" 说明是原生字符串
    client.upload_by_filename(r'图片文件绝对路径')

    注意:

    1.修改lib/fdfs_client/storage_client.py文件,注释第12行;
    2.windows环境下路径分隔符是 ‘’ ,而linux使用 ‘/’,所以需要使用 ‘r’ 来声明是原生字符串;
    3.如果上传文件提示连接tracker失败,请仔细检查client_config配置文件,配置文件中一定不要出现中文;
    4.如果刚开始使用 pip install fdfs_client,报错,不要盲目安装VC++ 14.0,可以先去 控制面板==>>程序==>>程序和功能 查看是否已经安装过。
  • 相关阅读:
    《ERP从内部集成起步》读书笔记——第5章 MRP系统的时间概念 5.1 时间三要素 5.1.1 计划期
    MVC 图片上传小试笔记
    MVC3 something about form
    dotnetcharting.dll 菜鸟笔记
    MVC 下分离业务逻辑,优化修改
    看不见的女朋友
    相信自己
    肉体的痛苦给心灵的折磨一个宣泄的出口
    八零后为什么比我们那时还艰难
    一个人住七年
  • 原文地址:https://www.cnblogs.com/yunwangjun-python-520/p/11300778.html
Copyright © 2011-2022 走看看