一、理论基础

FastDFS比较适合以中小文件为载体的在线服务,比如跟NGINX(APACHE)配合搭建图片服务器。

分布式文件系统FastDFS

FastDFS是纯C语言实现,只支持Linux、FreeBSD等UNIX系统。

FastDFS的两个核心概念分别是:Tracker(跟踪器)、Storage(存储节点)

跟踪器Tracker主要做调度工作,相当于mvc中的controller的角色,在访问上起负载均衡的作用。跟踪器和存储节点都可以由一台或多台服务器构成,跟踪器和存储节点中的服务器均可以随时增加或下线而不会影响线上服务,其中跟踪器中的所有服务器都是对等的,可以根据服务器的压力情况随时增加或减少。

跟踪器Tracker负责管理所有的Storage和group,每个Storage在启动后会连接Tracker,

告知自己所属的group等信息,并保持周期性的心跳,tracker根据storage的心跳信息,

建立group==>[storage server list]的映射表,Tracker需要管理的元信息很少,会全部存储在内存中;另外tracker上的元信息都是由storage汇报的信息生成的,本身不需要持久化任何数据,这样使得tracker非常容易扩展,直接增加tracker机器即可扩展为tracker cluster来服务,cluster里每个tracker之间是完全对等的,所有的tracker都接受stroage的心跳信息,生成元数据信息来提供读写服务。

存储节点Storage采用了分卷[Volume](或分组[group])的组织方式,存储系统由一个或多个组组成,组与组之间的文件是相互独立的,所有组的文件容量累加就是整个存储系统中的文件容量。

一个卷[Volume](组[group])可以由一台或多台存储服务器组成,一个组中的存储服务器中的文件都是相同的,组中的多台存储服务器起到了冗余备份和负载均衡的作用,数据互为备份,存储空间以group内容量最小的storage为准,所以建议group内的多个storage尽量配置相同,以免造成存储空间的浪费。

二、安装环境

操作系统版本:  CentOS release 6.5

提前安装相关操作系统包

yum install unzip zip  gcc-c++

创建一个文件夹/opt/dfspackages/,用来保存相关软件

源码地址首页:https://github.com/happyfish100

公共函数库:libfastcommon-master.zip

下载地址:

https://codeload.github.com/happyfish100/libfastcommon/zip/master

主程序:fastdfs-5.10.tar.gz

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

https://codeload.github.com/happyfish100/fastdfs/zip/master

NGINX与DFS链接模块: fastdfs-nginx-module_v1.16.tar.gz

https://github.com/happyfish100/fastdfs-nginx-module

https://codeload.github.com/happyfish100/fastdfs-nginx-module/zip/master

下载完之后通过WinScp,SECURET 等工具直接传送到服务器

接下来FastDFS的安装过程步骤如下:

三、安置步骤

 

3.1 libfastcommon包安装
FastDFS 将以前版本的公共的一些函数单独封装成了libfastcommon包,所以在安装FastDFS之前我们还必须安装libfastcommon。

 

3.1.1 解压缩
 unzip libfastcommon-master.zip
执行编译步骤:./make.sh

 
执行安装步骤:./make.sh install
 
 
 

libfastcommon.so 默认安装到了/usr/lib64/libfastcommon.so,但是FastDFS主程序设置的lib目录是/usr/local/lib,

所以此处需要重新设置软链接(类似于Windows的快捷方式):
ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so
ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so

 
 
 
 
 
 
3.2 FastDFS 安装
unzip fastdfs-master.zip
cd fastdfs-master
./make.sh
./mae.sh install
 
 
cd /etc/fdfs/
ll -lh
 
对三个配置文件进行拷贝,后面有用
cp client.conf.sample client.conf
cp storage.conf.sample storage.conf
cp tracker.conf.sample tracker.conf
 
3.3Tracker 安装
创建Tracker服务器的文件路径,即用于存储Tracker的数据文件和日志文件等:
mkdir /opt/fastdfs_tracker

编辑上/etc/fdfs/tracker.conf 配置文件,打开文件后依次做以下修改:

vim /etc/fdfs/tracker.conf 
#启用配置文件(默认false)
disabled=false 
 #设置tracker的端口号,通常采用22122这个默认端口
port=22122
 
#设置tracker的数据文件和日志目录
base_path=/opt/fastdfs_tracker 
 
#设置http端口号,初始值为8080
http.server_port=6666

为启动脚本创建软引用,因为fdfs_trackerd等命令在/usr/local/bin中并没有,而是在/usr/bin路径下:
ln -s /usr/bin/fdfs_trackerd  /usr/local/bin

ln -s /usr/bin/stop.sh  /usr/local/bin
ln -s /usr/bin/restart.sh  /usr/local/bin

最后通过命令启动Tracker服务器:
service fdfs_trackerd start

如果启动命令执行成功,那么同时在刚才创建的tracker文件目录/opt/fastdfs_tracker中就可以看到启动后新生成的data和logs目录,tracker服务的端口也应当被正常监听,最后再通过netstat命令查看一下端口监听情况:
netstat -unltp|grep fdfs

服务运行的22122端口正常

 
3.4 Storage安装

创建Storage服务器的文件目录,注意同Tracker相比要多建一个目录,因为Storage还需要一个文件存储路径,用于存放接收的文件:
mkdir /opt/fastdfs_storage
mkdir /opt/fastdfs_storage_data

接下来修改/etc/fdfs/storage.conf配置文件,打开文件后依次做以下修改:

#设置storage端口号,默认是23000,同一个组的storage端口号必须一致
port=23000
#设置storage数据文件和日志目录
base_path=/opt/fastdfs_storage 
#实际文件存储路径
store_path0=/opt/fastdfs_storage_data

#存储路径个数,需要和store_path个数匹配

store_path_count=1

#tracker 服务器的 IP地址和端口号,如果是单机搭建,IP不要写127.0.0.1,否则启动不成功
tracker_server=117.27.1.11 :22122 
#设置 http 端口号
http.server_port=8888

配置完成后同样要为Storage服务器的启动脚本设置软引用:
ln -s /usr/bin/fdfs_storaged /usr/local/bin

接下来就可以启动Storage服务了:
service fdfs_storaged start

验证成功启动的方法:

netstat -unltp|grep fdfs

查看是否有23000,22122,两个端口在
成功的话,/opt/fastdfs_storage/data目录下生成好的文件夹,data下有256个1级目录,每级目录下又有256个2级子目录,总共65536个文件夹。
新写的文件会以hash的方式被路由到其中某个子目录下,然后将文件数据直接作为一个本地文件存储到该目录中。那么最后我们再看一下storage服务的端口监听情况:

查看:storage服务器是否已经登记到 tracker服务器,运行以下命令:
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf

看到117.27.1.11 ACTIVE 字样即可说明storage服务器已经成功登记到了tracker服务器
至此我们就已经完成了fastdfs的全部配置,此时也就可以用客户端工具进行文件上传下载的测试了。

3.5初步 测试
从https://github.com/happyfish100/fastdfs-client-java下载测试代码
本次测试从本地F盘传1.JPG
配置fdfs_client.conf文件
tracker_server = 117.27.1.11:22122
运行Test.java
上传到group1/M00/00/00/dRuYfFjwefOAaADcAAjuDOhJdt4482.jpg
对应服务器上的位置:/opt/fastdfs_storage_data/data/00/00
 
 
这个是服务器上面的显示位置
 
 
 
3.6 fastdfs-nginx-module
FastDFS目前已不支持http协议
余大提供了nginx上使用FastDFS的模块fastdfs-nginx-module,
这样做最大的好处就是提供了HTTP服务并且解决了group中storage服务器的同步延迟问题,
安nginx模块依赖lib库
yum -y install pcre pcre-devel  
yum -y install zlib zlib-devel  
yum -y install openssl openssl-devel

前提要先安装好nginx等
接下来就具体记录一下fastdfs-nginx-module的安装配置过程
代码下载地址:https://github.com/happyfish100/fastdfs-nginx-module
进入源码nginx安装文件夹
解压成功后就可以编译安装nginx了,进入nginx目录并输入以下命令进行配置:
./configure --prefix=/usr/local/nginx  --add-module=/opt/dfspackages/fastdfs-nginx-module-master/src 
make
make install

 
或则是全新安装NGINX
./configure --prefix=/opt/dfsNginx  --user=nginx --group=nginx --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module  --with-http_stub_status_module  --add-module=/opt/dfspackages/fastdfs-nginx-module-master/src  --http-client-body-temp-path=/var/tmp/nginx/proxy --http-fastcgi-temp-path=/var/tmp/nginx/fcgi
make && make install
groupadd -f nginx
 useradd -g nginx nginx
配置nginx.conf文件,加入server{ }中
listen       9999;

location ~/group1/M00 {
      root /opt/fastdfs_storage_data/data;
      ngx_fastdfs_module;
}
cp /opt/dfspackages/fastdfs-master/conf/http.conf      /etc/fdfs/
cp /opt/dfspackages/fastdfs-master/conf/mime.types  /etc/fdfs/
cp /opt/dfspackages/fastdfs-nginx-module-master/src/mod_fastdfs.conf  /etc/fdfs/

 
 
 
编辑mod_fastdfs.conf文件,vim /etc/fdfs/mod_fastdfs.conf:
#保存日志目录
base_path=/opt/fastdfs_storage 
 
#tracker服务器的IP地址以及端口号
tracker_server=192.168.111.11:22122 
 
#storage服务器的端口号
storage_server_port=23000 
 
#文件 url 中是否有 group 名
url_have_group_name = true 
# 存储路径
store_path0=/opt/fastdfs_storage_data 
#设置组的个数,事实上这次只使用了group1
group_count = 3 

设置了group_count = 3,接下来就需要在文件尾部追加这3个group setting:
[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/opt/fastdfs_storage_data

[group2]
group_name=group2
storage_server_port=23000
store_path_count=1
store_path0=/opt/fastdfs_storage_data

[group3]
group_name=group3
storage_server_port=23000
store_path_count=1
store_path0=/opt/fastdfs_storage_data

接下来还需要建立 M00 至存储目录的符号连接:
ln  -s  /opt/fastdfs_storage_data/data  /opt/fastdfs_storage_data/data/00

最后启动nginx:
/usr/local/nginx/sbin/nginx

浏览器也可以看到nginx的主页

转自 https://blog.csdn.net/chen3888015/article/details/70172505

FastDFS 学习笔记的更多相关文章

  1. 【转载】Java学习笔记

    转载:博主主页 博主的其他笔记汇总 : 学习数据结构与算法,学习笔记会持续更新: <恋上数据结构与算法> 学习Java虚拟机,学习笔记会持续更新: <Java虚拟机> 学习Ja ...

  2. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  3. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  4. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  5. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

  6. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  7. seaJs学习笔记2 – seaJs组建库的使用

    原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...

  8. CSS学习笔记

    CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...

  9. HTML学习笔记

    HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...

随机推荐

  1. 认识uWSGI、uwsgi、wsgi

    WSGI协议 首先弄清下面几个概念: WSGI:全称是Web Server Gateway Interface,WSGI不是服务器,python模块,框架,API或者任何软件,只是一种规范,描述web ...

  2. BZOJ2759 一个动态树好题 LCT

    题解: 的确是动态树好题 首先由于每个点只有一个出边 这个图构成了基环内向树 我们观察那个同余方程组 一旦形成环的话我们就能知道环上点以及能连向环上点的值是多少了 所以我们只需要用一种结构来维护两个不 ...

  3. MongoDB,从数组中删除对象

    { _id: 5150a1199fac0e6910000002, name: 'some name, items: [{ id: 23, name: 'item name 23' },{ id: 24 ...

  4. Docker 学习7 Dockerfile详解

    一.镜像的生成途径 1.使用当前进程替换上一个进程 exec 2.生成方式 3.dockerfile制作镜像要求 a.要有专有的工作目录. b.要有专门的制作文件,文件名首字母大写 c.如果要打包很多 ...

  5. 用canal同步binlog到kafka,spark streaming消费kafka topic乱码问题

    canal 1.1.1版本之后, 默认支持将canal server接收到的binlog数据直接投递到MQ, 目前默认支持的MQ系统有kafka和RocketMQ. 在投递的时候我们使用的是非压平的消 ...

  6. [SCOI2015]小凸玩矩阵

    Description: 给你一个n*m的网格,每个格子有一个数字,每行每列只能选一个数字,问所选数字中第k大的数字的最小值是多少 Hint: \(n \le 250\) Solution: 显然是二 ...

  7. CentOS7终端的分辨率和字体修改

    本文转贴自https://blog.csdn.net/u010566813/article/details/40502819 一.修改分辨率 修改/boot/grub2/grub.cfg 添加如上,具 ...

  8. Selenium 实现 Web 自动化的原理 (软件测试52讲学习笔记)

    Selenium 1.0 的工作原理 Selenium 1.0,又称Selenium RC ,RC是Remote Control的缩写.Selenium RC利用的原理:JavaScript代码可以方 ...

  9. 执行grunt命令报错 Cannot find module 'coffee-script'

    Failed to list grunt tasks in yudian-frontend-salesplatform\Gruntfile.js: process finished with exit ...

  10. SpringBoot报错:Invalid bound statement (not found)

    错误原因: 没有发现Mybatis配置文件的路径 解决方法: 检查Mapper包名与xml文件标签的namespace数据名称是否相同 <mapper namespace="com.t ...