FastDFS安装与测试

目录

目标

版本

环境

官方文档

相关概念

安装FastDFS

启动FastDFS

关闭FastDFS

重启FastDFS

用命令测试上传文件

用命令测试下载文件

用命令测试删除文件

用HTTP的方式访问FastDFS中的文件

用HTTP的方式访问FastDFS中的文件整体流程


目标

  • 在Linux服务器上搭建单机版FastDFS系统。(考虑到Linux服务器访问GitHub受限,这里我将依赖包下载到本地,再将本地的依赖包上传到Linux服务器上。所以我的操作与Wiki上的操作略有不同,但本质一样)。
  • 在Linux服务器上,使用命令行实现文件上传、下载、删除等功能。
  • 熟悉FastDFS系统架构。

版本

6.11.0


环境

CentOS 7


官方文档

FastDFS 6.11.0版本官网文档icon-default.png?t=N7T8https://github.com/happyfish100/fastdfs/tree/V6.11.0

安装手册icon-default.png?t=N7T8https://github.com/happyfish100/fastdfs/wiki


相关概念

DFS(分布式文件系统)

        分布式文件系统(DistributedFileSystem,DFS)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点(可简单的理解为一台计算机)相连;或是若干不同的逻辑磁盘分区或卷标组合在一起而形成的完整的有层次的文件系统。DFS为分布在网络上任意位置的资源提供一个逻辑上的树形文件系统结构,从而使用户访问分布在网络上的共享文件更加简便。单独的DFS共享文件夹的作用是相对于通过网络上的其他共享文件夹的访问点


FastDFS(Fast分布式文件系统)

FastDFS is an open source high performance distributed file system. Its major functions include: file storing, file syncing and file accessing (file uploading and file downloading), and it can resolve the high capacity and load balancing problem. FastDFS should meet the requirement of the website whose service based on files such as photo sharing site and video sharing site.

        FastDFS(Fast Distributed File System)是一个开源的高性能分布式文件系统。其主要功能包括:文件存储、文件同步和文件访问(文件上传和文件下载),可以解决大容量和负载均衡问题。FastDFS应满足照片共享网站、视频共享网站等基于文件服务的网站的要求。
        FastDFS由淘宝网的余庆使用C语言实现。支持Linux、FreeBSD、MacOS等类UNIX系统。FastDFS类似google FS,属于应用级文件系统,不是通用的文件系统,只能通过专有API访问,目前提供了C客户端和Java SDK,以及PHP扩展SDK。
        FastDFS为互联网应用量身定做,解决大容量文件存储问题,实现高性能和高扩展性。FastDFS可以看做是基于文件的key value存储系统,key为文件ID,value为文件本身,因此称作分布式文件存储服务更为合适。下图为FastDFS的架构图(来源于官网):

        Tracker(跟踪器)和Storage(存储器)是服务端的概念,我们开发的程序是客户端(使用API调用FastDFS的功能)。


Tracker(跟踪器)

FastDFS has two roles: tracker and storage. The tracker takes charge of scheduling and load balancing for file access.

        Tracker是FastDFS的两个角色之一。Tracker负责调度和负载均衡以进行文件访问


Storage(存储器)

The storage store files and it's function is file management including: file storing, file syncing, providing file access interface. It also manage the meta data which are attributes representing as key value pair of the file. For example: width=1024, the key is "width" and the value is "1024".

        Storage是FastDFS的两个角色之一。Storage用于存储文件,其功能包括文件管理、文件存储、文件同步和提供文件访问接口。它还管理元数据,这些元数据是文件的属性,表示为键值对


安装FastDFS

第一步:编译CentOS环境。

yum install git gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl-devel wget vim -y

第二步:下载好相关依赖包(这里和Wiki上的操作略有不同,但本质一样。如果大家一定要按照Wiki上的操作去安装FastDFS,前提条件是服务器对GitHub访问不受限)。

https://github.com/happyfish100/libfastcommon/archive/V1.0.71.tar.gz
https://github.com/happyfish100/libserverframe/archive/V1.2.1.tar.gz
https://github.com/happyfish100/fastdfs/archive/V6.11.0.tar.gz
https://codeload.github.com/happyfish100/fastdfs-client-java/zip/refs/heads/master
https://codeload.github.com/happyfish100/fastdfs-nginx-module/zip/refs/heads/master

第三步:将依赖包上传至Linux服务器上,我将它们上传到/usr/local目录。

第四步:解压依赖包,并执行编译和安装命令(按照顺序编译安装)。

tar -zxvf libfastcommon-1.0.71
cd /usr/local/libfastcommon-1.0.71
./make.sh && ./make.sh installtar -zxvf libserverframe-1.2.1.tar.gz
cd /usr/local/libserverframe-1.2.1
./make.sh && ./make.sh installtar -zxvf fastdfs-6.11.0.tar.gz 
cd /usr/local/fastdfs-6.11.0
./make.sh && ./make.sh install

第五步:复制相关配置文件到/etc/fds目录下,供Nginx访问用。

cp /usr/local/fastdfs-6.11.0/conf/http.conf /etc/fdfs
cp /usr/local/src/fastdfs/conf/mime.types /etc/fdfs/

第六步:进入/etc/fdfs目录,编译tracker.conf文件,设置存储数据和日志文件的基本路径。我设置的路径是/opt/fastdfs/tracker

#在tracker.conf文件内设置基础路径。
base_path = /opt/fastdfs/tracker
#创建目录。-p表示一次创建多级目录。
mkdir -p /opt/fastdfs/tracker

 第七步:进入/etc/fdfs目录,编译storage.conf文件,设置存储数据和日志文件的基本路径。我设置的路径是/opt/fastdfs/storage

#在storage.conf文件内设置基础路径。
base_path = /opt/fastdfs/storage
#设置存放文件的目录
store_path0 = /opt/fastdfs/storage/files
#配置tracker_server地址。
tracker_server = 192.168.157.101:22122
#创建目录。
mkdir -p /opt/fastdfs/storage/files

启动FastDFS

前言

        在/etc/fdfs目录下执行fdfs_trackerd和fdfs_storaged命令,会弹出该命令的相关参数。

第一步:用/etc/fdfs目录下的配置文件,启动tracker服务。

fdfs_trackerd /etc/fdfs/tracker.conf

第二步:用/etc/fdfs目录下的配置文件,启动storage服务。

fdfs_storaged /etc/fdfs/storage.conf

第三步:去storage.conf文件所设置的store_path0目录,查看该路径下的内容。可以发现在/opt/fastdfs/storage/files下有个data目录,这个目录是FastDFS第一次启动后创建的。data目录下有256个文件夹,这里每个文件里面又有256个文件夹(也就是说data下有65536个文件夹,即2的16次方数量)


关闭FastDFS

第一步:用/etc/fdfs目录下的配置文件执行关闭命令。

fdfs_trackerd tracker.conf stop
fdfs_storaged /etc/fdfs/storage.conf stop


重启FastDFS

第一步:用/etc/fdfs目录下的配置文件执行重启命令。

fdfs_trackerd tracker.conf restart
fdfs_storaged /etc/fdfs/storage.conf restart


用命令测试上传文件

第一步:编辑/etc/fdfs/client.conf文件,有些版本的FastDFS的/etc/fdfs下没有client.conf,而有一个client.conf.sample文件,如果是这种情况需要修改client.conf.sample文件名称为client.conf

vi /etc/fdfs/client.conf
base_path = /opt/fastdfs/client
tracker_server = 192.168.157.101:22122

第二步:编辑好/etc/fdfs/client.conf文件文件后,创建刚才设置的base_path文件夹。

mkdir -p /opt/fastdfs/client

第三步:创建一个文件并添加测试内容用于测试。

vi a.txt

第四步:可以选择使用/usr/bin或者/usr/local/fastdfs-6.11.0/client的fdfs_test命令做测试。根据执行fdfs_test命令后返回的信息来看,最后一行介绍了操作选项有很多,比如:upload、download、delete等。

cd /usr/local/fastdfs-6.11.0/client
fdfs_test

第五步:上传我们刚才创建的a.txt文件。这里我在/usr/bin和/usr/local/fastdfs-6.11.0/client两个目录下执行了上传命令,都能正常上传文件。

#或者进入到/usr/bin目录下,也有fdfs_test命令。
cd /usr/local/fastdfs-6.11.0/client
fdfs_test /etc/fdfs/client.conf upload /etc/fdfs/a.txt

 信息解读

  • 从返回的结果来看,我们可以看到有storage_upload_by_filename和storage_upload_slave_by_filename两个大类。其中storage_upload_by_filename用于上传文件,storage_upload_slave_by_filename用于上传与主文件相关的从文件,以支持更复杂的文件关系,如备份、缩略图等。
  • remote_filename的值开头是M00,这和/etc/fdfs/storage.conf文件的store_path_count配置有关。假如store_path_count = 3,则remote_filename的值开头是M00、M01、M02,我们配置文件中的store_path_count = 1,所以remote_filename的值开头是M00,后续我们学FastDFS集群时再来详细分析store_path_count的意义和作用。
  • 进入到/opt/fastdfs/storage/files/data/00/00文件夹,我们可以下面多了4个文件,这4个文件的作用如图3所述。检查wKidZWWUHRKAa6g0AAAAGcc2DgA732.txt和wKidZWWUHRKAa6g0AAAAGcc2DgA732_big.txt文件发现内容确实和我们定义的a.txt内容一致。
  • url给出的链接暂时不能访问,后续我们安装好Nginx才能访问。


用命令测试下载文件

第一步:可以选择使用/usr/bin或者/usr/local/fastdfs-6.11.0/client的fdfs_test命令做测试。下载我们刚才上传的文件,执行如下命令:

fdfs_test /etc/fdfs/client.conf download group1 M00/00/00/wKidZWWZZ1qAOKS-AAAADCApozA963.txt


用命令测试删除文件

第一步:可以选择使用/usr/bin或者/usr/local/fastdfs-6.11.0/client的fdfs_test命令做测试。删除我们刚才上传的文件,执行如下命令:

fdfs_test /etc/fdfs/client.conf delete group1 M00/00/00/wKidZWWUHRKAa6g0AAAAGcc2DgA732.txt

第二步:查看目标文件,发现该文件已经被删除了。


用HTTP的方式访问FastDFS中的文件

前言

        向FastDFS上传文件成功后,FastDFS提供了http链接,但是该链接并不能直接在浏览器打开,而需要Nginx的支持才能实现(本文不讲述Linux安装Nginx的步骤,需要大家提前安装好)。
        FastDFS提供了Nginx的扩展模块,也就是我们之前下载的fastdfs-nginx-module-master.zip压缩包。

第一步:上传fastdfs-nginx-module-master.zip压缩包到Linux服务器,我将它上传到/usr/local目录。

第二步:解压fastdfs-nginx-module-master.zip压缩包。

unzip fastdfs-nginx-module-master.zip 

第三步:下载/usr/local/fastdfs-nginx-module-master/src/mod_fastdfs.conf配置文件到桌面,并修改相关属性:

#tracker服务器IP和端口。
tracker_server=192.168.157.101:22122  
#url是否包含组名称。
url_have_group_name=true
#和storage.conf配置文件中的store_path0一致。
store_path0=/opt/fastdfs/storage/files
base_path=/opt/fastdfs/nginx_mod
mkdir /opt/fastdfs/nginx_mod

第四步:编译 Nginx 时包含 fastdfs-nginx-module模块。需要在Nginx的解压目录下执行以下命令:

#在Nginx的解压目录下执行如下命令:
./configure --prefix=/usr/local/nginx_fdfs --add-module=/usr/local/fastdfs-nginx-module-master/src
make
make install

第五步:Nginx重新编译后,会生成/usr/local/nginx_fdfs目录。修改/usr/local/nginx_fdfs/conf/nginx.conf文件内容如下:

server {listen       8888;    ## 该端口为storage.conf中的http.server_port相同server_name  localhost;location ~/group[0-9]/ {ngx_fastdfs_module;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}
}

第六步:把刚才下载到桌面上并修改好属性的mod_fastdfs.conf文件上传到/etc/fdfs目录下,并复制Nginx的mime.types文件到/etc/fdfs目录下。

cp /usr/local/nginx_fdfs/conf/mime.types /etc/fdfs/mime.types

第七步:启动Nginx,命令如下:

/usr/local/nginx_fdfs/sbin/nginx -c /usr/local/nginx_fdfs/conf/nginx.conf

第八步:在浏览器上输入http链接查看我们刚才上传的文件。

http://192.168.157.101:8888/group1/M00/00/00/wKidZWWZZ1qAOKS-AAAADCApozA963.txt


用HTTP的方式访问FastDFS中的文件整体流程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/603343.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Visual Studio C#创建windows服务程序

选择一个windows服务程序创建 命名一个项目名称双击Service1.cs文件,然后鼠标右键添加安装程序接下来,我们对服务做一些简单的配置,配置Account为LocalSystem,否则启动服务时需要输入账户和密码设置启动服务名称我们可以在OnSt…

机器视觉技能培养:桥接学院与工业界的鸿沟

在当前的教育体系中,大学生往往缺乏直接参与机器视觉工作的机会。本文将探讨机器视觉学习的重要性,分析技术指导和实践项目的必要性。并提出一个全面的机器视觉学习路线图。 机器视觉及其在现代工业中的应用 机器视觉是指利用计算机视觉技术对图像进行自…

MySql常用函数之 convert()、str_to_date()、date_format()、to_base64()、from_base64()等使用介绍

一、convert() 1、将日期字符串转换为 date 类型 select convert(2024-01-06, date) from dual; 输出: 2024-01-06 2、将日期字符串转换为 datetime 类型 select convert(2024-01-06, datetime) from dual; 输出: 2024-01-06 00:00:00 3、将日期转换…

解决Docker报错问题:Docker Desktop – Unexpected WSL error

最近因为准备在NAS上通过Docker容器方式安装MYSQL,发现https://hub.docker.com网站被墙了,无法自动安装,同时又找不到靠谱的离线镜像,所以准备在Window上安装Docker,通过电脑的网络代理制作离线镜像再上传到NAS上。 在…

【温故而知新】JavaScript数据结构详解

一、概念 JavaScript是一种弱类型的编程语言,它提供了一些内置的数据结构来存储和组织数据。 在计算机科学中,数据结构是一种特定的方式来组织和存储数据,以便于有效地访问和修改数据。在JavaScript中,数据结构是指相互之间存在…

PTA——分支结构练习02 用if-else语句判断上课周和放假

本题需要用if-else语句判断上课周和放假:输入1-12范围的数字表示月份(month),若输入的月份是9-12和1时,输出“本学年上学期”;若输入的月份为2时,则输出“寒假!”;若输入…

【AIGC-图片生成视频系列-6】SSR-Encoder:用于主题驱动生成的通用编码器

目录 一. 贡献概述 二. 方法详解 a) 训练阶段 b) 推理生成阶段: 三. 综合结果 四. 注意力可视化 五. 选择性主题驱动图像生成 六. 人体图像生成 七. 可推广到视频生成模型 八. 论文 九. 个人思考 稳定扩散(Stable Diffusion)模型可…

python豆瓣实例,抓取多页数据-应用到知识点:随时数,xpath,间隔请求sleep

源代码: <!DOCTYPE html> <html lang="zh-CN" class="ua-windows ua-webkit"> <head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="renderer" content=&q…

Calibre PEX Hspice Netlist提取步骤(数模芯片提取spice netlist流程)

在数模混合芯片中&#xff0c;通常模拟需要数字模块通过calibre工具来提取Hspice netlist用于功耗仿真。注意这里的spice netlist和做Calibre的spice netlist是不太一样的。 另外在做calibre pex时需要确保当前的design LVS已经pass。否则功耗仿真可能会不准。 Calibre LVS常…

八. 实战:CUDA-BEVFusion部署分析-spconv原理

目录 前言0. 简述1. 举例分析spconv的计算流程2. 导出带有spconv网络的onnx需要考虑的事情总结下载链接参考 前言 自动驾驶之心推出的 《CUDA与TensorRT部署实战课程》&#xff0c;链接。记录下个人学习笔记&#xff0c;仅供自己参考 本次课程我们来学习下课程第八章——实战&a…

【数据库原理】(13)视图的使用

文章目录 一.定义和删除视图1.建立视图2.删除视图 二.查询视图视图查询的基本操作视图查询的内部机制查询转换的注意事项视图查询的限制 三.更新视图1.插入视图数据2.删除视图数据3.修改视图数据可更新性的限制 视图&#xff08;View&#xff09; 是一种虚拟的表&#xff0c;它…

Next.js 第一次接触

因为需要整个漂亮的在线文档&#xff0c;所以接触了next.js&#xff0c;因为对前端js本身不够熟悉&#xff0c;别说对react.js 又不会&#xff0c;时间又不允许深入研究&#xff0c;所以&#xff0c;为了加一个导航菜单&#xff0c;极其痛苦。 有点小bug&#xff0c;不过不影响…

学习笔记:C++之 switch语句

Switch语句 作用&#xff1a;执行多条件分支语句 语法&#xff1a; switch&#xff08;表达式&#xff09;{ case 结果1&#xff1a;执行语句&#xff1b;break&#xff1b; case 结果2&#xff1a;执行语句&#xff1b;break&#xff1b; ... default&#xff1a;执行语句&a…

Golang leetcode142 环形链表 暴力map 快慢指针法

文章目录 环形链表 leetcode142暴力遍历 map哈希记录快慢指针法 环形链表 leetcode142 该题目要求找到入环的第一个节点 我们可以通过map进行记录&#xff0c;没到新的节点查询是否经过原有节点 入环节点&#xff0c;上两个节点的next相同 若有入环节点&#xff0c;则一定能检…

如何用python实现一个简单的单向链表?

实现一个简单的单向链表涉及两个基本的构建块&#xff1a;节点&#xff08;Node&#xff09;和链表&#xff08;LinkedList&#xff09;。下面是详细步骤和解释&#xff1a; 1. 实现节点&#xff08;Node&#xff09; 链表中的每个节点通常包含两部分&#xff1a;存储的数据&…

Flutter 图片和资源的高效使用指南

文章目录 指定资源什么是 [pubspec.yaml](https://dart.cn/tools/pub/pubspec) 文件 图片图片常用的配置属性加载本地图片通过 pubspec.yml 文件进行配置图片目录使用 Image.asset 小部件加载本地图片 加载网络图片通过 Image.network小部件加载网络图片&#xff1a;使用Image.…

LeCode:(606. 根据二叉树创建字符串)

题目链接 本体的难点&#xff1a; 什么时候去打印左右括号&#xff1f;什么时候省略&#xff1f; 解题过程&#xff1a;通过观察看到&#xff0c;每次遍历结点之前&#xff0c;打印了一个左括号&#xff1b;遍历到叶子&#xff0c;叶子的左右也要打印出括号来&#xff08;先…

linux虚拟机环境快速搭建redis5.x版本的主从集群总结

原创/朱季谦 我在阿里云服务器上曾参与过公司redis集群的搭建&#xff0c;但时间久了&#xff0c;都快忘记当时的搭建过程了&#xff0c;故而决定在虚拟机centOS 7的环境&#xff0c;自行搭建一套redis5.x版本的集群&#xff0c;该版本集群的搭建比较方便&#xff0c;不用再像…

实现电子邮件自动化的实用技巧与指南

如何实现电子邮件自动化&#xff1f;一般可以通过规则和过滤器、自动回复、定时发送、快捷键和模板、团队邮箱等方法来实现。 一、什么是电子邮件自动化 电子邮件自动化是一种根据特定条件在适当时机发送正确信息的过程。这些条件可以是时间表、触发器或在您的电子邮件自动化工…

AVL树介绍以及代码实现

二叉搜索树的查找和删除虽然最优情况下能够做到 O(logN) 的级别&#xff0c;但是在一些特殊情况下&#xff0c;它的查找速度只能到达 O(N)级别&#xff0c;比如数据按顺序插入&#xff0c;那么就一定是一棵单边树。 为了针对这种情况&#xff0c;俄罗斯的两位数学家&#xff1a…