FastDFS+Nginx 搭建文件服务器 【Easy Peasy】

写在前面

一个业务系统 总有这样那样的文件 需要保存把。有许多第三方的对象存储,什么阿里腾讯的OSS,COS,还有七牛云啥的。当然也是可以选择没错了,但是可能基于数据安全还有公司成本,或许我们搭建自己的文件服务器也是不错的。不过这样也会多出一些运维成本了。这个取舍就看自己了吧,仁者见仁智者见智。

话不多说,直接开始吧,如果有什么错误的地方,欢迎指正~ 我也还在不断的学习中,大家一起加油!

先来两张架构图:
在这里插入图片描述
在这里插入图片描述

Tracker 就相当于一个主节点,负责管理记录多个Storage节点的元信息。类似于Hadoop HDFS的namenode & datanode 的关系

CentOS软件准备:
Nginx

软件 版本链接 说明
FastDFS fastdfs-5.08.tar.gz 包含Tracker, Storage 和Client 三个组件
FastCommon libfastcommon-master.20170125.zip FastDFS 依赖的基础库,同一个作者写的
FastDFS的Nginx模块 fastdfs-nginx-module-master.20170125.zip 借助Nginx提供HTTP下载服务。由于性能不如Nginx,作者从4.05版本后就取消了内置HTTP服务。
Nginx nginx-1.12.2 HTTP服务
//FastDFS是C开发的,没有libevent包的装一下即可。ps:Libevent 是一个用C语言编写的、轻量级的开源高性能事件通知库
[root@spark001 fastdfs]# yum -y install libevent

安装

1. 基础依赖库: fastcommon

fastcommon 是作者余庆从FastDFS剥离出来的。

$ unzip libfastcommon-master.20170125.zip && cd libfastcommon-master
$ ./make.sh && ./make.sh install

安装成功后,会输出到/usr/include/fastcommon 目录:
在这里插入图片描述

2.安装FastDFS

$ tar zxvf fastdfs-5.08.tar.gz && cd fastdfs-5.08
$ ./make.sh && ./make.sh install

在这里插入图片描述
2.1 安装成功后,会在 /usr/bin 目录输出若干以 fdfs_ 开头的可执行文件:
在这里插入图片描述

2.2 安装成功后,会在 /etc/fdfs 出现三个文件:
在这里插入图片描述

这三个文件我们不用,直接用 fastdfs-5.08/conf 目录下的:

├── tracker.conf  # tracker server 的配置文件
├── storage.conf  # storage server 的配置文件 
├── client.conf  # 客户端的配置文件
├── http.conf  # fastdfs nginx 模块配置文件,如果不需要Nginx提供HTTP下载服务,可以不要。
├── mime.types # fastdfs nginx 模块配置文件,如果不需要Nginx提供HTTP下载服务,可以不要。
├── storage_ids.conf
└── anti-steal.jpg

执行:

[root@spark001 fastdfs-5.08]# cp conf/* /etc/fdfs/

A 启动 Tracker

在启动之前需要对主节点做一些修改
在这里插入图片描述
主要是以下几项:

bind_addr=
port=22122
base_path=/fastdfs/tracker

tracker 服务主要3个配置:服务侦听地址和端口,
base_path是用来存储meta和log的,
分别是 ${base_path}/data 和 ${base_path}/logs 两个子目录

[root@spark001 ~]# mkdir -p /fastdfs/tracker

启动 trackerd

[root@spark001 bin]# fdfs_trackerd /etc/fdfs/tracker.conf restart
[root@spark001 bin]# pwd
/usr/bin
[root@spark001 bin]# 

查看是否启动成功:
在这里插入图片描述

同时,这个时候的日志文件是在:
在这里插入图片描述

B 启动 Storage

由于 Storage 启动的时候,需要主动连接到 Tracker,并周期性的发送心跳,以汇报 storage 的状态信息。

同样,还是要修改一下配置文件:

bind_addr=
port=22122
base_path=/fastdfs/storage
store_path0=/fastdfs/storage/p0
tracker_server=ip:22122

其中:
base_path 是存放数据(比如binlog)和日志的,
store_path0是第一个group的(下面的data目录有256*256的二级子目录),tracker_server 是 trackerd 的地址,以便storage 连接它,并发送心跳。

启动 Storage

[root@spark001 bin]# pwd
/usr/bin
[root@spark001 bin]# fdfs_storaged /etc/fdfs/storage.conf restart
[root@spark001 bin]# 

在这里插入图片描述

C 启动 Client

同样是:去到/etc/fdfs
在这里插入图片描述

修改clinet.conf

base_path=/fastdfs/client
tracker_server=ip:22122

其中 base_path 是指定日志输出路径,
tracker_server 是因为 client首先要请求 trackerd 获取调度信息。

[root@spark001 ~]# mkdir -p /fastdfs/client

启动 clinet
同样,进入到/usr/bin
在这里插入图片描述

使用命令测试一下上传功能:

[root@spark001 bin]# /usr/bin/fdfs_test /etc/fdfs/client.conf upload /root/jy.png 
This is FastDFS client test program v5.08

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.csource.org/ 
for more detail.

[2020-07-01 19:37:37] DEBUG - base_path=/fastdfs/client, connect_timeout=30, 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

[2020-07-01 19:37:37] ERROR - file: tracker_proto.c, line: 48, server: 120.27.243.91:22122, response status 28 != 0
[2020-07-01 19:37:37] ERROR - file: tracker_proto.c, line: 48, server: 120.27.243.91:22122, response status 28 != 0
tracker_query_storage fail, error no: 28, error info: No space left on device
[root@spark001 bin]# 

出现内存空间不足的问题:这里可以调整一下,来到 tracker.conf
在这里插入图片描述

重启:

[root@spark001 tracker]# /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
waiting for pid [15323] exit ...
starting ...
[root@spark001 tracker]# 

再次测试上传:
在这里插入图片描述
上传过程会涉及到先跟trackerd交互,然后跟storaged交互,最后返回文件的信息

发现这个时候,图片已经是上传成功了。
在这里插入图片描述

接下来,我们借用Nginx 使得我们可以通过其提供HTTP服务进行文件的访问$下载。

先解压 fastdfs-nginx-module-master.20170125.zip

unzip fastdfs-nginx-module-master.20170125.zip && cd fastdfs-nginx-module-master

安装Nginx

安装前置依赖
yum -y install gcc gcc-c++ autoconf automake make
yum -y install zlib zlib-devel openssl openssl--devel pcre pcre-devel
解压安装
tar -zxvf nginx-1.12.2.tar.gz && cd nginx-1.12.2
./configure --add-module=/root/softs/fastdfs/fastdfs-nginx-module-master/src
make && make install

安装好之后:
在这里插入图片描述
拷贝 mod_fastdfs.conf 这个文件到 /etc/fdfs/
文件位置如下:

[root@spark001 src]# pwd
/root/softs/fastdfs/fastdfs-nginx-module-master/src
[root@spark001 src]# ll
total 76
-rw-r--r-- 1 root 0 33239 Jan 10  2017 common.c
-rw-r--r-- 1 root 0  3479 Jan 10  2017 common.h
-rw-r--r-- 1 root 0   902 Jan 10  2017 config
-rw-r--r-- 1 root 0  3725 Jan 10  2017 mod_fastdfs.conf
-rw-r--r-- 1 root 0 28643 Jan 10  2017 ngx_http_fastdfs_module.c
[root@spark001 src]# 

在这里插入图片描述

修改拷贝过去的文件:

base_path=/fastdfs/tmp
tracker_server=ip:22122
group_name=group1
url_have_group_name = true

其中 base_path 是指定日志输出路径,
url_have_group_name 是指是否需要包含group_name ,默认false

在这里插入图片描述

再次回到Nginx这边进行配置

cd /usr/local/nginx/conf
vim nginx.conf

新增:

 server {
    
    
         listen       88;
         server_name     120.27.243.x;

         location /group1/M00 {
    
    
            ngx_fastdfs_module;
         }
    }   

保存退出,启动nginx
在这里插入图片描述
在这里插入图片描述

验证:
在这里插入图片描述

浏览器打开ip:888
在这里插入图片描述
要想在浏览器上看见刚才上传的图片,需要修改一个配置
在这里插入图片描述
修改之后:重启各个服务

/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
/usr/local/nginx/sbin/nginx -s reload

浏览器打开http://ip:88/group1/M00/00/00/rBCc_V78d-CAS1zsAASVqq9IuEg601.png
在这里插入图片描述

好啦,到这里成功搭建了,这样我们就可以在后端代码里面将文件服务器嵌进去了~

其中一些点,有时间,我再深入一下吧。

谢谢~

猜你喜欢

转载自blog.csdn.net/liuge36/article/details/107069417