一个业务系统 总有这样那样的文件 需要保存把。有许多第三方的对象存储,什么阿里腾讯的OSS,COS,还有七牛云啥的。当然也是可以选择没错了,但是可能基于数据安全还有公司成本,或许我们搭建自己的文件服务器也是不错的。不过这样也会多出一些运维成本了。这个取舍就看自己了吧,仁者见仁智者见智。
话不多说,直接开始吧,如果有什么错误的地方,欢迎指正~ 我也还在不断的学习中,大家一起加油!
先来两张架构图:
Tracker 就相当于一个主节点,负责管理记录多个Storage节点的元信息。类似于Hadoop HDFS的namenode & datanode 的关系
CentOS软件准备:
软件 | 版本链接 | 说明 |
---|---|---|
FastDFS | fastdfs-5. | 包含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
fastcommon 是作者余庆从FastDFS剥离出来的。
$ unzip libfastcommon-master.20170125.zip && cd libfastcommon-master
$ ./make.sh && ./make.sh install
安装成功后,会输出到/usr/include/fastcommon 目录:
$ tar zxvf fastdfs-5. && cd fastdfs-5.08
$ ./make.sh && ./make.sh install
2.1 安装成功后,会在 /usr/bin 目录输出若干以 fdfs_ 开头的可执行文件:
2.2 安装成功后,会在 /etc/fdfs 出现三个文件:
这三个文件我们不用,直接用 fastdfs-5.08/conf 目录下的:
├── f # tracker server 的配置文件
├── f # storage server 的配置文件
├── f # 客户端的配置文件
├── f # fastdfs nginx 模块配置文件,如果不需要Nginx提供HTTP下载服务,可以不要。
├── pes # fastdfs nginx 模块配置文件,如果不需要Nginx提供HTTP下载服务,可以不要。
├── f
└── anti-steal.jpg
执行:
[root@spark001 fastdfs-5.08]# cp conf/* /etc/fdfs/
在启动之前需要对主节点做一些修改
主要是以下几项:
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/f restart
[root@spark001 bin]# pwd
/usr/bin
[root@spark001 bin]#
查看是否启动成功:
同时,这个时候的日志文件是在:
由于 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/f restart
[root@spark001 bin]#
同样是:去到/etc/fdfs
修改f
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/f upload /root/jy.png
This is FastDFS client test program v5.08Copyright (C) 2008, Happy Fish / YuQingFastDFS 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 /
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]#
出现内存空间不足的问题:这里可以调整一下,来到 f
重启:
[root@spark001 tracker]# /usr/bin/fdfs_trackerd /etc/f 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. && cd nginx-1.12.2
./configure --add-module=/root/softs/fastdfs/fastdfs-nginx-module-master/src
make && make install
安装好之后:
拷贝 f 这个文件到 /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 f
-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
f
新增:
server {listen 88;server_name 120.27.243.x;location /group1/M00 {ngx_fastdfs_module;}}
保存退出,启动nginx
验证:
浏览器打开ip:888
要想在浏览器上看见刚才上传的图片,需要修改一个配置
修改之后:重启各个服务
/usr/bin/fdfs_trackerd /etc/f restart
/usr/bin/fdfs_storaged /etc/f restart
/usr/local/nginx/sbin/nginx -s reload
浏览器打开ip:88/group1/M00/00/00/rBCc_V78d-CAS1zsAASVqq9IuEg601.png
好啦,到这里成功搭建了,这样我们就可以在后端代码里面将文件服务器嵌进去了~
其中一些点,有时间,我再深入一下吧。
谢谢~
本文发布于:2024-01-28 19:33:59,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/17064416449766.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |