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 地址
FastDFSCentOS7.4192.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

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

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
FastDFS是一个开源高性能分布式文件系统(DFS)。它的主要功能包括:文件存储,文件同步和文件访问以及高容量和负载平衡的设计。FastDFS特别适合基于照片共享站点和视频共享站点等文件的网站的要求。 FastDFS服务端有两个角色:跟踪器(tracker)和存储节点(storage)。跟踪器主要做调度工作,在访问上起负载均衡的作用。 存储节点存储文件,完成文件管理的所有功能:存储、同步和提供存取接口,FastDFS同时对文件的meta data进行管理。所谓文件的meta data就是文件的相关属性,以键值对(key value pair)方式表示,如:width=1024,其中的key为width,value为1024。文件meta data是文件属性列表,可以包含多个键值对。 跟踪器和存储节点都可以由一台多台服务器构成。跟踪器和存储节点中的服务器均可以随时增加或下线而不会影响线上服务。其中跟踪器中的所有服务器都是对等的,可以根据服务器的压力情况随时增加或减少。 为了支持大容量,存储节点(服务器)采用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷 的文件容量累加就是整个存储系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起 到了冗余备份和负载均衡的作用。 在卷中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。 当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。 FastDFS中的文件标识分为两个部分:卷名和文件名,二者缺一不可。 上传文件交互过程: 1. client询问tracker上传到的storage,不需要附加参数; 2. tracker返回一台可用的storage; 3. client直接和storage通讯完成文件上传。  下载文件交互过程: 1. client询问tracker下载文件的storage,参数为文件标识(卷名和文件名); 2. tracker返回一台可用的storage; 3. client直接和storage通讯完成文件下载。 需要说明的是,client为使用FastDFS服务的调用方,client也应该是一台服务器,它对tracker和storage的调用均为服务器间的调用。
go-fastdfs是一个基于http协议的分布式文件系统,它基于大道至简的设计理念,一切从简设计,使得它的运维及扩展变得更加简单,它具有高性能、高可靠、无中心、免维护等优点。 特点: 支持curl命令上传 支持浏览器上传 支持HTTP下载 支持多机自动同步 支持断点下载 支持配置自动生成 支持小文件自动合并(减少inode占用) 支持秒传 支持跨域访问 支持一键迁移(搬迁) 支持异地备份(特别是小文件1M以下) 支持并行体验 支持断点续传(tus) 支持docker部署 支持自监控告警 支持图片缩放 支持google认证码 支持自定义认证 支持集群文件信息查看 使用通用HTTP协议 无需专用客户端(支持wget,curl等工具) 类fastdfs 高性能 (使用leveldb作为kv库) 高可靠(设计极其简单,使用成熟组件) 无中心设计(所有节点都可以同时读写) 优点: 无依赖(单一文件) 自动同步 失败自动修复 按天分目录方便维护 支持不同的场景 文件自动去重 支持目录自定义 支持保留原文件名 支持自动生成唯一文件名 支持浏览器上传 支持查看集群文件信息 支持集群监控邮件告警 支持小文件自动合并(减少inode占用) 支持秒传 支持图片缩放 支持google认证码 支持自定义认证 支持跨域访问 极低资源开销 支持断点续传(tus) 支持docker部署 支持一键迁移(从其他系统文件系统迁移过来) 支持异地备份(特别是小文件) 支持并行体验(与现有的文件系统并行体验,确认OK再一键迁移) 支持token下载 token=md5(file_md5+timestamp) 运维简单,只有一个角色(不像fastdfs有三个角色Tracker Server,Storage Server,Client),配置自动生成 每个节点对等(简化运维) 所有节点都可以同时读写   go-fastdfs分布式文件系统 更新日志: v1.4.2 修复图片缩放过大服务出现退出问题

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

愿许浪尽天涯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值