FastDFS单机环境下的搭建
小橘子🍊

FastDFS简单介绍

FastDFS是一个开源的分布式文件系统,主要由跟踪服务器(Tracker Server)、存储服务器(Storage Server)、客户端(client)三部分组成。

Storage Server以组(Group)为单位组织,一个Group内包含多台Storage机器,数据互为备份,存储空间以Group内容量最小的Storage为准,所以建议Group内的多个Storage尽量配置相同,以免造成存储空间的浪费。

Tracker是FastDFS的协调者,负责管理所有的Storage Server和Group,每个Storage在启动后会连接Tracker,告知
自己所属的Group、剩余存储空间等信息,并且和Tracker保持心跳响应。

正式搭建

我搭建这个FastDFS主要是用来进行图片存储,选择的是阿里云的轻量应用服务器,主要是能够以学生身份9.9买到,系统选择的是CentOS 7。

  1. 下载并安装libfastcommon

    如果下载速度慢,可以先看看我的另外一篇文件来提高下载速度,链接奉上。

    1
    2
    wget https://github.com/happyfish100/libfastcommon/archive/V1.0.7.tar.gz
    tar -zxvf V1.0.7.tar.gz

    进入解压出来的文件夹libfastcommon-1.0.7,执行编译与安装。

    1
    2
    3
    cd libfastcommon-1.0.7
    make.sh
    make.sh install
  2. 下载并安装FastDFS

    1
    2
    3
    4
    5
    wget https://github.com/happyfish100/fastdfs/archive/V5.05.tar.gz
    tar -zxvf V5.05.tar.gz
    cd fastdfs-5.05
    make.sh
    make.sh install

    安装完成后,会在系统/etc/fdfs/目录下生成两个启动脚本(fdfs_tracker, fdfs_storage)和三个配置模板文件(client.conf.sample, storage.conf.sample, tracker.conf.sample),另外附带安装的还有一些命令行工具,比如用于测试文件上传的fdfs_upload_file等。

  3. Tracker参数配置

    配置文件在/etc/fdfs/下,需要自行将tracker.conf.sample模板拷贝并重命名为tracker.conf。配置文件主要修改如下几项配置:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # 配置文件是否不生效,false 为生效
    disabled=false

    # 提供服务的端口
    port=22122

    # Tracker数据和日志目录地址(这里指定的路径要保证存在)
    base_path=/home/eva/fastdfs/tracker

    # HTTP 服务端口
    http.server_port=80
  4. storage参数配置
    操作同步骤3类似,不过这次操作的是storage配置文件,主要修改的参数如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    # 配置文件是否不生效,false 为生效
    disabled=false

    # 指定此 storage server 所在 组(卷)
    group_name=group1

    # storage server 服务端口
    port=23000

    # 心跳间隔时间,单位为秒 (这里是指主动向tracker server发送心跳)
    heart_beat_interval=30

    # Storage 数据和日志目录地址(需要确保指定路径存在)
    base_path=/home/eva/fastdfs/tracker

    # 存放文件时storage server支持多个路径。这里配置存放文件的基路径数目,通常只配一个目录。
    store_path_count=1

    # 逐一配置store_path_count个路径,索引号基于0。
    # 如果不配置store_path0,那它就和base_path对应的路径一样(上传的文件就存储在这个目录,需要保证存在)。
    store_path0=/home/eva/fastdfs/path0

    # FastDFS 存储文件时,采用了两级目录。这里配置存放文件的目录个数。
    # 如果本参数只为N(如: 256),那么storage server在初次运行时,会在store_path下自动创建N * N个存放文件的子目录。
    subdir_count_per_path=256
    tracker_server 的列表 ,会主动连接 tracker_server

    # 有多个 tracker server 时,每个 tracker server 写一行
    tracker_server=ali:22122

    # 允许系统同步的时间段 (默认是全天) 。一般用于避免高峰同步产生一些问题而设定。
    sync_start_time=00:00
    sync_end_time=23:59

    # 访问端口
    http.server_port=80
  5. 修改client.conf配置文件

    1
    2
    3
    4
    5
    # Client 的数据和日志目录(同样需要保证路径存在)
    base_path=/home/eva/fastdfs/client

    # Tracker端口
    tracker_server=ali:22122
  6. 开放服务端口
    主要是开放三个端口 22122, 23000, 80,我这里使用的是CentOS 7操作系统,相应的指令为:

    1
    firewall-cmd --zone=public --add-port=端口号/tcp --permanet

    另外要注意的是,如果你使用的是云服务器,那么还需要配置云端防火墙规则,比如我的阿里云服务器配置规则如下:

    aliyun-firewall

  7. 启动测试
    分别启动tracker和storage服务,指令如下:

    1
    2
    fdfs_trackerd /etc/fdfs/tracker.conf start
    fdfs_storaged /etc/fdfs/storage.conf start

    查看服务启动情况(root身份下执行):

    1
    netstat -anp | grep fdfs

    出现下图所示结果,便说明服务启动成功。

    socket5port

    测试文件上传,执行如下命令,会返回一个存储路径,记下这个路径,然后前往你在storage.conf文件中配置的store_path0/data/目录下,查看返回的路径下是否有你刚刚上传的文件,如果有,则说明上传是没有问题的。

    1
    /usr/bin/fdfs_upload_file 待上传文件的路径
  8. 测试下载
    下载需要借助于nginx服务器,所以我们先安装nginx,过程中缺少的安装环境请通过包管理工具自行安装解决。

    • 下载并安装nginx,执行如下指令执行即可(过程可能需要以root身份执行)。

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      # 下载
      wget -c https://nginx.org/download/nginx-1.12.1.tar.gz

      # 解压
      tar -zxvf nginx-1.12.1.tar.gz

      # 配置
      cd nginx-1.12.1
      configure

      # 编译安装
      make
      make install

      操作完成后,如果执行

      1
      /usr/local/nginx/sbin/nginx -V

      出现下图结果,则表示nginx安装成功。

      nginx-install.jpg

    • 为nginx安装FastDFS模块

      对fastdfs-nginx-module 的说明:FastDFS 通过 Tracker 服务器,将文件放在 Storage 服务器存储, 但是同组存储服务器之间需要进行文件复制,有同步延迟的问题。 假设 Tracker 服务器将文件上传到192.168.51.128,上传成功后文件 ID已经返回给客户端。此时 FastDFS 存储集群机制会将这个文件同步到同组存储服务器192.168.51.129上,在文件还没有复制完成的情况下,客户端如果用这个文件 ID 在 192.168.51.129 上取文件,就会出现文件无法访问的错误。而 fastdfs-nginx-module 可以重定向文件链接到源服务器取文件,避免客户端由于复制延迟导致的文件无法访问错误。

      a. 下载解压重命名

      1
      2
      3
      4
      5
      6
      7
      8
      # 下载
      wget https://github.com/happyfish100/fastdfs-nginx-module/archive/5e5f3566bbfa57418b5506aaefbe107a42c9fcb1.zip

      # 解压
      unzip 5e5f3566bbfa57418b5506aaefbe107a42c9fcb1.zip

      # 重命名
      mv fastdfs-nginx-module-5e5f3566bbfa57418b5506aaefbe107a42c9fcb1 fastdfs-nginx-module-master

      b .在Nginx中添加FastDFS模块
      1
      2
      3
      4
      5
      6
      7
      8
      # 进入解压包目录
      cd /softpackages/nginx-1.12.1/

      # 添加模块
      ./configure --add-module=../fastdfs-nginx-module-master/src

      # 重新编译、安装
      make && make install

      c. 查看添加的FastDFS模块
      1
      /usr/local/nginx/sbin/nginx -V

      nginx-module

      d. 复制 fastdfs-nginx-module 源码中的配置文件到/etc/fdfs 目录, 并修改

      1
      2
      3
      # 复制
      cd /softpackages/fastdfs-nginx-module-master/src
      cp mod_fastdfs.conf /etc/fdfs/

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      # 连接超时时间
      connect_timeout=10

      # Tracker Server
      tracker_server=ali:22122

      # StorageServer 默认端口
      storage_server_port=23000

      # 如果文件ID的uri中包含/group**,则要设置为true
      url_have_group_name = true

      # Storage 配置的store_path0路径,必须和storage.conf中的一致
      store_path0=/home/eva/fastdfs/path0

      e. 复制FastDFS的部分配置文件到/etc/fdfs目录
      1
      2
      3
      cd /softpackages/fastdfs-5.05/conf/
      cp http.conf /etc/fdfs/
      cp mime.types /etc/fdfs/

      f. 为nginx添加一条FastDFS的路由映射(即在80端口Server节点下添加以下内容)
      1
      2
      vi /usr/local/nginx/conf/nginx.conf


      1
      2
      3
      4
      # 将这个内容加在80端口的server节点下
      location ~/group([0-9])/M00 {
      ngx_fastdfs_module;
      }

      nginx-fdfs-router

    • 启动Nginx(需要以root身份执行),测试下载

      1
      2
      3
      4
      5
      # 启动Nginx服务器
      nginx -s start

      # 查看监听状态
      netstat -anpt | grep nginx

      在浏览器输入如下地址,查看下载结果。

      http://服务器IP地址/group1/上传文件时返回的相应地址

参考