FastDFS 搭建分布式文件管理系统
FastDFS 简介
FastDFS 是一个开源的高性能分布式文件系统(Distributed File System)。它的主要功能包括:文件存储、文件同步和文件访问以及高容量和负载平衡。主要解决了海量数据存储问题,特别适合以中小文件(建议范围:4KB < file_size < 500MB)为载体的在线服务。
FastDFS 开源地址:https://github.com/happyfish100/fastdfs
由于网络上已有很多详细的关于 FastDFS 的介绍,故此处不再赘述。请查看参考文章中的第 1、2 条。
FastDFS 架构图
FastDFS 上传流程
FastDFS 下载流程
安装 FastDFS
配置防火墙
本篇文章是基于 CentOS v8.2.2004 版本,以下操作均为单机环境,单机 IP 地址为 192.168.61.128。在安装 FastDFS 之前,需要先进行防火墙的设置。防火墙的相关命令如下:
|
|
下载安装 libfastcommon
libfastcommon 是从 FastDFS 抽取出来的公共 c 函数库。
|
|
libfastcommon.so 安装到了 /usr/lib64/libfastcommon.so
,但是 FastDFS 主程序设置的 lib 目录是 /usr/local/lib
,所以需要创建软链接。
|
|
下载安装 FastDFS
|
|
安装完成之后,服务脚本存储在 /etc/init.d/
中,详细文件如下:
/etc/init.d/fdfs_storaged
/etc/init.d/fdfs_tracker
默认配置文件存储在 /etc/fdfs/
中,详细文件如下:
/etc/fdfs/client.conf.sample
/etc/fdfs/storage.conf.sample
/etc/fdfs/tracker.conf.sample
命令工具存储在 /usr/bin/
中,详细文件如下:
fdfs_appender_test
fdfs_appender_test1
fdfs_append_file
fdfs_crc32
fdfs_delete_file
fdfs_download_file
fdfs_file_info
fdfs_monitor
fdfs_regenerate_filename
fdfs_storaged
fdfs_test
fdfs_test1
fdfs_trackerd
fdfs_upload_appender
fdfs_upload_file
stop.sh
restart.sh
配置 FastDFS Tracker 服务
修改配置文件
从上文可知,配置文件在 /etc/fdfs/
中,我们需要拷贝一份并进行一些修改。
|
|
需要修改的部分如下:
|
|
根据上述配置,创建配置中的目录
|
|
启动 Tracker 服务
初次成功启动,会在 base_path 即 /home/fastdfs/tracker
下创建 data、logs 两个目录。启动命令如下:
|
|
启动后,可以通过 netstat 命令查看是都启动成功,若得到以下类似输出,22122 端口处于监听状态,则表示 Tracker 服务安装并启动成功。
|
|
## 输出内容
tcp 0 0 0.0.0.0:22122 0.0.0.0:* LISTEN 6220/fdfs_trackerd
同理,可以通过下列命令关闭 Tracker 服务或者设置 Tracker 开机自启:
|
|
配置 FastDFS Storage 服务
修改配置文件
与配置 Tracker 服务类似,首先我们也需要拷贝样例配置文件并进行相应修改。
|
|
需要修改的部分如下:
|
|
根据上述配置,创建配置中的目录
|
|
启动 Storage 服务
启动 Storage 前确保 Tracker 是启动的。初次启动成功,会在 base_path 即 /home/fastdfs/storage/
目录下创建 data、logs 两个目录。启动命令如下:
|
|
启动后,可以通过下列命令查看 Storage 服务是否启动成功。若输出结果与下列输出类似,23000 端口正处于监听状态,则 Storage 服务启动成功。
|
|
## 输出内容
tcp 0 0 0.0.0.0:23000 0.0.0.0:* LISTEN 6257/fdfs_storaged
tcp 0 0 0.0.0.0:22122 0.0.0.0:* LISTEN 6220/fdfs_trackerd
同理,可以通过下列命令关闭 Tracker 服务或者设置 Tracker 开机自启:
|
|
此时我们可以在 store_path0 目录下看到 Storage 服务自动创建的 N*N 个子目录
|
|
## 输出内容
00 0A 14 1E 28 32 3C 46 50 5A 64 6E 78 82 8C 96 A0 AA B4 BE C8 D2 DC E6 F0 FA
01 0B 15 1F 29 33 3D 47 51 5B 65 6F 79 83 8D 97 A1 AB B5 BF C9 D3 DD E7 F1 FB
02 0C 16 20 2A 34 3E 48 52 5C 66 70 7A 84 8E 98 A2 AC B6 C0 CA D4 DE E8 F2 FC
03 0D 17 21 2B 35 3F 49 53 5D 67 71 7B 85 8F 99 A3 AD B7 C1 CB D5 DF E9 F3 FD
04 0E 18 22 2C 36 40 4A 54 5E 68 72 7C 86 90 9A A4 AE B8 C2 CC D6 E0 EA F4 FE
05 0F 19 23 2D 37 41 4B 55 5F 69 73 7D 87 91 9B A5 AF B9 C3 CD D7 E1 EB F5 FF
06 10 1A 24 2E 38 42 4C 56 60 6A 74 7E 88 92 9C A6 B0 BA C4 CE D8 E2 EC F6
07 11 1B 25 2F 39 43 4D 57 61 6B 75 7F 89 93 9D A7 B1 BB C5 CF D9 E3 ED F7
08 12 1C 26 30 3A 44 4E 58 62 6C 76 80 8A 94 9E A8 B2 BC C6 D0 DA E4 EE F8
09 13 1D 27 31 3B 45 4F 59 63 6D 77 81 8B 95 9F A9 B3 BD C7 D1 DB E5 EF F9
256
256
文件上传测试
修改配置文件
与配置 Storage 服务类似,首先我们也需要拷贝客户端样例配置文件并进行相应修改。
|
|
需要修改的部分如下:
|
|
上传图片测试
执行下列命令,尝试上传一张图片到 FastDFS 中:
|
|
上传成功后,会输出文件 ID:group1/M00/00/00/wKg9gF-f0aKAUJAlAARra4mLMhc390.jpg
返回的文件 ID 由 group、存储目录、两级子目录、fileid、文件后缀名(由客户端指定,主要用于区分文件类型)拼接而成。
配置 Nginx
安装 Nginx 的相关操作请查看文章 初识 Nginx,此处不再赘述。
修改配置
经过上述操作之后,文件已经可以通过命令行的方式上传到 FastDFS 中,但还无法下载,此时我们需要使用 Nginx 来实现下载功能。修改 Nginx 配置文件,在 server 组内添加以下内容:
|
|
然后重启 Nginx,访问服务器 ip/fileid 进行测试,根据上述例子,此处访问 http://192.168.61.128/group1/M00/00/00/wKg9gF-f0aKAUJAlAARra4mLMhc390.jpg
测试结果如下图,可以看到已经访问成功,HTTP 状态码返回 200。
配置 fastdfs-nginx-module 模块
模块简介
fastdfs-nginx-module 可以重定向文件链接到源服务器,避免由于 Storage 服务器复制延迟导致文件无法访问而产生的错误。
下载解压
|
|
为 Nginx 添加模块
首先进入 Nginx 源目录,然后执行 ./configure
命令,具体命令如下:
|
|
其中,/usr/local/software/nginx-1.18.0
为 Nginx 源目录,--prefix
参数指定新版本生成的目录,--add-module
参数表示添加模块,$YOUR_PATH
需要手动替换为 fastdfs-nginx-module 模块的文件路径,本例中为 /usr/local/software/fastdfs-nginx-module
。
安装好之后可以通过以下命令查看 Nginx 模块,如果输出与下列内容类似,则表示模块添加成功。
|
|
## 输出内容
nginx version: nginx/1.18.0
built by gcc 8.3.1 20191121 (Red Hat 8.3.1-5) (GCC)
configure arguments: --prefix=/usr/local/nginx/ --add-module=/usr/local/software/fastdfs-nginx-module/src
修改 Nginx 配置
修改 nginx.conf,在 server 中做出如下修改:
|
|
修改 fastdfs-nginx-module 配置
复制 fastdfs-nginx-module 源码中的配置文件到 /etc/fdfs
目录,兵做以下修改。
|
|
|
|
复制 FastDFS 的部分配置文件到 /etc/fdfs
目录
|
|
测试
配置完成之后,我们先启动 Nginx 服务,并观察输出内容,如果与下列输出类似,则表示配置成功。
|
|
## 输出内容
ngx_http_fastdfs_set pid=11648
此时我们可以在浏览器中访问前文中上传的文件,能下载文件则表示 fastdfs-nginx-module 模块安装成功。注意和和前文中直接使用 Nginx 路由访问不同的是,这里配置 fastdfs-nginx-module 模块,可以重定向文件链接到源服务器取文件。访问结果如下图所示。
至此,FastDFS 搭建分布式文件管理系统就初步完成了,在下一篇文章中,将介绍如何在客户端上通过 Java 来实现文件的上传和下载。