FastDFS(分布式文件系统)使用介绍

一、基本介绍

FastDFS 是用 C 语言编写的一款开源的分布式文件系统,功能主要包括:文件存储、文件同步、文件访问(上传、下载) 等,解决了文件大容量存储和高性能访问的问题。FastDFS 特别适合以文件为载体的在线服务,如:图片、视频、文档等等。

1.FastDFS 的特性

  • 分组存储,简单灵活;
  • 提供 Nginx 扩展模块,可以和 Nginx 无缝衔接;
  • 对文件内容做 hash 处理,避免出现重复文件,节约磁盘空间;
  • 支持多线程方式上传和下载文件,支持断点续传(当传输时网络故障,并不需要从零传输)
  • 文件 ID 由 FastDFS 生成,作为文件访问凭证(FastDFS 不需要传统的 nameservermetaserver

FastDFS 服务分别由:Tracker Server 跟踪服务器,Storage Server 存储服务器以及 Client 客户端三个部分组成。

跟踪服务器:

  • 主要负责调度工作,起到均衡的作用;
  • 同时用于管理所有的存储服务器和组,Storage 在启动后便会连接到 Tracker 服务器,并告知自己所属的组等信息。

存储服务器:

  • 主要提供容量和备份服务;以组为单位,每个组中可以有多台存储服务器,数据互为备份。

这里的 Client,作为业务请求的发起方,通过专用接口,使用 TCP/IP 协议与跟踪服务器和存储服务器进行数据交互。

2.FastDFS 的存储策略


文件上传:

  1. 首先 Client 会通过 Tracker Server 跟踪服务器来找到可用的 Storage Server 存储服务器;
  2. Tracker Server 跟踪服务器找到后,会向 Client 返回一台可用的 Storage Server 存储服务器的 IP 地址和端口号;
  3. 接着 Client 便可以直接和 Storage Server 存储服务器建立连接并进行文件上传;
  4. 上传完成后,Storage Server 存储服务器会返回给 Client 一个文件 ID,到此文件上传结束。

在这里插入图片描述

文件下载:

  1. 首先 Client 会通过 Tracker Server 跟踪服务器来找到要下载文件所在的 Storage Server 存储服务器;
  2. Trakcer Server 跟踪服务器找到后,会向 Client 返回含有指定文件的 Storage Server 存储服务器的 IP 和端口号;
  3. 接着 Client 直接通过 Tracker Server 返回的 IP 地址和端口与其中一台 Storage Server 存储服务器建立连接并指定要下载的文件。

在这里插入图片描述

二、使用 FastDFS 实现分布式文件存储

准备工作:

主机名 操作系统 IP 地址
FastDFS CentOS7.4 192.168.1.1

安装基础包:

[root@FastDFS ~]# yum install -y make cmake gcc gcc-c++
[root@FastDFS ~]# wget https://github.com/happyfish100/libfastcommon/archive/V1.0.38.tar.gz
[root@FastDFS ~]# tar zxf V1.0.38.tar.gz -C /usr/src/
[root@FastDFS ~]# cd /usr/src/libfastcommon-1.0.38
[root@FastDFS libfastcommon-1.0.38]# ./make.sh && ./make.sh install

1.安装 FastDFS 软件

[root@FastDFS ~]# wget https://github.com/happyfish100/fastdfs/archive/V5.11.tar.gz
[root@FastDFS ~]# tar zxf V5.11.tar.gz -C /usr/src/
[root@FastDFS ~]# cd /usr/src/fastdfs-5.11
[root@FastDFS fastdfs-5.11]# ./make.sh && ./make.sh install
[root@FastDFS fastdfs-5.11]# rm -f /etc/fdfs/*
[root@FastDFS fastdfs-5.11]# cp conf/*.conf /etc/fdfs/
[root@FastDFS fastdfs-5.11]# cp conf/mime.types /etc/fdfs/

1) 配置 Tracker 服务

[root@FastDFS ~]# mkdir -p /app/fastdfs/tracker
[root@FastDFS ~]# sed -i 's/base_path.*/base_path=\/app\/fastdfs\/tracker/' /etc/fdfs/tracker.conf
[root@FastDFS ~]# fdfs_trackerd /etc/fdfs/tracker.conf
[root@FastDFS ~]# netstat -nlpt | grep 22122

在这里插入图片描述

2)配置 Storage 服务

[root@FastDFS ~]# mkdir /app/fastdfs/storage
[root@FastDFS ~]# sed -i 's/base_path.*/base_path=\/app\/fastdfs\/storage/' /etc/fdfs/storage.conf
[root@FastDFS ~]# sed -i 's/store_path0.*/store_path0=\/app\/fastdfs\/storage/' /etc/fdfs/storage.conf
[root@FastDFS ~]# sed -i 's/tracker_server.*/tracker_server=192.168.1.1:22122/' /etc/fdfs/storage.conf
[root@FastDFS ~]# sed -i 's/group_name.*/group_name=default/' /etc/fdfs/storage.conf
[root@FastDFS ~]# fdfs_storaged /etc/fdfs/storage.conf
[root@FastDFS ~]# netstat -nlpt | grep 23000

在这里插入图片描述

3)验证

[root@FastDFS ~]# fdfs_monitor /etc/fdfs/storage.conf 

在这里插入图片描述

2.验证上传/下载等操作

准备工作

[root@FastDFS ~]# mkdir /app/fastdfs/client
[root@FastDFS ~]# sed -i 's/base_path.*/base_path=\/app\/fastdfs\/client/' /etc/fdfs/client.conf
[root@FastDFS ~]# sed -i 's/tracker_server.*/tracker_server=192.168.1.1:22122/' /etc/fdfs/client.conf

1)验证上传

[root@FastDFS ~]# echo "Hello World" > Hello.txt
[root@FastDFS ~]# fdfs_upload_file /etc/fdfs/client.conf Hello.txt
  • default 组名,M00 磁盘,00/00 目录,wKgBAWL6CraAYL2xAAAADAsMGmk731.txt 文件名。

在这里插入图片描述

2)验证下载

[root@FastDFS ~]# fdfs_download_file /etc/fdfs/client.conf default/M00/00/00/wKgBAWL6CraAYL2xAAAADAsMGmk731.txt

在这里插入图片描述

3)验证删除

[root@FastDFS ~]# fdfs_delete_file /etc/fdfs/client.conf default/M00/00/00/wKgBAWL6CraAYL2xAAAADAsMGmk731.txt

在这里插入图片描述

3.通过 Nginx 实现 URL 访问

  • 需要使用到 FastDFS 的 fastdfs-nginx-module 模块。
[root@FastDFS ~]# yum -y install zlib zlib-devel pcre-devel
[root@FastDFS ~]# wget http://www.nginx.org/download/nginx-1.21.0.tar.gz
[root@FastDFS ~]# tar zxf nginx-1.21.0.tar.gz -C /usr/src/
[root@FastDFS ~]# wget https://github.com/happyfish100/fastdfs-nginx-module/archive/V1.20.tar.gz
[root@FastDFS ~]# tar zxf V1.20.tar.gz
[root@FastDFS ~]# sed -i 's#/usr/local/include#/usr/include/fastdfs /usr/include/fastcommon#' fastdfs-nginx-module-1.20/src/config
[root@FastDFS ~]# mv fastdfs-nginx-module-1.20 /usr/local/src/
[root@FastDFS ~]# cd /usr/src/nginx-1.21.0
[root@FastDFS nginx-1.21.0]# ./configure --prefix=/usr/local/nginx --add-module=/usr/local/src/fastdfs-nginx-module-1.20/src/
[root@FastDFS nginx-1.21.0]# make && make install

1)修改 Nginx 配置文件

[root@FastDFS ~]# vim /usr/local/nginx/conf/nginx.conf
http {
    
    
	...
    server {
    
    
        listen       80;
        server_name  localhost;

        location / {
    
    
            root   html;
            index  index.html index.htm;
        }

        location ~/default/M00 {
    
    
            root /app/fastdfs/storage/data;
            ngx_fastdfs_module;
        }
    }
}

2)替换操作

[root@FastDFS ~]# cp /usr/local/src/fastdfs-nginx-module-1.20/src/mod_fastdfs.conf /etc/fdfs/
[root@FastDFS ~]# sed -i 's/tracker_server.*/tracker_server=192.168.1.1:22122/' /etc/fdfs/mod_fastdfs.conf
[root@FastDFS ~]# sed -i 's/store_path0.*/store_path0=\/app\/fastdfs\/storage/' /etc/fdfs/mod_fastdfs.conf
[root@FastDFS ~]# sed -i 's/group_name.*/group_name=default/' /etc/fdfs/mod_fastdfs.conf
[root@FastDFS ~]# sed -i 's/url_have_group_name.*/url_have_group_name=true/' /etc/fdfs/mod_fastdfs.conf
[root@FastDFS ~]# /usr/local/nginx/sbin/nginx -t
[root@FastDFS ~]# /usr/local/nginx/sbin/nginx

在这里插入图片描述

3)验证

[root@FastDFS ~]# ps aux | grep nginx
[root@FastDFS ~]# netstat -nlpt | grep nginx
[root@FastDFS ~]# fdfs_upload_file /etc/fdfs/client.conf Hello.txt

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_46902396/article/details/126270775