Why FastDFS?

FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。

FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。

一、FastDFS架构图

  1. Tracker cluster中各个tracker server相互独立,不进行相互通信。
  2. Storage cluster中各个storage组(Volume1,Volume2…)相互独立,不进行相互通信,也就是说各个组之间保存的数据是不相同的。但是各个组中的storage server之间是属于互相备份的关系,也就是说storage server之间保存相同的数据。
  3. 每个storage server会启动一个单独的线程主动向Tracker cluster中每个tracker server报告其状态信息,包括磁盘使用情况,文件同步情况及文件上传下载次数统计等信息。

二、文件上传时序图

4. Client通过Tracker server将文件上传到Storage server。
5. Tracker server向Client返回一台可用的Storage server的IP地址和端口号。
6. Client直接通过Tracker server返回的IP地址和端口与其中一台Storage server建立连接并进行文件上传。
7. 上传完成,Storage server返回Client一个文件ID(例如group1/M00/00/00/wKhnd1wkvtOAPgd5AADmHHh3iFk538.jpg),文件上传结束。

三、文件下载时序图

9. Client通过Tracker server下载指定Storage组中某个Storage server上的某个文件(文件名包括Storage组名称)。
10. Tracker server向Client返回一台可用的Storage server的IP地址和端口号。
11. Client直接通过Tracker server返回的IP地址和端口与其中一台Storage server建立连接并进行文件下载。

安装FastDFS

一、相关软件清单

  • fastdfs-5.11
  • nginx-1.15.8
  • fastdfs-nginx-module-V1.20
  • libfastcommon

二、服务器规划

服务器名称 IP地址和端口 备注
fastdfs-tracker 192.168.103.118:22122 跟踪服务器/调度服务器
fastdfs-storage 192.168.103.118:23000 存储服务器

FastDFS配置总预览

所有的配置都再这里了,基本只需要再修改一下本机的ip就行。这里给出下载链接,有需要的请自取并修改,然后在下面的操作中,无需copy demo,直接copy这些配置也是可以的,省一点时间。。

提取码: hjj2 链接: https://pan.baidu.com/s/14RJJWKwc-vvudHldew93fQ
Moshow郑锴 blog.csdn.net/moshowgame
配置文件 配置路径
mod_fastdfs.conf /etc/fdfs/
storage.conf /etc/fdfs/
tracker.conf /etc/fdfs/
client.conf /etc/fdfs/
nginx.conf /application/nginx/conf/
config fastdfs-nginx-module-1.20/src/


安装FastDFS

  1. 首先创建工具目录(请提前规划好目录)

mkdir -p /usr/local/bak/fastdfs
cd /usr/local/bak/fastdfs

  1. 下载并安装FastDFS依赖包libfastcommon

wget https://codeload.github.com/happyfish100/libfastcommon/zip/master
unzip master
cd libfastcommon-master/
ls
显示:HISTORY INSTALL libfastcommon.spec make.sh php-fastcommon README src
./make.sh
./make.sh install

  1. 从GitHub的Release下载并安装FastDFS

https://github.com/happyfish100/fastdfs/releases
cd /usr/local/bak/fastdfs
wget https://github.com/happyfish100/fastdfs/archive/V5.11.tar.gz
#下载后会先显示保存的名称,发现有时候保存为V5.11,后缀都没了,请根据屏幕提示操作具体下载到的文件
tar xf V5.11.tar.gz
cd fastdfs-5.11
./make.sh && ./make.sh install

  1. 检验安装后的文件及目录:

#服务脚本:
ll /etc/init.d/ |grep fdfs
#样例配置文件
ll /etc/fdfs/
#命令行工具
ll /usr/bin|grep fdfs

注意:虽然FastDFS区分tracker和storage服务器,但是安装的软件及步骤均相同,只是不同的配置文件而已,因此以上安装适用tracker server和storage server。也就是说单机的话,只要装一份就可以用了,无需装两份

配置跟踪服务器(tracker server)

*注意。tracker_server不可配置为127.0.0.1,否则会有报错

[2018-12-27 19:47:43] ERROR - file: storage_func.c, line: 1194, conf file “/etc/fdfs/storage.conf”, tracker: “127.0.0.1:22122” is invalid, tracker server ip can’t be 127.0.0.1
[2018-12-27 19:47:43] CRIT - exit abnormally!

  1. 创建FastDfs数据目录

mkdir -p /data/fastdfs/tracker

  1. 拷贝tracker server和client端样例配置文件并重命名

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

  1. 编辑tracker server配置文件tracker.conf,需要修改内容如下:

#the tracker server port 这里配置的是tracker端口
port=22122
#the base path to store data and log files这里配置的是存储的目录,包含数据和日志文件
base_path=/data/fastdfs/tracker

  1. 编辑client端的配置文件client.conf,需要修改内容如下

#这里配置的是存储的目录,包含数据和日志文件
base_path=/data/fastdfs/tracker

#这里的是上面tracker的地址和端口,如果单机则本地ip(不能127.0.0.1,最好是局域网ip),集群则中央tracker
tracker_server=192.168.103.118:22122

  1. 测试启动tracker server,启动成功会自动在/data/fastdfs/tracker目录新建data和logs目录

cd /data/fastdfs/tracker
/etc/init.d/fdfs_trackerd start
看到控制台输出以下信息证明基本是成功的
Reloading systemd: [ OK ]
Starting fdfs_trackerd (via systemctl): [ OK ]
ss -lntup|grep 22122
看到控制台输出tcp LISTEN 0 128 *:22122 *:* users:(("fdfs_trackerd",pid=15703,fd=5))
ls
看到控制台输出data logs

配置存储服务器(storage server)

  1. 拷贝storage server样例配置文件并重命名

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

  1. 编辑storage server配置文件storage.conf,需要修改内容如下:

#服务端口
port=23000
#日志和文件存储路径
base_path=/data/fastdfs/storage
#存储路径,如果有多个就store_path0~store_pathN排列即可
store_path0=/data/fastdfs/data
#tracker服务器地址,填写tracker_server=127.0.0.1:22122是错误的,不能为127.0.0.1,请填写局域网ip
tracker_server=192.168.103.119:22122
#重点,这里默认为8888,后面我们需要在nginx中配置的监听端口号,就是这里定义
http.server_port=8888

  1. 创建storage server数据目录

mkdir -p /data/fastdfs/storage
mkdir -p /data/fastdfs/data

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

cd /data/fastdfs/data
ls
/etc/init.d/fdfs_storaged start
#这里要等很久,日志大概滚到9Kb的时候
ss -lntup|grep 23000
#看到控制台输出tcp LISTEN 0 128 *:23000 *:* users:(("fdfs_storaged",pid=16542,fd=5))就对了
ls
#查看日志

  1. 最后是开启和关闭相关的操作

#关闭服务器
/etc/init.d/fdfs_trackerd stop
/etc/init.d/fdfs_storaged stop
#打开服务器
/etc/init.d/fdfs_trackerd start
/etc/init.d/fdfs_storaged start

  1. 文件上传测试

#命令格式如下:
/usr/bin/fdfs_upload_file <config_file> <local_filename> [storage_ip:port] [store_path_index]
#执行如下上传命令:
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /data/fastdfs/class1.jpg
#看到控制台输出groupN/Mxx/00/00/xxxxxx.xxxx代表上传成功

group1/M00/00/00/wKhndlwm7HWAQQIKAAA4xhJCkoc594.jpg
返回文件ID即说明文件已经上传成功

安装fastdfs-nginx-module模块

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

#新建nginx下载目录
mkdir -p /usr/local/bak/nginx
#新建日志存储目录
mkdir -p /data/fastdfs/nginx
cd /usr/local/bak/nginx
#下载并解压
wget https://github.com/happyfish100/fastdfs-nginx-module/archive/V1.20.tar.gz fastdfs-nginx-module-V1.20.tar.gz
tar xf V1.20
cd fastdfs-nginx-module-1.20/src/

编辑fastdfs-nginx-module-1.20/src/目录下的config文件(没前缀,没后缀,就叫config),主要修改以下两处地方,否则会有报错,而且报错是不可预料的,不要问为什么,反正就是干

ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/"
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"

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

cp /usr/local/bak/nginx/fastdfs-nginx-module-1.20/src/mod_fastdfs.conf /etc/fdfs/mod_fastdfs.conf
cd /etc/fdfs/

修改内容如下,圈红为重点修改部分(感谢@驿外残香 反馈,此处的store_path0应该与storage.conf中的store_path0一致,这样nginx才能够找到资源的正确路径):

base_path=/data/fastdfs/nginx
store_path0=/data/fastdfs/data
tracker_server=192.168.103.118:22122
storage_server_port=23000(默认配置为23000)
url_have_group_name = true
group_name=group1(默认配置为group1)

安装nginx

先安装依赖库

yum install gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel -y

安装nginx

cd /usr/local/bak/nginx
wget https://nginx.org/download/nginx-1.15.8.tar.gz --no-check-certificate
tar xf nginx-1.15.8.tar.gz
cd nginx-1.15.8
#简单的安装法(我是用这种)
./configure --prefix=/application/nginx/ --add-module=/usr/local/bak/nginx/fastdfs-nginx-module-1.20/src
#比较复杂的安装法仅供参考,如果第一个不成功就试下这个
./configure --prefix=/application/nginx --sbin-path=/application/nginx/sbin/nginx --conf-path=/application/nginx/conf/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --http-client-body-temp-path=/var/tmp/nginx/client/ --http-proxy-temp-path=/var/tmp/nginx/proxy/ --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi --http-scgi-temp-path=/var/tmp/nginx/scgi --with-stream --with-pcre --add-module=/home/software/fastdfs-nginx-module-master/src --with-stream
make && make install

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

cp /usr/local/bak/fastdfs/fastdfs-5.11/conf/http.conf /etc/fdfs/
cp /usr/local/bak/fastdfs/fastdfs-5.11/conf/mime.types /etc/fdfs/

配置nginx的配置文件,路径是/application/nginx/conf/nginx.conf

    user  root;    worker_processes  1;events {worker_connections  1024;}http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;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;}}}

这里有几点要说明一下:

  • "user root"是解决下载操作时报404的问题
  • 8888端口号与/etc/fdfs/storage.conf中的http.server_port=8888相对应
  • storage对应有多个group的情况下,访问路径带group名称(已经启用该配置),例如:/group1/M00/00/00/**,对应nginx配置 location ~/group[0-9]/ { ngx_fastdfs_module;}

拷贝nginx服务到/etc/init.d/目录下并启动

cp /application/nginx/sbin/nginx /etc/init.d/
/etc/init.d/nginx
ss -lntup|grep 8888
看到控制台输出tcp LISTEN 0 128 *:8888 *:* users:(("nginx",7308,6),("nginx",7309,6))

查看和终止nginx状态

ps -ef | grep nginx
kill -s 9 pid

验收战绩

配置了大半天,究竟行不行,初次玩的时候,发现我用的fastdfs+nginx+nginx-fastdfs-module的版本太新了,有些配置需要琢磨,所以卡了一天,配置也贴了出来了,可以参考参考,有什么需要注意的文章也说了也圈红了。

好了,我们拼接上服务器前缀ip和端口号进行请求,这个时候由nginx-fastdfs-module进行转发到FastDFS上。表示配置已经完成,接下来就是一些API开发和运维的工作了。

http://192.168.103.118:8888/group1/M00/00/00/wKhndlwm7HWAQQIKAAA4xhJCkoc594.jpg

后续

调用部分请看FastDFS Java Api 使用教程

分布式文件管理系统FastDFS搭建教程(FastDFS+nginx+fastdfs-nginx-module)相关推荐

  1. 文件管理系统(2/3)FastDFS搭建分布式文件管理系统

    参考案例:Java+Nginx+FastDFS 分布式文件系统fastdfs_使用python操作fastdfs 一.简介 这里介绍使用python操作fastdfs.python操作需要依赖py3F ...

  2. python任务调度平台 界面_分布式任务调度平台XXL-JOB搭建教程

    关于分布式任务调度平台XXL-JOB,其实作者 许雪里在其发布的中文教程中已经介绍的很清楚了,这里我就不做过多的介绍了,关于其搭建教程,本人依照其文档搭建起来基本上也没遇到啥问题,这里通过博客的形式记 ...

  3. 分布式文件系统研究-测试-搭建测试环境

    搭建环境 这里我们使用javaApi测试文件的上传,java版本的fastdfs-client地址在: https://github.com/happyfish100/fastdfs-client-j ...

  4. 分布式文件存储系统MinIO入门教程

    一.应用场景:海量非结构化数据存储需求.例如文件.图片.音频.视频等. 二.简介:MinIO是一个基于Apache License V2.0开源协议的对象存储服务. 三.基础概念: Object: 存 ...

  5. 分布式文件存储FastDFS介绍安装部署及相关Java代码编写

    分布式文件存储FastDFS 一.FastDFS简介 1.1 FastDFS体系结构 FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传 ...

  6. FastDFS分布式文件系统配置与部署

    一文搞定FastDFS分布式文件系统配置与部署 阅读目录 1 分布式文件系统介绍 2 系统架构介绍 3 FastDFS性能方案 4 Linux基本命令操作 5 安装VirtualBox虚拟机并配置Ub ...

  7. day36~37_HDFS分布式文件存储系统

    HDFS分布式文件存储系统 一.HDFS概述 (一)HDFS产生背景 随着数据量越来越大,在一个文件系统下无法存储海量数据,普通硬件支持的操作系统即使扩展磁盘也会遇到瓶颈,迫切需要水平横向扩展来解决数 ...

  8. hdfs mv命令_大数据入门:HDFS文件管理系统简介

    Hadoop作为大数据主流的基础架构选择,至今仍然占据着重要的地位,而基于Hadoop的分布式文件系统HDFS,也在大数据存储环节发挥着重要的支撑作用.今天的大数据入门分享,我们就主要来讲讲HDFS分 ...

  9. 分布式文件存储:Google File System 浅析

    Google File System 1.简介:GFS是什么 1.1 DFS 1.2 系统分类 1.2.1 网络文件系统(NFS) 1.2.2 Andrew系统(AFS) 1.2.3 KASS系统(K ...

最新文章

  1. 收藏一波:常用正则表达式公式总结
  2. push_back和emplace_back的区别
  3. sql intersect mysql_SQL INTERSECT子句
  4. 响应性web设计实战总结(二)
  5. fmin在Matlab中,MATLAB-fminsearch函数的使用
  6. docsys安装_DocSys文件系统部署
  7. mysql几种语言_mysql的几种SQL语句
  8. JAVA操作文件大全(二)
  9. CREATE TABLE TEST_A AS SELECT * FROM TEST_B
  10. 矩阵分析与应用-1.1-矩阵的基本运算
  11. UCI数据集中文介绍:Waveform Database Generator (Version 1) Data Set
  12. jquery.uploadify php,jquery组件Uploadify的使用
  13. java 1.5.0 gcj_java gcj调试
  14. 用几何语言表示线段ab的中点c,七年级上册数学第四章教案
  15. 2013菏泽国际牡丹文化旅游节
  16. 符冉迪 计算机 培训,一种卫星云图的二次聚类分割方法专利_专利申请于2012-11-30_专利查询 - 天眼查...
  17. linux创建777权限的文件,Linux文件夹权限777,无法创建文件
  18. mavon-editor编辑器与图片上传
  19. 2007年IT产业回顾:划时代的一年 一个变革的时代
  20. 量子计算机能超越光速,量子纠缠: 真的可以“超越光速”吗?

热门文章

  1. Jackson--使用/教程/示例
  2. 平面设计高级全套教程
  3. 谈谈企业数字化转型必由之路--顶层设计
  4. 怎么用计算机弹海草舞,抖音海草舞怎么跳教学视频 歌曲海草舞原版是谁完整歌词...
  5. 【2021-7月】渗透测试/安全服务实习生面试题经验分享
  6. android自定义布局背景透明,带下划线的Android Layout透明布局背景
  7. 支付宝上海“S空间”腾讯全球总部 | 高仙机器人落地再传捷报
  8. 花雨庭服务器如何发消息,我的世界花雨庭服务器里如何建造家园quest; | 手游网游页游攻略大全...
  9. 中专计算机设备与学生比例,【计算机教育论文】中职生计算机基础教学分析(共3170字)...
  10. 深挖数据价值,英特尔加速医院数字化转型