FastDFS搭建分布式文件系统

FastDFS搭建分布式文件系统

1. 什么是分布式文件系统

分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连。

通俗来讲:

  • 传统文件系统管理的文件就存储在本机。
  • 分布式文件系统管理的文件存储在很多机器,这些机器通过网络连接,要被统一管理。无论是上传或者访问文件,都需要通过管理中心来访问

2. 什么是FastDFS

FastDFS是由淘宝的余庆先生所开发的一个轻量级、高性能的开源分布式文件系统。用纯C语言开发,功能丰富:

  • 文件存储
  • 文件同步
  • 文件访问(上传、下载)
  • 存取负载均衡
  • 在线扩容

适合有大容量存储需求的应用或系统。同类的分布式文件系统有谷歌的GFS、HDFS(Hadoop)、TFS(淘宝)等。

3. FastDFS的架构

3.1 fast架构

FastDFS搭建分布式文件系统_第1张图片

FastDFS两个主要的角色:Tracker Server 和 Storage Server 。

  • Tracker Server:跟踪服务器,主要负责调度storage节点与client通信,在访问上起负载均衡的作用,和记录storage节点的运行状态,是连接client和storage节点的枢纽
  • Storage Server:存储服务器,保存文件和文件的meta data(元数据),每个storage server会启动一个单独的线程主动向Tracker cluster中每个tracker server报告其状态信息,包括磁盘使用情况,文件同步情况及文件上传下载次数统计等信息
  • Group:文件组,多台Storage Server的集群。上传一个文件到同组内的一台机器上后,FastDFS会将该文件即时同步到同组内的其它所有机器上,起到备份的作用。不同组的服务器,保存的数据不同,而且相互独立,不进行通信。
  • Tracker Cluster:跟踪服务 器的集群,有一组Tracker Server(跟踪服务器)组成。
  • Storage Cluster :存储集群,有多个Group组成。

3.2 上传和下载流程

上传

FastDFS搭建分布式文件系统_第2张图片

  1. Client通过Tracker server查找可用的Storage server。
  2. Tracker server向Client返回一台可用的Storage server的IP地址和端口号。
  3. Client直接通过Tracker server返回的IP地址和端口与其中一台Storage server建立连接并进行文件上传。
  4. 上传完成,Storage server返回Client一个文件ID,文件上传结束。

下载

FastDFS搭建分布式文件系统_第3张图片

  1. Client通过Tracker server查找要下载文件所在的的Storage server。
  2. Tracker server向Client返回包含指定文件的某个Storage server的IP地址和端口号。
  3. Client直接通过Tracker server返回的IP地址和端口与其中一台Storage server建立连接并指定要下载文件。
  4. 下载文件成功。

4. FastDFS安装

注意:

安装过程中,下载的源码包,均放在 /usr/local/src

4.1 安装依赖

4.1.1 安装GCC依赖

FastDFS是C编写的,我们进行编译安装需要下载gcc:

yum -y install gcc-c++

4.1.2 安装libevent

FastDFS依赖libevent,需要安装:

yum -y install libevent

4.1.3 安装libfastcommon

libfastcommon是FastDFS官方提供的,libfastcommon包含了FastDFS运行所需要的一些基础库。

下载地址: https://github.com/happyfish100/libfastcommon/releases 选择合适的版本

#切换到下载目录
cd /usr/local/src/
#下载(如果下载慢 可以将下载好的文件上传到此目录)
wget -O libfastcommon-1.0.39.tar.gz https://codeload.github.com/happyfish100/libfastcommon/tar.gz/V1.0.39 
#解压
tar -zxvf libfastcommon-1.0.39.tar.gz
#进入目录
cd libfastcommon-1.0.39/
#编译安装
./make.sh 
./make.sh  install

注意:这里推荐下载依赖,然后上传到服务器。

到这里为止,所有依赖都已经安装完毕,接下来我们安装FastDFS:

4.2 安装FastDFS

下载地址:https://github.com/happyfish100/fastdfs/releases 选择合适的版本

#切换到下载目录
cd /usr/local/src/      
#下载(如果下载慢 可以将下载好的文件上传到此目录)
wget -O fastdfs-5.11.tar.gz https://codeload.github.com/happyfish100/fastdfs/tar.gz/V5.11
#解压
tar -zxvf fastdfs-5.11.tar.gz   
cd fastdfs-5.11/
#编译安装
./make.sh 
./make.sh  install

注意:

1)安装完成,我们应该能在/etc/init.d/目录,看到FastDFS提供的启动脚本:

  • fdfs_trackerd 是tracker启动脚本
  • fdfs_storaged 是storage启动脚本

2)我们可以在 /etc/fdfs目录,通过命令查看到以下配置文件模板:

  • tarcker.conf.sample 是tracker的配置文件模板
  • storage.conf.sample 是storage的配置文件模板
  • client.conf.sample 是客户端的配置文件模板

4.3 配置tracker

FastDFS的tracker和storage在刚刚的安装过程中,都已经被安装了,因此我们安装这两种角色的方式是一样的。不同的是,两种需要不同的配置文件。

我们要启动tracker,就修改刚刚看到的tarcker.conf,并且启动fdfs_trackerd脚本即可。

  1. 进入 /etc/fdfs,复制 FastDFS 跟踪器样例配置文件 tracker.conf.sample,并重命名为 tracker.conf。

    cd /etc/fdfs/
    cp tracker.conf.sample tracker.conf
    vim tracker.conf
  2. 编辑tracker.conf ,标红的需要修改下,其它的默认即可。

    # 配置文件是否不生效,false 为生效
    disabled=false
    
    # 提供服务的端口
    port=22122
    
    # Tracker 数据和日志目录地址(根目录必须存在,子目录会自动创建)
    base_path=/fastdfs/tracker
    
    # HTTP 服务端口 默认8080 ,建议修改 防止冲突
    http.server_port=9080
  3. 创建tracker基础数据目录,即base_path对应的目录

    mkdir -p /fastdfs/tracker
  4. 在防火墙中开启端口(默认22122),启动tracker

    初次成功启动,会在 /fdfsdfs/tracker/ (配置的base_path)下创建 data、logs 两个目录。

    我们可以使用 sh /etc/init.d/fdfs_trackerd 启动,不过安装过程中,fdfs已经被设置为系统服务,我们可以采用熟悉的服务启动方式:

    注意:

    此处必须先使用原始方式打开该服务

    /etc/init.d/fdfs_trackerd start

    接下来才可以使用以下方式:

    #启动服务
    systemctl start fdfs_trackerd.service 
    #关闭服务
    systemctl stop fdfs_trackerd.service
    #开机自动启动
    systemctl enable fdfs_tracked.service
  5. 查看状态

    systemctl status fdfs_tracker
  6. tracker server目录及文件结构

    ${base_path}
    |__data
    | |__storage_groups.dat:存储分组信息
    | |__storage_servers.dat:存储服务器列表
    |__logs
    | |__trackerd.log: tracker server 日志文件

4.4 配置storage

  1. 进入 /etc/fdfs 目录,复制 FastDFS 存储器样例配置文件 storage.conf.sample,并重命名为 storage.conf

    cd /etc/fdfs
    cp storage.conf.sample storage.conf
    vim storage.conf
  2. 编辑storage.conf

    # 配置文件是否不生效,false 为生效
    disabled=false 
    
    # 指定此 storage server 所在 组(卷)
    group_name=group1
    
    # storage server 服务端口
    port=23000
    
    # 心跳间隔时间,单位为秒 (这里是指主动向 tracker server 发送心跳)
    heart_beat_interval=30
    
    #Storage 数据和日志目录地址(根目录必须存在,子目录会自动生成)  (注 :这里不是上传的文件存放的地址,之前版本是的,在某个版本后更改了)
    base_path=/fastdfs/storage/base
    
    # 存放文件时 storage server 支持多个路径。这里配置存放文件的基路径数目,通常只配一个目录。
    store_path_count=1
    
    # 逐一配置 store_path_count 个路径,索引号基于 0。
    #storage的上传文件存放路径 如果不配置 store_path0,那它就和 base_path 对应的路径一样。
    store_path0=/fastdfs/storage
    
    # tracker的地址,有多个 tracker server 时,每个 tracker server 写一行
    tracker_server=192.168.11.66:22122 
    
    # 访问端口 默认80  建议修改 防止冲突
    http.server_port=9888
  3. 创建Storage基础数据目录,对应base_path目录

    #对应base_path
    mkdir -p /fastdfs/storage/base
    
    #这是配置的store_path0路径,有多个要创建多个
    mkdir -p /fastdfs/storage/
  4. 在防火墙中开启端口(默认23000),启动tracker

    启动Storage前确保Tracker是启动的。初次启动成功,会在 /fastdfs/storage/base(base_path)目录下创建 data、 logs 两个目录。

    注意:

    此处必须先使用原始方式打开该服务

    /etc/init.d/fdfs_storaged start

    接下来才可以使用以下方式:

    #启动方式
    systemctl start fdfs_storaged.service  
    #开机自启
    systemctl enable fdfs_storaged.service
    #查看状态
    systemctl status fdfs_storaged.service
  5. Storage目录

    Storage 目录

    同 Tracker,Storage 启动成功后,在base_path 下创建了data、logs目录,记录着 Storage Server 的信息。
    在 store_path0/data 目录下,创建了N*N个子目录:

    [root@localhost ~]# ls /fastdfs/storage/data/
    00  05  0A  0F  14  19  1E  23  28  2D  32  37  3C  41  46  4B  50  55  5A  5F  64  69  6E  73  78  7D  82  87  8C  91  96  9B  A0  A5  AA  AF  B4  B9  BE  C3  C8  CD  D2  D7  DC  E1  E6  EB  F0  F5  FA  FF
    01  06  0B  10  15  1A  1F  24  29  2E  33  38  3D  42  47  4C  51  56  5B  60  65  6A  6F  74  79  7E  83  88  8D  92  97  9C  A1  A6  AB  B0  B5  BA  BF  C4  C9  CE  D3  D8  DD  E2  E7  EC  F1  F6  FB
    02  07  0C  11  16  1B  20  25  2A  2F  34  39  3E  43  48  4D  52  57  5C  61  66  6B  70  75  7A  7F  84  89  8E  93  98  9D  A2  A7  AC  B1  B6  BB  C0  C5  CA  CF  D4  D9  DE  E3  E8  ED  F2  F7  FC
    03  08  0D  12  17  1C  21  26  2B  30  35  3A  3F  44  49  4E  53  58  5D  62  67  6C  71  76  7B  80  85  8A  8F  94  99  9E  A3  A8  AD  B2  B7  BC  C1  C6  CB  D0  D5  DA  DF  E4  E9  EE  F3  F8  FD
    04  09  0E  13  18  1D  22  27  2C  31  36  3B  40  45  4A  4F  54  59  5E  63  68  6D  72  77  7C  81  86  8B  90  95  9A  9F  A4  A9  AE  B3  B8  BD  C2  C7  CC  D1  D6  DB  E0  E5  EA  EF  F4  F9  FE

5. 上传测试

  1. 修改Tracker服务器中的客户端文件

    cd /etc/fdfs
    cp client.conf.sample client.conf
    vim client.conf
  2. 修改如下配置即可,其它默认。

    # Client 的数据和日志目录
    base_path=/fastdfs/client
    
    # Tracker端口
    tracker_server=192.168.11.66:22122

    注意:

    此处只需配置tracker_server的ip、端口即可。因为client访问tracker服务,tracker服务返回给client一个storage的ip、端口。

  3. 创建client基础数据目录,对应base_path目录

    #对应base_path
    mkdir -p /fastdfs/client
  4. 在linux内部执行如下命令上传 namei.jpeg 图片

    /usr/bin/fdfs_upload_file /etc/fdfs/client.conf namei.jpeg

    上传成功后返回文件ID号:group1/M00/00/00/wKgz6lnduTeAMdrcAAEoRmXZPp870.jpeg

    返回的文件ID由group、存储目录、两级子目录、fileid、文件后缀名(由客户端指定,主要用于区分文件类型)拼接而成。

    FastDFS搭建分布式文件系统_第4张图片

6. 安装配置Nginx,http访问文件

上面将文件上传成功了,但我们无法下载。因此安装Nginx作为服务器以支持Http方式访问文件。同时,后面安装FastDFS的Nginx模块也需要Nginx环境。

Nginx只需要安装到StorageSe rver所在的服务器即可,用于访问文件。安装Nginx详见博客:

linux中Nginx安装

6.1 配置nginx

vim /usr/local/nginx/conf/nginx.conf
#配置如下
server {
        listen       8081;
        server_name  192.168.11.66;
 
        location /group1/M00{
        alias /fastdfs/storage/data/;
         autoindex on;
 
       }
 
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
        root   html;
       }
}

重启nginx

systemctl restart nginx.service

在浏览器访问之前上传的图片 http://192.168.11.66:8081/group1/M00/00/00/wKgz6lnduTeAMdrcAAEoRmXZPp870.jpeg

7. FastDFS配置nginx模块

7.1 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 可以重定向文件链接到源服务器取文件,避免客户端由于复制延迟导致的文件无法访问错误。

7.2 下载fastdfs-nginx-module

#进入目录
cd /usr/local/src
#下载文件
wget https://github.com/happyfish100/fastdfs-nginx-module/archive/master.zip
#解压
unzip master.zip

注意:

下载方式可能随着时间失效,请查看最新下载方式。

7.3 配置nginx,添加fastdfs-nginx-module 模块

#停止nginx
systemctl stop nginx
#进入nginx源码目录
cd /usr/local/src/nginx-1.15.12/
#添加fastdfs-nginx-module模块
./configure --add-module=/usr/local/src/fastdfs-nginx-module-master/src
#重新编译安装nginx
make
make install
#验证是否加载fastdfs-nginx-module模块是否 ,有如下部分表示成功
/usr/local/nginx/sbin/nginx -V

如下显示:

nginx version: nginx/1.15.12
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) 
configure arguments: --add-module=/usr/local/src/fastdfs-nginx-module-master/src

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

cp /usr/local/src/fastdfs-nginx-module-master/src/mod_fastdfs.conf /etc/fdfs/

vim /etc/fdfs/mod_fastdfs.conf
#修改如下配置,其它默认

# 连接超时时间
connect_timeout=10
 
# Tracker Server
tracker_server=192.168.11.66:22122
 
# StorageServer 默认端口
storage_server_port=23000
 
# 如果文件ID的uri中包含/group**,则要设置为true
url_have_group_name = true
 
# Storage 配置的store_path0路径,必须和storage.conf中的一致
store_path0=/fastdfs/storage

复制 FastDFS 的部分配置文件到/etc/fdfs 目录

cd /usr/local/src/fastdfs-6.03/conf
cp anti-steal.jpg http.conf mime.types /etc/fdfs/

配置nginx,修改nginx.conf

vim /usr/local/nginx/conf/nginx.conf
#修改配置,其它的默认
#在80端口下添加fastdfs-nginx模块
location ~/group([0-9])/M00 {
    ngx_fastdfs_module;
}

nginx的完整配置:

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      80;
        server_name  192.168.11.66;
 
       # location /group1/M00{
       #    alias /fastdfs/storage/data/;
       #   autoindex on;
       #}
        location ~/group[0-9]/ {
                ngx_fastdfs_module;
        }
 
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
        root   html;
       }
    }
}

启动nginx

systemctl start nginx.service

在地址栏访问。

注意:

和之前直接使用nginx路由访问不同的是,这里配置 fastdfs-nginx-module 模块,可以重定向文件链接到源服务器取文件。
参考博客:

https://blog.csdn.net/prcyang/article/details/89946190

你可能感兴趣的:(FastDFS搭建分布式文件系统)