FastDFS+Nginx(单点部署)

一、什么是FastDFS

FastDFS是由淘宝的余庆先生所开发,是一个轻量级、高性能的开源分布式文件系统,用纯C语言开发,包括文件存储、文件同步、文件访问(上传、下载)、存取负载均衡、在线扩容、相同内容只存储一份等功能,适合有大容量存储需求的应用或系统。做分布式系统开发时,其中要解决的一个问题就是图片、音视频、文件共享的问题,分布式文件系统正好可以解决这个需求。同类的分布式文件系统有谷歌的GFS、HDFS(Hadoop)、TFS(淘宝)等。

二、FastDFS系统架构:

FastDFS 架构包括 Tracker server 和 Storage server。客户端请求 Tracker server 进行文 件上传、下载,通过 Tracker server 调度最终由 Storage server 完成文件上传和下载。

Tracker server 作用是负载均衡和调度,通过 Tracker server 在文件上传时可以根据一些 策略找到 Storage server 提供文件上传服务。可以将 tracker 称为追踪服务器或调度服务器。

Storage server 作用是文件存储,客户端上传的文件最终存储在 Storage 服务器上, Storageserver 没有实现自己的文件系统而是利用操作系统 的文件系统来管理文件。可以将 storage 称为存储服务器。
在这里插入图片描述
服务端两个角色:

Tracker:管理集群,tracker 也可以实现集群。每个 tracker 节点地位平等。收集 Storage 集群的状态。
FastDFS集群中的Tracker server可以有多台,Tracker server之间是相互平等关系同时提供服务,Tracker server不存在单点故障。客户端请求Tracker server采用轮询方式,如果请求的tracker无法提供服务则换另一个tracker。

Storage:实际保存文件 Storage 分为多个组,每个组之间保存的文件是不同的。每个组内部可以有多个成员,组成员内部保存的内容是一样的,组成员的地位是一致的,没有主从的概念。
Storage集群采用了分组存储方式。storage集群由一个或多个组构成,集群存储总容量为集群中所有组的存储容量之和。一个组由一台或多台存储服务器组成,组内的Storage server之间是平等关系,不同组的Storage server之间不会相互通信,同组内的Storage server之间会相互连接进行文件同步,从而保证同组内每个storage上的文件完全一致的。一个组的存储容量为该组内存储服务器容量最小的那个,由此可见组内存储服务器的软硬件配置最好是一致的。
采用分组存储方式的好处是灵活、可控性较强。比如上传文件时,可以由客户端直接指定上传到的组也可以由tracker进行调度选择。一个分组的存储服务器访问压力较大时,可以在该组增加存储服务器来扩充服务能力(纵向扩容)。当系统容量不足时,可以增加组来扩充存储容量(横向扩容)。

三、文件上传流程

在这里插入图片描述
客户端上传文件后存储服务器将文件ID返回给客户端,此文件ID用于以后访问该文件的索引信息。文件索引信息包括:组名,虚拟磁盘路径,数据两级目录,文件名。
● 组名:文件上传后所在的storage组名称,在文件上传成功后有storage服务器返回,需要客户端自行保存。

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

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

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

四、文件下载流程

在这里插入图片描述
tracker根据请求的文件路径即文件ID 来快速定义文件。
比如请求下边的文件:
group1/M00/00/00/wKgAeVzC1fuAUTWjAADa-k_GxyQ734.jpg

● 通过组名tracker能够很快的定位到客户端需要访问的存储服务器组是group1,并选择合适的存储服务器提供客户端访问。

● 存储服务器根据“文件存储虚拟磁盘路径”和“数据文件两级目录”可以很快定位到文件所在目录,并根据文件名找到客户端需要访问的文件。

五、FastDFS单机部署及Nginx的配置

1.服务器规划

服务器地址用途
192.168.0.121跟踪服务器(Tracker Server)、存储服务器(Storage Server)

系统:centos7
用户:root

2.相关软件安装包

libfastcommon-1.0.7.tar.gz
FastDFS_v5.05.tar.gz
fastdfs-nginx-module_v1.16.tar.gz
nginx-1.13.11.tar.gz

3.下载并安装FastDFS依赖包libfastcommon
libfastcommon是FastDFS官方提供的,libfastcommon包含了FastDFS运行所需要的一些基础库。
我发现官网进不去了,所以就在网上下载了一个放到了github上,地址为:
https://github.com/wangchaoforever/peizhiwenjian/blob/master/fastdfs/libfastcommon-1.0.7.tar.gz
解压、编译并安装。

tar -zxvf libfastcommon-1.0.7.tar.gz -C /usr/local/src/
cd /usr/local/src/libfastcommon-1.0.7/
./make.sh
./make.sh  install

4.下载并安装FastDFS
官网:https://sourceforge.net/projects/fastdfs/files
我选择的版本FastDFS_v5.03.tar.gz。

tar -zxvf FastDFS_v5.08.tar.gz 
cd FastDFS
./make.sh
./make.sh install

默认安装的文件及目录:
1)服务脚本:

ls /etc/init.d/ | grep fdfs

2)样例配置文件

ls /etc/fdfs/

3)命令行工具

ls /usr/bin |grep fdfs

5.配置跟踪服务(tracker server)
1)拷贝tracker server和client端样例配置文件并重命名

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

2)编辑tracker server配置文件tracker.conf,需要修改内容如下:
vim /etc/fdfs/tracker.conf

disabled=false                    # 启用配置文件
port=22122                        # tracker服务器端口(默认22122)
base_path=/data/fastdfs/tracker   # 存储日志和数据的根目录

3)编辑client端的配置文件client.conf,需要修改内容如下:
vim /etc/fdfs/client.conf

base_path=/data/fastdfs/tracker
tracker_server=192.168.0.121:22122(这是我的地址)

4)创建tracker server数据目录

mkdir -p /data/fastdfs/tracker

5)测试启动tracker server
启动成功会自动在/data/fastdfs/tracker目录新建data和logs目录,然后使用netstat查看端口是否起来

fdfs_trackerd /etc/fdfs/tracker.conf restart
netstat -ntlp | grep trackerd

6)tracker server的关闭命令

fdfs_trackerd /etc/fdfs/tracker.conf stop

6.配置存储服务(storage server)
1)拷贝storage server样例配置文件并重命名

cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf

2)编辑storage server配置文件storage.conf,需要修改内容如下:
vim /etc/fdfs/storage.conf

disabled=false                      # 启用配置文件
port=23000                          # storage服务端口
base_path=/data/fastdfs/storage     # 数据和日志文件存储根目录
tracker_server=192.168.0.121:22122  # tracker服务器IP和端口
store_path0=/data/fastdfs/storage   # 第一个存储目录
http.server_port=8888               # http访问文件的端口

http.server_port=8888 指的是在tracker服务器上启动http服务进程,如:apache或者nginx 启动时所监听的端口。
3)创建storage server数据目录

mkdir -p /data/fastdfs/storage

4)测试启动storage server
启动成功会自动在/data/fastdfs/tracker目录新建data和logs目录(启动storage server的前提是tracker server必须事先已启动)

fdfs_storaged /etc/fdfs/storage.conf restart
netstat -ntlp | grep storage

5)storage server的关闭命令

fdfs_storaged /etc/fdfs/storage.conf stop

7.文件上传测试
把/root/下的test.jpg上传,返回文件ID就说明文件已经上传成功

fdfs_upload_file /etc/fdfs/client.conf test.jpg 

在这里插入图片描述
8.FastDFS和nginx整合
1)在tracker上安装nginx
在每个tracker上安装nginx,主要目的是做负载均衡及实现高可用。如果只有一台tracker服务器可以不配置nginx。所以此处不用配置Nginx。
2)在Storage上下载并配置fastdfs-nginx-module模块
需要安装fastdfs-nginx-module模块。

fastdfs-nginx-module 作用说明
FastDFS通过Tracker服务器,将文件放在Storage服务器存储,但是同组存储服务器之间需要进入文件复制,有同步延迟的问题。假设Tracker服务器将文件上传到了192.168.4.125,上传成功后文件ID已经返回给客户端。此时FastDFS存储集群机制会将这个文件同步到同组存储192.168.4.126,在文件还没有复制完成的情况下,客户端如果用这个文件ID在192.168.4.126上取文件,就会出现文件无法访问的错误。而fastdfs-nginx-module可以重定向文件连接到源服务器取文件,避免客户端由于复制延迟导致的文件无法访问错误。

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

下载解压到了/usr/local/fastdfs-nginx-module目录下
然后修改config文件

vim /usr/local/fastdfs-nginx-module/src/config
将/usr/local/路径改为/usr/,或者直接执行命令:%s+/usr/local/+/usr/+g批量替换

拷贝fastdfs-nginx-module模块中配置文件到/etc/fdfs目录中并编辑

cp /usr/local/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs
vim /etc/fdfs/mod_fastdfs.conf

修改内容如下:
connect_timeout=10
base_path=/tmp                        # 默认为/tmp
tracker_server=192.168.0.121:22122    # 注意:几个配置文件中的TrackerServer都是一样的
storage_server_port=23000             # 默认配置为23000
url_have_group_name = true
store_path0=/data/fastdfs/storage
group_name=group1                     # 默认配置为group1

3)安装nginx

tar -zxvf nginx-1.13.11.tar.gz
yum install -y pcre-devel openssl openssl-devel
cd nginx-1.13.11
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-pcre --with-http_realip_module --add-module=/usr/local/fastdfs-nginx-module/src
make && make install

4)拷贝FastDFS中的部分配置文件到/etc/fdfs目录中

cp /usr/local/FastDFS/conf/http.conf /etc/fdfs/
cp /usr/local/FastDFS/conf/mime.types /etc/fdfs/

5)配置nginx
vim /usr/local/nginx/conf/nginx.conf
需要增加的内容如下:

server {
            listen       8888;
            server_name  localhost;
            location ~/group[0-9]/ {
                ngx_fastdfs_module;
            }
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
            root   html;
            }
        }

说明:
a、"user root"是解决下载操作时报404的问题

b、8888端口号与/etc/fdfs/storage.conf中的http.server_port=8888相对应

c、storage对应有多个group的情况下,访问路径带group名称,例如:/group1/M00/00/00/**,对应nginx配置:

location ~/group[0-9]/ {
    ngx_fastdfs_module;
}

启动Nginx服务后,访问之前已经上传的图片。
在这里插入图片描述
参考文章:
https://www.jianshu.com/p/3f24bb9bb742

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值