FastDFS分布式存储

前言

FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。

FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。

一:FastDFS原理

FastDFS是一个开源的轻量级分布式文件系统,纯C实现,目前提供了C、Java和PHP API。功能包括:文件存储,文件同步,文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以中小文件(建议范围:4KB < file_size <500MB)为载体的在线服务。

Fast DFS系统有三个角色:跟踪服务器(Tracker Server)、存储服务器(Storage Server)和客户端(Client)。client请求Tracker server 进行文件上传、下载,通过Tracker server调度最终由Storage server完成文件上传和下载,在底层存储上通过逻辑的分组概念,使得通过在同组内配置多个Storage,从而实现软RAID10。

1:FastDFS架构
(1)Tracker server

跟踪服务器,主要做调度工作,起到均衡的作用;负责管理所有的Storage server和group,每个storage在启动后会连接Tracker,告知自己所属group等信息,并保持周期性心跳。tracker上的元信息都是由storage汇报的信息生成的,本身不需要持久化任何数据,这样使得tracker非常容易扩展,直接增加tracker机器即可扩展为tracker cluster来服务,cluster里每个tracker之间是完全对等的,所有的tracker都接受stroage的心跳信息,生成元数据信息来提供读写服务,tracker根据storage的心跳信息,建立group==>[storage server list]的映射表。

(2)Storage server

存储服务器,主要提供容量和备份服务;以group为单位,每个group内部可以有多台storage server,数据互为备份。客户端上传的文件最终存储在storage服务器上,Storage server没有实现自己的文件系统,而是利用操作系统的文件系统来管理文件,可以将storage称为存储服务器。storage可配置多个数据存储目录,比如有10块磁盘,分别挂载在/data/disk1-/data/disk10,则可将这10个目录都配置为storage的数据存储目录。

(3)Client

客户端,上传下载数据的服务器,也就是我们自己的项目所部署在的服务器。FastDFS向使用者提供基本文件访问接口,比如upload、download、append、delete等,以客户端库的方式提供给用户使用。


 

跟踪服务器和存储节点都可以由一台或多台服务器构成,跟踪服务器和存储节点均可以随时增加或者下线不会影响线上服务,其中跟踪服务器中所有服务器是对 等,可以根据服务器压力情况随时增加或减少。

2:文件的上传

Storage server会连接集群中所有的Tracker server,定时向他们报告自己的状态,包括磁盘剩余空间、文件同步状况、文件上传下载次数等统计信息。

上传的内部机制如下:

(1)选择tracker server

当集群中不止一个tracker server时,由于tracker之间是完全对等无状态的关系,当集群中不止一个tracker server时,由于tracker之间是完全对等的关系,客户端在upload文件时可以任意选择一个trakcer。 选择存储的group 当tracker接收到upload file的请求时,会为该文件分配一个可以存储该文件的group,支持如下选择group的规则:

  • Round robin,所有的group间轮询
  • Specified group,指定某一个确定的group
  • Load balance,剩余存储空间多group优先

(2)选择storage server

当选定group后,tracker会在group内选择一个storage server给客户端,支持如下选择storage的规则:

  • Round robin,在group内的所有storage间轮询
  • First server ordered by ip,按ip排序
  • First server ordered by priority,按优先级排序(优先级在storage上配置)

(3)选择storage path

当分配好storage server后,客户端将向storage发送写文件请求,storage将会为文件分配一个数据存储目录,支持如下规则:

  • Round robin,多个存储目录间轮询
  • 剩余存储空间最多的优先

(4)生成Fileid

选定存储目录之后,storage会为文件生一个Fileid,由storage server ip、文件创建时间、文件大小、文件crc32和一个随机数拼接而成,然后将这个二进制串进行base64编码,转换为可打印的字符串。 选择两级目录 当选定存储目录之后,storage会为文件分配一个fileid,每个存储目录下有两级256*256的子目录,storage会按文件fileid进行两次hash(猜测),路由到其中一个子目录,然后将文件以fileid为文件名存储到该子目录下。

(5)生成文件名

当文件存储到某个子目录后,即认为该文件存储成功,接下来会为该文件生成一个文件名,文件名由group、存储目录、两级子目录、fileid、文件后缀名(由客户端指定,主要用于区分文件类型)拼接而成。

3:文件的下载

跟upload file一样,在download file时客户端可以选择任意tracker server。tracker发送download请求给某个tracker,必须带上文件名信息,tracke从文件名中解析出文件的group、大小、创建时间等信息,然后为该请求选择一个storage用来服务读请求。


(1)定位文件

客户端上传文件后存储服务器将文件ID返回给客户端,此文件ID用于以后访问该文件的索引信息。文件索引信息包括:组名,虚拟磁盘路径,数据两级目录,文件名。

(1)组名:文件上传后所在的storage组名称,在文件上传成功后有storage服务器返回,需要客户端自行保存。

(2)虚拟磁盘路径:storage配置的虚拟路径,与磁盘选项store_path*对应。如果配置了store_path0则是M00,如果配置了store_path1则是M01,以此类推。

(3)数据两级目录:storage服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据文件。

(4)文件名:与文件上传时不同。是由存储服务器根据特定信息生成,文件名包含:源存储服务器IP地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息。


 

知道FastDFS FID的组成后,我们来看看FastDFS是如何通过这个精巧的FID定位到需要访问的文件:

  • 通过组名tracker能够很快的定位到客户端需要访问的存储服务器组,并将选择合适的存储服务器提供客户端访问
  • 存储服务器根据“文件存储虚拟磁盘路径”和“数据文件两级目录”可以很快定位到文件所在目录,并根据文件名找到客户端需要访问的文件


4:同步时间管理

当一个文件上传成功后,客户端马上发起对该文件下载请求(或删除请求)时,tracker是如何选定一个适用的存储服务器呢? 其实每个存储服务器都需要定时将自身的信息上报给tracker,这些信息就包括了本地同步时间(即,同步到的最新文件的时间戳)。而tracker根据各个存储服务器的上报情况,就能够知道刚刚上传的文件,在该存储组中是否已完成了同步。同步信息上报如下图:

写文件时,客户端将文件写至group内一个storage server即认为写文件成功,storage server写完文件后,会由后台线程将文件同步至同group内其他的storage server。

每个storage写文件后,同时会写一份binlog,binlog里不包含文件数据,只包含文件名等元信息,这份binlog用于后台同步,storage会记录向group内其他storage同步的进度,以便重启后能接上次的进度继续同步;进度以时间戳的方式进行记录,所以最好能保证集群内所有server的时钟保持同步。

storage的同步进度会作为元数据的一部分汇报到tracker上,tracke在选择读storage的时候会以同步进度作为参考。 比如一个group内有A、B、C三个storage server,A向C同步到进度为T1 (T1以前写的文件都已经同步到B上了),B向C同步到时间戳为T2(T2 > T1),tracker接收到这些同步进度信息时,就会进行整理,将最小的那个做为C的同步时间戳,本例中T1即为C的同步时间戳为T1(即所有T1以前写的数据都已经同步到C上了);同理,根据上述规则,tracker会为A、B生成一个同步时间戳。

5:集成nginx

FastDFS通过Tracker服务器,将文件放在Storage服务器存储,但是同组存储服务器之间需要进入文件复制,有同步延迟的问题。

假设Tracker服务器将文件上传到了192.168.4.125,上传成功后文件ID已经返回给客户端。此时FastDFS存储集群机制会将这个文件同步到同组存储192.168.4.126,在文件还没有复制完成的情况下,客户端如果用这个文件ID在192.168.4.126上取文件,就会出现文件无法访问的错误。


而fastdfs-nginx-module可以重定向文件连接到文件上传时的源服务器取文件,避免客户端由于复制延迟导致的文件无法访问错误。

另外,使用nginx反向代理后,后端可以以HTTP请求的方式来访问文件资源。访问nginx反向代理+上传文件时的ID

https://www.cnblogs.com/withLevi/p/15835469.html

二:FastDFS部署

1:环境要求

服务器:CentOS Linux release 7.9.2009 (Core)

FastDFS下载地址:https://github.com/happyfish100

(1)fastdfs

(2)libfastcommon

(3)fastdfs-nginx-module

(4)nginx-1.18.0

2:安装前的准备

(1)检查Linux上是否安装了 gcc、libevent、libevent-devel

yum list installed | grep gcc

yum list installed | grep libevent

yum list installed | grep libevent-devel

(2)如果没有安装,则需进行安装

yum install gcc libevent libevent-devel –y

安装 libfastcommon库 libfastcommon 库是 FastDFS 文件系统运行需要的公共 C 语言函数库

(3)将下载好的 libfastcommon ,fastdfs, fastdfs-nginx-module, nginx-1.18.0 等文件使用工具上传到Linux服务器中(例如/usr/local/src)

安装ibfastcommon

# 解压下载下来的tar.gz压缩包到当前目录

tar -zxvf libfastcommon-1.0.36.tar.gz

# 切换到解压后的libfastcommon目录

cd libfastcommon-1.0.36

# 执行make脚本进行编译

./make.sh

# 注意:make编译的时候如果报错,需解决错误后再次进行make,通常发生错误是由于Linux缺少某些依赖库导致,根据错误提示解决错误

#执行make install进行安装

./make.sh install

4:安装FastDFS

# 解压下载下来的tar.gz压缩包到当前目录

tar -zxvf fastdfs-5.11.tar.gz

# 切换到解压后FastDFS的目录

cd fastdfs-5.11

# 执行make脚本进行编译

./make.sh

# 执行make install进行安装

./make.sh install

#至此FastDFS安装完成,所有编译出来的文件存放在/usr/bin目录下, 所有配置文件存放在/etc/fdfs目录下

5:查看安装后的效果

# 查看FastDFS相关的可执行程序

ll /usr/bin/fdfs*

[root@withlevi ~]# ll /usr/bin/fdfs*

-rwxr-xr-x 1 root root  455560 Dec 30 18:11 /usr/bin/fdfs_append_file

-rwxr-xr-x 1 root root  468952 Dec 30 18:11 /usr/bin/fdfs_appender_test

-rwxr-xr-x 1 root root  468784 Dec 30 18:11 /usr/bin/fdfs_appender_test1

-rwxr-xr-x 1 root root  452336 Dec 30 18:11 /usr/bin/fdfs_crc32

-rwxr-xr-x 1 root root  455584 Dec 30 18:11 /usr/bin/fdfs_delete_file

-rwxr-xr-x 1 root root  456568 Dec 30 18:11 /usr/bin/fdfs_download_file

-rwxr-xr-x 1 root root  456168 Dec 30 18:11 /usr/bin/fdfs_file_info

-rwxr-xr-x 1 root root  476728 Dec 30 18:11 /usr/bin/fdfs_monitor

-rwxr-xr-x 1 root root  455744 Dec 30 18:11 /usr/bin/fdfs_regenerate_filename

-rwxr-xr-x 1 root root 1629192 Dec 30 18:11 /usr/bin/fdfs_storaged

-rwxr-xr-x 1 root root  478496 Dec 30 18:11 /usr/bin/fdfs_test

-rwxr-xr-x 1 root root  477816 Dec 30 18:11 /usr/bin/fdfs_test1

-rwxr-xr-x 1 root root  662632 Dec 30 18:11 /usr/bin/fdfs_trackerd

-rwxr-xr-x 1 root root  456312 Dec 30 18:11 /usr/bin/fdfs_upload_appender

-rwxr-xr-x 1 root root  457688 Dec 30 18:11 /usr/bin/fdfs_upload_file

# /usr/bin是Linux的环境变量,可通过echo $PATH查看

6:查看FastDFS的配置文件

[root@withlevi ~]# ll /etc/fdfs/

total 72

-rw-r--r-- 1 root root  1909 Dec 30 20:29 client.conf

-rw-r--r-- 1 root root   965 Dec 30 18:14 http.conf

-rw-r--r-- 1 root root 31172 Dec 30 18:14 mime.types

-rw-r--r-- 1 root root  3756 Dec 31 09:31 mod_fastdfs.conf

-rw-r--r-- 1 root root 10250 Dec 30 21:23 storage.conf

-rw-r--r-- 1 root root   620 Dec 30 18:09 storage_ids.conf

-rw-r--r-- 1 root root  9138 Dec 30 18:23 tracker.conf

# 另外注意需要把解压后的fastdfs-5.11/conf目录下的两个文件拷贝到/etc/fdfs/ ,否则后续会有很多奇怪问题不好解决

# cp http.conf /etc/fdfs/

# cp mime.types /etc/fdfs/

7:FastDFS配置文件详解

client.conf.sample:客户端的配置文件,测试用

storage.conf.sample:存储器的配置文件

tracker.conf.sample:跟踪器的配置文件

(1)编辑 tracker.conf 配置文件

# 拷贝文件 tracker.conf.sample 并重命名为 tracker.conf

cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf

# 编辑 tracker.conf 配置文件

vim /etc/fdfs/tracker.conf

# 默认指向的FastDFS作者余庆的目录,因为在我们的机器上不存在,所有手动改一下

base_path=/opt/fastdfs/tracker #配置tracker存储数据的目录

# bind an address of this host

# empty for bind all addresses of this host

# 允许访问 tracker 服务器的 IP 地址,为空则表示不受限制

bind_addr =

# the tracker server port

# tracker 服务监听端口

port = 22122

# connect timeout in seconds

# default value is 30

# Note: in the intranet network (LAN), 2 seconds is enough.

connect_timeout = 5

# network timeout in seconds for send and recv

# default value is 30

network_timeout = 60

# the base path to store data and log files

# tracker 服务器的运行数据和日志的存储父路径(需要提前创建好 切记切记)

base_path = /opt/fastdfs/tracker

# max concurrent connections this server support

# you should set this parameter larger, eg. 10240

# default value is 256

max_connections = 1024

# accept thread count

# default value is 1 which is recommended

# since V4.07

accept_threads = 1

(2)编辑 storage.conf 配置文件

# 拷贝文件 tracker.conf.sample 并重命名为 tracker.conf

cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf

# 编辑 tracker.conf 配置文件

vi /etc/fdfs/tracker.conf

# storage存储数据目录 一定要手动创建!!!!

base_path=/opt/fastdfs/storage  

# 真正存放文件的目录 一定要手动创建!!!!

store_path0=/opt/fastdfs/storage/files

# 注册当前存储节点的跟踪器地址 可以改为自己的服务器ip

tracker_server=192.168.235.128:22122  

(3)在Linux服务器上创建上面指定的目录

/opt/fastdfs/tracker

/opt/fastdfs/storage

/opt/fastdfs/storage/files

8:FastDFS重启与FastDFS关闭

(1)FastDFS重启

重启tracker

fdfs_trackerd /etc/fdfs/tracker.conf restart

重启storage

fdfs_storaged /etc/fdfs/storage.conf restart

关闭tracker执行命令

# 在任意目录下执行:

fdfs_trackerd /etc/fdfs/tracker.conf stop

关闭storage执行命令

#在任意目录下执行:

fdfs_storaged /etc/fdfs/storage.conf stop

或者kill关闭fastdfs,但不建议在线上使用 kill -9 强制关闭,因为可能会导致文件信息不同步问题。

9:FastDFS测试

(1)测试前准备

FastDFS安装完成之后,可以使用fdfs_test脚本测试文件上传。

测试之前,需要修改client.conf配置文件,修改两个配置

cd /etc/fdfs/

vim client.conf

base_path=/opt/fastdfs/client

tracker_server=192.168.179.128:22122

# 在/opt/fastdfs/目录下创建client

mkdir -p /opt/fastdfs/client

(2)测试文件上传

准备需要上传的文件

[root@withlevi ~]# vim levi.txt

[root@withlevi ~]# fdfs_test /etc/fdfs/client.conf upload levi.txt

This is FastDFS client test program v6.07

Copyright (C) 2008, Happy Fish / YuQing

FastDFS may be copied only under the terms of the GNU General

Public License V3, which may be found in the FastDFS source kit.

Please visit the FastDFS Home Page http://www.fastken.com/

for more detail.

[2022-01-22 22:30:30] DEBUG - base_path=/opt/fastdfs/client, connect_timeout=5, network_timeout=60, tracker_server_count=1, anti_steal_token=0, anti_steal_secret_key length=0, use_connection_pool=0, g_connection_pool_max_idle_time=3600s, use_storage_id=0, storage server id count: 0

tracker_query_storage_store_list_without_group:

server 1. group_name=, ip_addr=47.94.41.166, port=23000

group_name=group1, ip_addr=47.94.41.166, port=23000

storage_upload_by_filename

group_name=group1, remote_filename=M00/00/00/L14ppmHsFQaAeE8QAAAAMRNuHPQ770.txt

source ip address: 47.94.41.166

file timestamp=2022-01-22 22:30:30

file size=49

file crc32=325983476

example file url: http://47.94.41.166/group1/M00/00/00/L14ppmHsFQaAeE8QAAAAMRNuHPQ770.txt

storage_upload_slave_by_filename

group_name=group1, remote_filename=M00/00/00/L14ppmHsFQaAeE8QAAAAMRNuHPQ770_big.txt

source ip address: 47.94.41.166

file timestamp=2022-01-22 22:30:30

file size=49

file crc32=325983476

example file url: http://47.94.41.166/group1/M00/00/00/L14ppmHsFQaAeE8QAAAAMRNuHPQ770_big.txt

[root@withlevi ~]#

(3)切换到存储目录查看文件上传情况

[root@withlevi ~]# cd /opt/fastdfs/storage/files/data/00/00

[root@withlevi 00]# ls

L14ppmHNt9iAB-isAEDjYcGKVKU004.JPG        L14ppmHOZm-AB5qXAAAAMXE697s795.txt

L14ppmHNt9iAB-isAEDjYcGKVKU004.JPG-m      L14ppmHOZm-AB5qXAAAAMXE697s795.txt-m

L14ppmHNt9iAB-isAEDjYcGKVKU004_big.JPG    L14ppmHOmquAeSV2AFLl1Mib3u8860.MP4

L14ppmHNt9iAB-isAEDjYcGKVKU004_big.JPG-m  L14ppmHOmquAeSV2AFLl1Mib3u8860.MP4-m

L14ppmHNukOAelKJCbKFnorDROQ719.MP4        L14ppmHOnCWAQeMDAoZgN58pFDA765.MP4

L14ppmHNukOAelKJCbKFnorDROQ719.MP4-m      L14ppmHOnCWAQeMDAoZgN58pFDA765.MP4-m

L14ppmHNunqALviEAOLrkS2oe-A587.dmg        L14ppmHcQ5qAIZ_qAAAADdzq_m0512.txt

L14ppmHNunqALviEAOLrkS2oe-A587.dmg-m      L14ppmHcQ5qAIZ_qAAAADdzq_m0512.txt-m

L14ppmHNvIGAB2ssAAOeigwPYJ4967.zip        L14ppmHcQ5qAIZ_qAAAADdzq_m0512_big.txt

L14ppmHNvIGAB2ssAAOeigwPYJ4967.zip-m      L14ppmHcQ5qAIZ_qAAAADdzq_m0512_big.txt-m

L14ppmHOZgqAIVpGAEDjYcGKVKU626.JPG        L14ppmHsFQaAeE8QAAAAMRNuHPQ770.txt

L14ppmHOZgqAIVpGAEDjYcGKVKU626.JPG-m      L14ppmHsFQaAeE8QAAAAMRNuHPQ770.txt-m

L14ppmHOZgqAIVpGAEDjYcGKVKU626_big.JPG    L14ppmHsFQaAeE8QAAAAMRNuHPQ770_big.txt

L14ppmHOZgqAIVpGAEDjYcGKVKU626_big.JPG-m  L14ppmHsFQaAeE8QAAAAMRNuHPQ770_big.txt-m

FastDFS生成的文件目录结构及名称示例

# fdfs_delete_file /etc/fdfs/client.conf group1/要删除的文件路径

fdfs_delete_file /etc/fdfs/client.conf group1/M00/00/00/L14ppmHsFQaAeE8QAAAAMRNuHPQ770.txt-m

注意

● 没有搭建集群默认只有一个组group1

● 后缀名包含-m的为属性文件(meta)

● 在Linux中并没有磁盘一说,是虚拟的

10:分布式文件系统FastDFS的HTTP访问

概述 在文件上传的时候,上传成功的信息中有提示我们可以通过某个路径去访问上传的文件,但是我们直接访问这个路径,却不可以,那么已经上传到FastDFS文件系统中的文件,我们如何在浏览器中访问呢? FastDFS提供了一个Nginx扩展模块,利用该模块,我们可以通过Nginx访问已经上传到FastDFS上的文件

(1)前期准备工作

# 1. 将Fastdfs的Nginx扩展模块源代码上传到Linux上

# 2. 解压下载下来的fastdfs-nginx-module-master.zip 文件

unzip fastdfs-nginx-module-master.zip

(2)安装Nginx并且添加fastDFS模块

因为这个模块必须在Nginx的安装的过程中才能添加,所有我们需要重新安装一个nginx,为了和原来已安装的Nginx进行区分,我们把新安装的Nginx取名为nginx_fdfs

# 1. 将Nginx的tar包上传到Linux上

# 2. 解压上传的Nginx文件

# 3. 切换至解压后的Nginx主目录,执行配置操作

cd nginx-1.14.2

./configure --prefix=/usr/local/nginx_fdfs --add-module=/home/soft/fastdfs-nginx-module-master/src

# • prefix是指定nginx安装路径

# • add-module指定fastDFS的nginx模块的源代码路径

# 执行命令进行编译

make

# 执行命令进行安装

make install

# 以上安装Nginx的FastDFS扩展模块注意事项

#我们知道,Nginx的安装需要Linux安装相关的几个库,否则编译会出现错误,这几个库分别是:

# gcc编译器是否安装

# 检查是否安装:

yum list installed | grep gcc

# 执行安装:

yum install gcc -y

# openssl库是否安装

# 检查是否安装:

yum list installed | grep openssl

#执行安装:

yum install openssl openssl-devel -y

#pcre库是否安装

#检查是否安装:

yum list installed | grep pcre

#执行安装:

yum install pcre pcre-devel -y

#zlib库是否安装

#检查是否安装:

yum list installed | grep zlib

#执行安装:

yum install zlib zlib-devel -y

yum install gcc openssl openssl-devel pcre pcre-devel zlib zlib-devel –y

(3)FastDFS的Nginx访问配置

# 将/home/soft/fastdfs-nginx-module-master/src(自己实际存放Nginx扩展模块的目录)目录下的mod_fastdfs.conf文件拷贝到 /etc/fdfs/目录下,这样才能正常启动Nginx

cp /home/soft/fastdfs-nginx-module-master/src/mod_fastdfs.conf /etc/fdfs/

# 修改mod_fastdfs.conf配置文件

base_path=/opt/fastdfs/nginx_mod

tracker_server=192.168.235.128:22122  #可以添加自己的服务器ip地址

url_have_group_name = true

store_path0=/opt/fastdfs/storage/files

# 在/opt/fastdfs/目录下创建nginx_mod目录

mkdir -p /opt/fastdfs/nginx_mod

# 配置Nginx的配置文件

# #拦截请求路径中包含 /group[1-9]/M0[0-9] 的请求,用 fastdfs的Nginx 模块进行转发

location ~ /group[1-9]/M0[0-9] {

     ngx_fastdfs_module;  

}

# ngx_fastdfs_module; #这个指令不是Nginx本身提供的,是扩展模块提供的,根据这个指令找到FastDFS提供的Nginx模块配置文件,然后找到Tracker,最终找到Stroager。

(4)FastDFS的Nginx访问启动与测试

# 1. 测试带有Fastdfs模块的Nginx

[root@withlevi ~]# /usr/local/nginx_fdfs/sbin/nginx -c /usr/local/nginx_fdfs/conf/nginx.conf -t

ngx_http_fastdfs_set pid=14496

nginx: the configuration file /usr/local/nginx_fdfs/conf/nginx.conf syntax is ok

nginx: configuration file /usr/local/nginx_fdfs/conf/nginx.conf test is successful

#2. 启动带有Fastdfs模块的Nginx

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

(5)重启或启动FastDFS服务进程

fdfs_trackerd /etc/fdfs/tracker.conf restart

fdfs_storaged /etc/fdfs/storage.conf restart

当遇到400错误,检查配置/etc/fdfs/mod_fastdfs.conf url_have_group_name=true 该配置表示访问路径中是否需要带有group1,改为true表示路径中需要有group1

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值