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 install

tar -zxvf libserverframe-1.2.1.tar.gz
cd /usr/local/libserverframe-1.2.1
./make.sh && ./make.sh install

tar -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中的文件整体流程

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

遇见未来的你——感谢你带给我的感悟

目录 一、背景介绍二、思路&方案三、过程1.都说有的人出生就在罗马而有的人却用一辈子都在去向罗马的路上1.1.物质:1.2.精神: 2.做事情要看大再看细3.心存善念,常怀感恩,从小事做起4.所谓的面子在母爱面前像是一粒微尘5.讲道理…

React 中条件渲染的 N 种方法

本文作者系360奇舞团前端开发工程师 条件渲染在React开发中非常重要的功能,它允许开发人员根据条件控制渲染的内容,在创建动态和交互式用户界面方面发挥着至关重要的作用,本文总结了常用的的条件渲染方法。 1.If-else if-else是一种控制流程的…

qt自定义控件的封装

刚学了一个很有意思的东西,前面学了list,Tree,Table三大控件和一部分常用基础控件,但感觉没啥意思,就是用别人的直接用,刚学了一个自定义控件的封装,流程如下: 想把两个不相关的组件封装在一块,直接用ui不行,所以先新添加了qt设计师页面,新添加了一个SmallWidget *ui 在smal…

SLURM作业管理系统之3种作业提交方式

文章目录 前言定义基本概念三种作业提交模式1. 批处理作业(采用 sbatch 命令提交)2. 交互式作业提交(采用 srun 命令提交)3. 分配模式作业(采用 salloc 命令提交) 管理节点部署Slurm常用命令 前言 在高性能…

unity 游戏开发中傻傻分不清URP、HDRP和SRP

文章目录 **URP (Universal Render Pipeline)**:**HDRP (High Definition Render Pipeline)**:**区别**: Unity的URP(Universal Render Pipeline)和HDRP(High Definition Render Pipeline)都是基于SRP(Scri…

k8s yaml文件pod的生命周期

Pod是k8s中最小限额资源管理组件,也是最小化运行容器化的应用的资源管理对象。 Pod是一个抽象的概念,可以理解为一个或者多个容器化应用的集合。 在一个pod当中运行一个容器是最常用的方式。 在一个pod当中同时运行多个容器,在一个pod当中…

2024阿里云服务器可用区选择方法

阿里云服务器地域和可用区怎么选择?地域是指云服务器所在物理数据中心的位置,地域选择就近选择,访客距离地域所在城市越近网络延迟越低,速度就越快;可用区是指同一个地域下,网络和电力相互独立的区域&#…

Strict MIME type checking is enforced for module scripts per HTML spec.

目录 前言错误信息如下:前言 最近使用docker打包Nginx和vue 为镜像文件,启动镜像时报错 错误信息如下: index89886.js:1 Failed to load module script: Expected a JavaScript module script but the server responded with a MIME type of "text/html". Stri…

labelme的安装

首先尝试在(openmmlab)的python3.8的环境下安装(失败)。应该是我环境其他部分不对,和python版本应该没什么关系。(后续,创建新的环境后成功,可直接看最后一部分。) 首先安装是没问题的 pip in…

Linux文件操作命令(touch、cat、more、cp、mv、rm)

之前我们学习了对目录(即文件夹的操作,那么现在我们来一起看一下怎么操作文件吧) 1.touch命令 功能:创建文件 语法:touch 参数 参数:被创建的文件路径 注意:touch命令无选项,参…

智能合约:3分钟开发ERC20 token(2)

0.前言 上一节我们讲到了开发智能合约的准备工作,以及在线编程平台remix 智能合约(1) 这一节讲解如何开发、发行一个代币,并具备包括代币铸造mint,转账transfer和销毁burn功能,并确保合约拥有者owner的权限…

autodl学术加速

今天使用autodl加载预训练BERT模型失败,在官方文档里面找到了官方给的代理使用方法。 直接在bash输入: 开启学术加速: source /etc/network_turbo取消学术加速: unset http_proxy && unset https_proxy据说是只能访问这…

计算机组成原理 I/O方式

I/O 方式 I/O方式分类: 程序查询方式。由 CPU通过程序不断查询 /O 设备是否已做好准备,从而控制0 设备与主机交换信息程序中断方式。只在 I/0 设备准备就绪并向 CPU发出中断请求时才予以响应。DMA方式。主存和 I/O 设备之间有一条直接数据通路,当主存和…

【动态规划】【滑动窗口】C++算法:100154 执行操作后的最大分割数量

作者推荐 【动态规划】【字符串】扰乱字符串 本文涉及的基础知识点 C算法:滑动窗口总结 动态规划 LeetCode100154 执行操作后的最大分割数量 给你一个下标从 0 开始的字符串 s 和一个整数 k。 你需要执行以下分割操作,直到字符串 s 变为 空&#xf…

Flink中的状态管理

一.Flink中的状态 1.1 概述 在Flink中,算子任务可以分为有状态和无状态两种状态。 无状态的算子任务只需要观察每个独立事件,根据当前输入的数据直接转换输出结果。例如Map、Filter、FlatMap都是属于无状态算子。 而有状态的算子任务,就…

C#使用栈方法遍历二叉树

步骤一:定义一个二叉树的节点类 定义一个二叉树的节点类,其中包含节点的值、左子节点和右子节点。 // 二叉树节点定义public class TreeNode{public int Value { get; set; } // 节点的值public TreeNode Left { get; set; } // 左子节点public TreeN…

uniapp 微信小程序跳转至其他小程序

一、背景&#xff1a; 需要在目前的小程序中跳转到另一个小程序&#xff0c;跳转的目标小程序需要已经发布上线了 二、具体实现 使用uni.navigateToMiniProgram打开另一个小程序 官网指引&#x1f449;&#xff1a;uni.navigateToMiniProgram(OBJECT) | uni-app官网 <t…

手把手教你用jmeter做压力测试(详图)

一.前言 压力测试是每一个Web应用程序上线之前都需要做的一个测试&#xff0c;他可以帮助我们发现系统中的瓶颈问题&#xff0c;减少发布到生产环境后出问题的几率&#xff1b;预估系统的承载能力&#xff0c;使我们能根据其做出一些应对措施。所以压力测试是一个非常重要的步…

基于机器视觉的车牌检测-车牌粗略定位

基于颜色特征的定位算法 基于颜色特征的定位算法。该算法不用对整幅图像进行边缘检测&#xff0c;而是直接寻找图片中颜色、形状及纹理符合车牌特征的连通区域。通过分析车牌图像&#xff0c;发现对于具有某种目标颜色的像素&#xff0c;可以直接通过对H、S、I三分量设定一个范…

CPU平台做视频智能分析,Lnton视频分析平台不仅支持流分析,同时也支持图片分析了

LntonAIServer最新v1.0.09版本支持图片分析了&#xff0c;经过几个月的研发&#xff0c;在原有的视频流分析的基础上&#xff0c;我们终于支持大家都非常期待的图片分析功能了&#xff0c;图片分析的功能加上&#xff0c;能有利于很多场景的展开&#xff0c;比如在烟火、明厨亮…