FastDFS是用c语言编写的一款开源的分布式文件系统,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。

一、FastDFS架构

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

1.Tracker Server

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

2.Storage server

Storage server作用是文件存储,客户端上传的文件最终存储在Storage服务器上,Storage server没有实现自己的文件系统而是利用操作系统的文件系统来管理文件。可以将storage称为存储服务器。

二、FastDFS安装

FastDFS的安装比较麻烦,需要配置许多的参数,所以要有耐心。本次配置是在Ubuntu系统版本为16.04.3 LTS下进行的,并且是干净的版本,比如gccssh等软件包都没有安装。

下面开始进行环境配置:

1.软件包

下面是安装FastDFS的安装包,也可以下载到:FastDFS,密码为:ideg

软件包 版本
FastDFS v5.05
libfastcommon v1.0.7
fastdfs-nginx-module v1.16
nginx v1.12.1

2.安装libfastcommon

在编译libfastcommon之前,要先安装gcc的编译器:

sudo apt-get install build-essential

如果提示某些包安装不上,请先更新apt:

sudo apt-get update

之后再安装gcc,安装成功后就可以编译安装了:

./make.sh && sudo ./make.sh install

最后,把生成的libfastcommon库拷贝到/usr/lib目录下

sudo cp /usr/lib64/* /usr/lib/

3.编译FastDFS

解压FastDFS_v5.05.tar.gz,然后编译安装FastDFS:

tar zxf FastDFS_v5.05.tar.gz
./make.sh
sudo ./make.sh install

安装成功后将目录conf内的文件拷贝到/etc/fdfs目录下:

sudo cp conf/* /etc/fdfs/

4.安装tracker

进入/etc/fdfs目录,修改tracker.conf文件。如果不存在,就拷贝tracker.conf.sample文件为tracker.conf,然后再修改:

base_path=/home/yuqing/fastdfs >>> base_path=/home/kelvin/data/fastdfs

http.server_port=8080 >>> http.server_port=80

其中,/home/kelvin/data/fastdfs目录如果不存在,就创建一个。

之后,就启动tracker,并查看是启动成功(出现如下提示,表示启动成功):

$ fdfs_trackerd /etc/fdfs/tracker.conf start
$ netstat -unltp | grep tracker
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 0.0.0.0:22122 0.0.0.0:* LISTEN 7281/fdfs_trackerd

5.安装storage

修改storage.conf文件。如果不存在,就拷贝storage.conf.sample文件为storage.conf,然后再修改:

base_path=/home/yuqing/fastdfs >>> base_path=/home/kelvin/data/fastdfs/storage
store_path0=/home/yuqing/fastdfs >>> store_path0=/home/kelvin/data/fastdfs/storage
tracker_server=192.168.209.121:22122 >>> tracker_server=192.168.2.231:22122

其中,如果/home/kelvin/data/fastdfs/storage不存在,就创建该目录

然后,就启动storage,并查看是否成功(出现如下提示,表示启动成功):

$ fdfs_storaged /etc/fdfs/storage.conf start
$ netstat -unltp | grep storage
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 0.0.0.0:23000 0.0.0.0:* LISTEN 7348/fdfs_storaged

最后,查看trackerstorage是不是在通信:

$ fdfs_monitor /etc/fdfs/storage.conf
...
current trunk file id = 0 Storage 1:
id = 192.168.2.231
ip_addr = 192.168.2.231 ACTIVE
...

如上提示,出现ACTIVE,表示二者均正常启动,至此就可以进行上传文件测试了。

6.安装Nginx

首先解压fastdfs-nginx-module_v1.16.tar.gz,然后把解压后的文件目录整个拷贝到/usr/local/src目录下。

然后配置nginx,加入fastdfs-nginx-module模块:

$ sudo ./configure --add-module=/usr/local/src/fastdfs-nginx-module/src/

如果出现如下错误,

error: the HTTP rewrite module requires the PCRE library

请安装libpcre3ssh的库

$ sudo apt-get install libpcre3 libpcre3-dev
$ sudo apt-get install openssl libssl-dev

之后再执行configure配置,完成后进行安装:

sudo make

如果出现如下错误:

root/fastdfs-nginx-module/src//common.c:21:25: fatal error: fdfs_define.h: No such file or directory
#include "fdfs_define.h"

则需要再添加如下配置:

1.把/usr/lib64/libfdfsclient.so库拷贝到/usr/lib/目录下:

$ sudo cp /usr/lib64/libfdfsclient.so /usr/lib/

2.配置/usr/local/src/fastdfs-nginx-module/src/目录下的config文件,把CORE_INCSCORE_LIBS的所有路径都修改为/usr/include/usr/lib

$ sudo vi /usr/local/src/fastdfs-nginx-module/src/config
...
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
CORE_LIBS="$CORE_LIBS -L/usr/lib -lfastcommon -lfdfsclient"
...

之后就可以执行编译和安装了:

$ sudo make && sudo make install

完成之后,可以查看fastdfs-nginx-module是否配置成功(下面提示表示配置成功):

$ /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.12.1
built by gcc 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4)
configure arguments: --add-module=/usr/local/src/fastdfs-nginx-module/src

7.整合fastdfs-nginx-module 和 Nginx

首先到/usr/local/src/fastdfs-nginx-module-master/src/目录下,拷贝mod_fastdfs.conf文件到/etc/fdfs目录下,然后进行如下配置:

base_path=/home/kelvin/data/fastdfs
tracker_server=192.168.2.231:22122
url_have_group_name = true
store_path0=/home/kelvin/data/fastdfs/storage

然后配置Nginx,添加如下内容:

	server {
listen 80;
server_name localhost; ... # 配置fastdfs的访问路径
location /group1/M00 {
ngx_fastdfs_module;
}
...
}

之后启动nginx:

$ sudo /usr/local/nginx/sbin/nginx
ngx_http_fastdfs_set pid=23238

上传测试

在进行测试之前,我们还需要先配置一下client.conf文件,该文件在/etc/fdfs目录下,配置如下:

$ sudo vi /etc/fdfs/cli
...
base_path=/home/kelvin/data/fastdfs
tracker_server=192.168.2.231:22122
...

然后,创建一个test.txt文件,随便输入一些内容,再进行上传:

$ echo HelloWorld > ~/test.txt
$ fdfs_test /etc/fdfs/client.conf upload ~/test.txt
...
[2017-09-23 20:12:00] DEBUG - base_path=/home/kelvin/data/fastdfs, 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 tracker_query_storage_store_list_without_group:
server 1. group_name=, ip_addr=192.168.2.231, port=23000 group_name=group1, ip_addr=192.168.2.231, port=23000
storage_upload_by_filename
group_name=group1, remote_filename=M00/00/00/wKgC51nHIoCACtpSAAAAC5KLpvs082.txt
source ip address: 192.168.2.231
file timestamp=2017-09-23 20:12:00
file size=11
file crc32=2458625787
example file url: http://192.168.2.231/group1/M00/00/00/wKgC51nHIoCACtpSAAAAC5KLpvs082.txt
...

最后,在浏览器里输入http://192.168.2.231/group1/M00/00/00/wKgC51nHIoCACtpSAAAAC5KLpvs082.txt,即可访问到test.txt的文件内容:


以上就是Fastdfs的安装过程,如有错误,欢迎指出,共同进步。(文中部分图片来自互联网,版权归原作者所有)

参考资料

FastDFS安装全过程记录

FastDFS安装部署操作手册

FastDFS安装步骤的更多相关文章

  1. 分布式文件系统 fastDFS 安装步骤

    安装 fastDFS 很简单. 先安装 libevent, 安装成功后,安装fastDFS. ./make.sh ./make.sh install 我使用一台tracker服务器  192.168. ...

  2. FastDFS 安装步骤

    nginx01        121nginx02        122 tracker01      131tracker02      132 storage01      141storage0 ...

  3. FastDFS图片服务器单机安装步骤

    前面已经讲 一张图秒懂微服务的网络架构,通过此文章可以了解FastDFS组件中单机安装流程. 单机版架构图 以下为单机FastDFS安装步骤 一.环境准备 CentOS 7.X libfastcomm ...

  4. FastDFS图片服务器单机安装步骤(修订版)

    前面已经讲 一张图秒懂微服务的网络架构,通过此文章可以了解FastDFS组件中单机安装流程. 单机版架构图 以下为单机FastDFS安装步骤 一.环境准备 CentOS 7.X libfastcomm ...

  5. [转帖]FastDFS图片服务器单机安装步骤

    FastDFS图片服务器单机安装步骤 https://www.cnblogs.com/yuesf/p/11847103.html 前面已经讲 一张图秒懂微服务的网络架构,通过此文章可以了解FastDF ...

  6. fastdfs 安装配置

      介绍文档   1.安装 # wget # tar xf download # cd FastDFS/ # ./make.sh 运行文件 有报错信息 compilation terminated. ...

  7. FastDFS安装配置手册

    文件服务器分布式系统安装手册 本文档详细的介绍了FastDFS的最小集群安装过程.集群环境如下: tracker:20.2.64.133 .用于调度工作,在访问上起负载均衡的作用. group1: s ...

  8. FastDFS安装全过程记录(V5.05)

    FastDFS安装全过程记录 1.安装准备 HA虚拟IP:192.168.1.208 HA软件:Keepalived 操作系统:CentOS 7 用户:root 数据目录:/data/fastdfs ...

  9. FastDFS安装、配置、部署(一)-安装和部署 (转)

    FastDFS是一个开源的,高性能的的分布式文件系统,他主要的功能包括:文件存储,同步和访问,设计基于高可用和负载均衡,FastDFS非常适用于基于文件服务的站点,例如图片分享和视频分享网站 Fast ...

随机推荐

  1. 输入输出系统--I/O接口

    计算机组成原理\硬件结构\输入输出系统\I/O接口 一.概述 接口可以看做是两个系统或两个部件之间的交接部分,它即可以是两种硬设备之间的连接电路,也可以是两个软件之间共同的逻辑边界. I/O接口通常是 ...

  2. "R6002 floating point support not loaded"问题分析

    今天为了追踪程序线程退出耗时时间,添加了耗时时间输出日志: TimerMeter tm; // do some threads exit logic float fSecs = tm.Elapsed( ...

  3. python-opencv在有噪音的情况下提取图像的轮廓

    对于一般的图像提取轮廓,这篇博文介绍了一个很好的方法,但是对于有噪声的图像,并不能很好地捕获到目标物体. 比如对于我的鼠标,提取的轮廓效果并不好,因为噪声很多: 所以本文增加了去掉噪声的部分. 首先加 ...

  4. [日推荐] 『Streeter』极乐商店邀你一起来尬舞啊!-store.dreawer.com

    你听的舞蹈有哪些?Jazz?Poppin?Hiphop?现代舞?民族舞?... 今天推荐一款小程序『Streeter』,几乎包含所有舞蹈视频,偷偷学好了,邀请你来尬舞啊 Streeter 这个Logo ...

  5. WP开发图片保存到独立存储并从独立存储中读取

    需要添加引用命名空间 using System.IO; using System.IO.IsolatedStorage; 1.将图片保存到独立存储空间 using (IsolatedStorageFi ...

  6. MySQL问题总结(持续更新)

    CHAR和VARCHAR的区别 存储方式和检索方式不同: 1.CHAR固定长度字符类型.CHAR存储定长数据,CHAR字段上的索引效率高,比如定义char(10),那么不论你存储的数据是否达到了10个 ...

  7. git 介绍及其使用总结

      版本控制 Git                   目录  目录 2 第1章 Shell和vi 4 1.1 什么是shell 4 1.2 shell分类 4 1.3 认识bash这个shell ...

  8. kindeditor上传图片时候,上传成功了,但是页面上却提示失败

    今天尝试着kindeditor做一个上传demo,碰到了一个日狗的问题,百度谷歌都没有答案,最后查看源码才发现问题所在,记录一下,福利大众. 碰到问题如下,图片后台明明上传成功了,返回信息也是正确的, ...

  9. 如何快速把 Vue 项目升级到 webpack3

    由于 webpack3升级后,新增了 Scope Hositing(作用域提升) 功能,据说是对 js的性能提升很大.因此,我们做了一个测试对比,就是 webpack3和 webpack1/2 的性能 ...

  10. Java 反射之动态代理

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt205 利用Java反射机制你可以在运行期动态的创建接口的实现.java.la ...