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.hqwc.cn/news/327716.html

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

相关文章

二分查找算法(指定数值的左右边界)

之前一直以为二分查找有什么难的,不就是确定左右边界,然后while循环求mid,大于mid的找右半边,小于mid的找左半边。直到最后相同了就是最后查找的结果了. 后来等真正用到二分查找算法的时候,发现问题远没有这么简单&…

代码随想录算法训练营第二十天| 回溯 理论基础 77. 组合

理论基础 回溯是一种搜索的方式。回溯是递归的副产品,只要有递归就会有回溯,回溯函数也是递归函数,指的是一个函数。 回溯法并不是什么高效的算法。因为回溯的本质是穷举,穷举所有可能,然后选出我们想要的答案&#…

回顾基础--HTML篇

HTML语法规范 <html></html> 开始标签与结束标签 <br /> 单标签 包含关系 <head><title></title> </head>并列关系 <head></head> <body></body> 1、 标题标签 标题标签 【双标签】 <h1> ~ &…

Linux离线安装MySQL(rpm)

目录 下载安装包安装MySQL检测安装结果服务启停MySQL用户设置 下载安装包 下载地址&#xff1a;https://downloads.mysql.com/archives/community/ 下载全量包如&#xff1a;(mysql-8.1.0-1.el7.x86_64.rpm-bundle.tar) 解压&#xff1a;tar -xzvf mysql-8.1.0-1.el7.x86_64.…

18.标题统计

题目 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);String str sc.nextLine();int res 0;for(int i0;i<str.length();i) {char c str.charAt(i);if(c! && c!\n) {res;}}System.o…

【Docker】创建,查看,进入容器

目录 方式一&#xff1a; 创建 查看 ​编辑 方式二&#xff1a; 创建 查看 进入容器 方式一&#xff1a; 首先查看有什么镜像 创建 docker run -i -t --namefreedom centos:7 /bin - i 表示容器一直运行着&#xff0c;容器如果没有客户端连接就会关闭&#xff0c;加了…

【动态规划】【字符串】C++算法:140单词拆分

作者推荐 【动态规划】【字符串】扰乱字符串 本文涉及的基础知识点 动态规划 字符串 LeetCode140:单词拆分 II 给定一个字符串 s 和一个字符串字典 wordDict &#xff0c;在字符串 s 中增加空格来构建一个句子&#xff0c;使得句子中所有的单词都在词典中。以任意顺序 返回…

【2058错误】sql软件链接数据库 mysql 报错误2058

【2058错误】sql软件链接数据库报错误2058 操作&#xff1a;仅需在mysql登陆之后运行一行代码即可&#xff1a;注意1.后面必须是%&#xff0c;而不是别人说的 localhost2.此处的password是你自己的mysql密码。 操作&#xff1a;仅需在mysql登陆之后运行一行代码即可&#xff1a…

AI与5G、IDC等成为数字经济的重要基础设施

AI与5G、IDC等已经成为数字经济的重要基础设施&#xff0c;它们的影响和作用不容忽视。随着技术的迅速发展&#xff0c;AI在各行各业都得到了广泛应用&#xff0c;并成为数字经济的核心驱动力之一。 首先&#xff0c;AI的兴起为数字经济带来了巨大的机遇。AI技术可以帮助企业从…

Redis(Nosql数据库)

目录 一.SQL 与 NoSQL 的区别&#xff1f; 二.Redis Redis 为什么那么快&#xff1f; 三.Redis的安装 安装redis&#xff1a; 创建redis工作目录&#xff1a; 修改redis配置文件&#xff1a; redis-cli 命令行工具&#xff1a; redis-benchmark 测试工具&#xff1a; …

【计算机病毒传播模型】报告:区块链在车联网中的应用

区块链在车联网中的应用 写在最前面题目 - 26 车联网安全汇报演讲稿-删减2后&#xff0c;最终版&#xff08;1469字版本&#xff09;汇报演讲稿-删减1后&#xff08;2555字版本&#xff09;汇报演讲稿-删减前&#xff08;3677字版本&#xff09;1 概述1.1 车联网1.2 区块链1.3 …

SpringBoot-项目引入Redis依赖

在使用Spring Boot开发应用时&#xff0c;可以使用Redis来实现缓存、分布式锁等功能。在编写业务逻辑代码时&#xff0c;可以通过注入RedisTemplate或StringRedisTemplate对象来操作Redis&#xff0c;如存取数据、设置过期时间、删除数据等。同时&#xff0c;还可以使用Redis的…