FastDFS的架构的安装配置

发布于 2021-10-18  8.2k 次阅读


一,FastDFS的概述和整体架构

一,FastDfs概述

FastDFS是一个开源的轻量级分布式文件系统,为互联网应用量身定做,简单,灵活,高效,采用C语言开发,由阿里开发并开源

FastDFS的功能:

  • 文件存储
  • 文件同步
  • 文件备份
  • 文件访问(上传,下载,删除)

FastDFS解决了大容量文件存储问题,特别适合以文件为载体的在线服务,如:视频网站,图片网站,文档网站等

FastDFS有较好的冗余备份,线性扩容机制,并适合高可用,高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传下载等服务

二,FastDFS整体架构

FastDFS文件系统由两大部分构成:

1,客户端

客户端指调用服务端的程序,比如java程序连接FastDFS,FastDFS提供了专有的API访问,提供了c,java,php等操作API,用来访问和操作FastDFS文件系统

2,服务端

服务端分两分部分:

  • 跟踪器(tracker)
  • 存储节点(storage)

跟踪器(Tracker):主要做调度工作,在内存中记录集群中的存储节点状态信息,是客户端和存储节点的中间枢钮,因为信息存储在内存中所以Tracker Server的性能非常高,一个较大的集群(比如上百个服务器)只要有3台就足够了

存储节点(Storage):用于存储文件,包括文件和文件属性到可以存储到服务器磁盘上,完成文件管理的所有功能:文件存储,文件同步,提供文件访问

注:跟踪器有点类似于zk中Leader,存储节点有点类似于zk的Fallower

二,FastDFS的安装配置

一,安装前置依赖包

需要三个前置依赖包:

  • gcc:c语言编译器
  • libevent: 轻量级的开源高性能事件驱动库
  • libevent-devel:配合libevennt使用

检查本地是否安装:

#检查gcc是否安装
yum list installed | grep gcc
#检查libevennt是否安装
yum list installed | grep libevent
#检查libevennt-devel是否安装
yum list installed | grep libevent-devel

安装命令:

yum install -y gcc libevent libevent-devel

二,安装FastDFS

安装FastDFS想要两个安装包文件:

  • fastdfs
  • libfastcommon:fastdfs公共函数库

fastdfs下载地址:https://github.com/happyfish100/fastdfs/releases

libfastcommon下载地址:https://github.com/happyfish100/libfastcommon/releases

① 上传fastdfs和libfastcommon安装包

命令:rz -y
#也可以使用软件上传

② 解压两个安装包

#解压fastdfs
tar -zxvf fastdfs-6.06.tar.gz
#解压libfastcommon
tar -zxvf libfastcommon-1.0.52.tar.gz

③ 编译安装

#进入libfastcommon-master目录编译安装
./make.sh
./make.sh install
#进入fastdfs-master目录编译安装
./make.sh
./make.sh install

④ cp源文件中的http.conf和mime.types到配置文件中

cp /home/fastdfs-6.06/conf/http.conf /etc/fdfs
cp /home/fastdfs-6.06/conf/mime.types /etc/fdfs
安装位置:
1,启动命令目录:/usr/bin

2,配置文件目录:/etc/fdfs

注:完成这三步就算FastDFS安装成功了,但要运行还需要配置

三,配置FastDFS

配置FastDFS主要配置两个文件:

  • storage.conf:配置节点
  • tracker.conf:配置跟踪器

1,配置tracker.conf文件:配置较多,但只需要配置三处

port=22122 #tracker本地服务端口号
base_path=/opt/fastdfs/tracker #tracker日志文件的保存目录,自定义
http.server_port=8181 #默认端口是8888,如果端口占用可以自定义修改

2,配置storage.conf文件:配置三处

port = 23000 #storage本地服务端口好
base_path = /opt/fastdfs/storage #storage #日志文件存放位置
store_path0 = /opt/fastdfs/storage/files  #实际存储文件位置
tracker_server = 192.168.68.133:22122 #tracker服务地址,IP需修改为本地IP,端口号必须指定track的端口号默认是22122

注:存储文件目录必须自己先创建,FastDFS不会自动创建,不然会报错

四,启动和关闭FastDFS

1,启动FastDFS

fdfs_trackerd /etc/fdfs/tracker.conf start #启动tracker跟踪器
fdfs_storaged /etc/fdfs/storage.conf start  #启动storager存储节点

2,查看进程是否启动成功

ps -ef |grep fdfs

3,关闭FastDFS

fdfs_trackerd /etc/fdfs/tracker.conf stop #关闭tracker跟踪器
fdfs_storaged /etc/fdfs/storage.conf stop  #关闭storager存储节点

插述:初次启动成功后,它会在指定的store_path0目录中创建一个data目录,这data里面有255目录,这些目录的子目录也是255个目录(总共65025个目录),他们分别用来存储文件

三,FastDFS安装Nginx拓展模块并配置HTTP访问

在文件上传的时候,上传成功FastDFS提供了URL访问,提供URL路径我们可以直接请求文件,但实际访问时是不行的,FastDFS只能安装了Nginx拓展模块才能进行正常访问

一,前期准备

① FastDFS使用Nginx拓展模块需要提前先安装好Nginx,之前写过Nginx安装

Nginx安装博客地址:http://wql.luoqin.ltd/2021/08/20/nginx%e6%a6%82%e5%bf%b5%e7%90%86%e8%ae%ba%e7%af%87%e4%b8%80/

② 下载FastDFS的Nginx拓展模块(fastdfs-nginx-module)并上传到Linux

下载地址:https://github.com/happyfish100/fastdfs-nginx-module/releases

上传:

rz -y
#其他软件上传也可以

二,安装配置fastdfs-nginx-module模块

① 解压fastdfs-nginx-module-1.21.tar.gz包

tar -zxvf fastdfs-nginx-module-1.21.tar.gz

② 配置./fastdfs-nginx-module-1.21/src下的mod_fastdfs.conf文件

#修改四处即可
base_path=/opt/fastdfs/nginx_mod #日志文件位置自定义,必须提前创建
tracker_server=192.168.68.133:22122  #指定本地tracker的地址(IP:Port)
url_have_group_name = ture #URL是否包含组名,ture开启
store_path0=/opt/fastdfs/storage/files #storage存储节点的存放路径

③ 拷贝mod_fastdfs.conf文件到fastdfs的配置文件目录

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

三,配置Nginx

① Nginx添加fastdfs-nginx-module拓展模块

#进入nginx源码目录(不是安装目录),--add-module=添加fastdfs-nginx-module模块安装后的src目录位置
./configure --add-module=/home/fastdfs-nginx-module-1.21/src

② 编译源文件(竟然nginx源文件目录)

make
③ 将sbin目录的nginx进行备份
mv nginx nginxwql

④ 拷贝make编译后的objs下的nginx文件到/usr/local/nginx/sbin目录中

#/home/nginx-1.18.0/objs/nginx是我安装的源码目录
cp /home/nginx-1.18.0/objs/nginx /usr/local/nginx/sbin
⑤ 对nginx进行更新(进入源码目录才能更新)
make upgrade

⑥ 配置nginx.conf文件

    server {
        listen 80;#监听的端口号
        server_name 192.168.68.133;#填写本地主机名
        location ~/group[1-9]/M0[0-9]{
         ngx_fastdfs_module;
        }
}

四,测试是否成功

① 启动tracker和storage

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

② 启动nginx

/usr/local/nginx/sbin/nginx
注:必须先启动tracker和storage再启动nginx,不然会包ngx_http_fastdfs_set pid=8543错误

③ 创建一个文件并上传

#创建文件
echo Hi,FastDFS HTTP Call on >/home/fdfs_http.txt
#上传文件
fdfs_test /etc/fdfs/client.conf upload /home/fdfs_http.txt

④ 通过url访问

五,FastDFS的Nginx拓展模块的运行流程

运行流程:

  1.  浏览器访问上传文件URL(例:http://192.168.68.133/group1/M00/00/00/wKhEhWFoW0GAWfIaAAAAGIwKiWc873.txt)
  2. Nginx代理请求,并调用fastdfs-nginx-module模块
  3. fastdfs-nginx-module模块将文件地址发送给Tracker跟踪器
  4. Storage寻址文件,并返回文件流
  5. Nginx将文件流返回给浏览器

四,FastDFS本地测试上传下载删除

这种本地测试上传下载基本不会用到,一般都是操作API的方式

一,配置本地测试

使用FastDFS本地进行测试,需要修改client.conf配置文件

#client日志文件存放位置
base_path = /opt/fdfs/client
#tracker跟踪器地址
tracker_server = 192.168.68.133:22122

测试上传,下载,删除命令:fdfs_test  client配置文件地址 参数 文件地址

参数:

  • upload:上传文件
  • download:下载文件
  • delete:删除文件
  • setmeta:设置文件属性
  • getmeta:获取文件属性

二,文件上传下载删除

一,文件上传

① 创建一个文件

#创建一个文本文件
echo FastDFS Holle World! > fdfs_test.txt

② 上传文件:fdfs_test client配置文件 upload 文件地址 

#上传fdfs_test
fdfs_test /etc/fdfs/client.conf upload /home/fdfs_test.txt

④ 上传成功返回信息

group_name=group1, ip_addr=192.168.68.133, port=23000 #group为分区,因为只有一个磁盘只设置了一个分区就是group1
storage_upload_by_filename

#remote_filename为上传后的地址 M00表示第几个磁盘(默认只有一个磁盘) 后面就是上传后的文件地址路径
group_name=group1, remote_filename=M00/00/00/wKhEhWFn1oGAY2PaAAAAFRy78CA444.txt 

source ip address: 192.168.68.133
file timestamp=2021-10-14 00:04:33
file size=21
file crc32=482078752

#url访问地址,需要配置nginx才能访问
example file url: http://192.168.68.133/group1/M00/00/00/wKhEhWFn1oGAY2PaAAAAFRy78CA444.txt

storage_upload_slave_by_filename

#备份文件地址(使用的是默认备份),M00磁盘,后面就是备份路径
group_name=group1, remote_filename=M00/00/00/wKhEhWFn1oGAY2PaAAAAFRy78CA444_big.txt
source ip address: 192.168.68.133
file timestamp=2021-10-14 00:04:33
file size=21
file crc32=482078752

#备份文件url访问地址,需要配置nginx才能访问
example file url: http://192.168.68.133/group1/M00/00/00/wKhEhWFn1oGAY2PaAAAAFRy78CA444_big.txt

⑤ 通过信息寻找上传文件

二,上传文件下载和删除

下载文件:fdfs_test <config_file> download <group_name> <remote_filename
#group和remote_filename在上传成功后的返回信息中可以找到
fdfs_test /etc/fdfs/client.conf download group1 M00/00/00/wKhEhWFn1oGAY2PaAAAAFRy78CA444.txt

删除文件:fdfs_test <config_file> delete <group_name> <remote_filename>

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

如果有备份文件还需要手动将备份删除:

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