介绍

参考

tracker-server:

跟踪服务器, 主要做调度工作, 起负载均衡的作用。 在内存中记录集群中所有存储组和存储服务器的状态信息, 是客户端和数据服务器交互的枢纽。 相比GFS中的master更为精简, 不记录文件索引信息, 占用的内存量很少。

storage-server:

存储服务器( 又称:存储节点或数据服务器) , 文件和文件属性( metadata) 都保存到存储服务器上。 Storage server直接利用OS的文件系统调用管理文件。

group:

组, 也可称为卷。 同组内服务器上的文件是完全相同的 ,同一组内的storage server之间是对等的, 文件上传、 删除等操作可以在任意一台storage server上进行 。

meta data:

文件相关属性,键值对( Key Value Pair) 方式,如:width=1024,heigth=768 。

部署

FastDfs服务架构图

本地部署服务

192.168.1.177安装fastdfs的tracker节点,以及nginx反向代理服务器用于下载服务。

192.168.1.188,192.168.1.189安装fastdfs的storage节点,默认分一组,一组内两台机器互为备份.

注意:为了做到高可用,一个group建议分为两台以上的机器。

安装 libfastcommon 和 FastDFS

  • 下载安装 libfastcommon,这里是通过wget下载(我喜欢这种方式)。
wget https://github.com/happyfish100/libfastcommon/archive/V1.0.7.tar.gz

  • 下载安装 libfastcommon

    解压 libfastcommon,命令:
tar-zxvf V1.0.7.tar.gz

解压

编译,进入libfastcommon-1.0.7目录,命令:

cd libfastcommon-1.0.7

./make.sh
cd libfastcommon-1.0.7 ./make.sh

安装,命令:

./make.sh install

安装



显示这样的画面,就是安装 libfastcommon 成功啦。

  • 下载安装 FastDFS,这里也是通过wget下载。
wget https://github.com/happyfish100/fastdfs/archive/V5.05.tar.gz



解压缩

tar-zxvf V5.05.tar.gz

编译,进入fastfds-5.05目录,命令:

cd fastdfs-5.05

./make.sh

安装

./make.sh install

配置 Tracker 服务

上述安装成功后,在/etc/目录下会有一个fdfs的目录,进入它。会看到三个.sample后缀的文件,这是作者给我们的示例文件,我们需要把其中的tracker.conf.sample文件改为tracker.conf配置文件并修改它。看命令:

cp tracker.conf.sample tracker.conf

vim tracker.conf

# the base path to store data and log files

base_path=/data/fastdfs

# HTTP port on this tracker server

http.server_port=80

当然前提是你要有或先创建了/data/fastdfs目录。port=22122这个端口参数不建议修改,除非你已经占用它了。

修改完成保存并退出 vim ,这时候我们可以使用/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start来启动 Tracker服务,但是这个命令不够优雅,怎么做呢?使用ln -s建立软链接:

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

这时候我们就可以使用service fdfs_trackerd start来优雅地启动 Tracker服务了,是不是比刚才带目录的命令好记太多了(懒是社会生产力)。你也可以启动过服务看一下端口是否在监听,命令:

  • 启动服务:service fdfs_trackerd start

  • 查看监听:netstat-unltp|grep fdfs

看到22122端口正常被监听后,这时候就算 Tracker服务安装成功啦!

配置 Storage 服务

现在开始配置 Storage 服务,由于我这是单机器测试,你把 Storage 服务放在多台服务器也是可以的,它有Group(组)的概念,同一组内服务器互备同步,这里不再演示。直接开始配置,依然是进入/etc/fdfs的目录操作,首先进入它。会看到三个.sample后缀的文件,我们需要把其中的storage.conf.sample文件改为storage.conf配置文件并修改它。还看命令:

cp storage.conf.sample storage.conf

vim storage.conf

打开storage.conf文件后,找到这两个参数进行修改:

# the base path to store data and log files

base_path=/data/fastdfs/storage

# store_path#, based 0, if store_path0 not exists, it's value is base_path

# the paths must be exist

store_path0=/data/fastdfs/storage

#store_path1=/home/yuqing/fastdfs2

# tracker_server can ocur more than once, and tracker_server format is

#  "host:port", host can be hostname or ip address

tracker_server=192.168.198.129:22122

当然你的/data/fastdfs目录下要有storage文件夹,没有就创建一个,不然会报错的,日志以及文件都会在这个下面,启动时候会自动生成许多文件夹。stroage的port=23000这个端口参数也不建议修改,默认就好,除非你已经占用它了。

修改完成保存并退出 vim ,这时候我们依然想优雅地启动 Storage服务,带目录的命令不够优雅,这里还是使用ln -s建立软链接:

ln -s /usr/bin/fdfs_storaged /usr/local/bin

执行命令启动服务:

service fdfs_storaged start

netstat-unltp|grep fdfs

很好,22122 和 23000端口都在监听了,这个时候你去/data/fastdfs/storage文件夹下看的话,会出现一大堆文件夹,而且进去还有一大堆,哈哈,这就是存放文件的啦!下一篇会讲它们的作用和怎么存储的。

应该是完成了。我们安装配置并启动了 Tracker 和 Storage 服务,也没有报错了。那他俩是不是在通信呢?我们可以监视一下:

/usr/bin/fdfs_monitor/etc/fdfs/storage.conf

接下来我们需要配合 Nginx 来进行文件的上传下载,这一篇就安装 Nginx 以及结合 fastdfs-nginx-module 模块使用。

安装 Nginx 和 fastdfs-nginx-module

  • 下载 Nginx 和 fastdfs-nginx-module,这里是通过wget下载(我喜欢这种方式)。
wget-c https://nginx.org/download/nginx-1.10.1.tar.gz

wget https://github.com/happyfish100/fastdfs-nginx-module/archive/master.zip
  • 解压 fastdfs-nginx-module,记着这时候别用tar解压了,因为是.zip文件,正确命令:
unzip master.zip
  • 配置 nginx 安装,加入fastdfs-nginx-module模块。这是和普通 Nginx 安装不一样的地方,因为加载了模块。
./configure--add-module=../fastdfs-nginx-module-master/src/

如果已经安装过Nginx的话,只需要加上新模块重新编译即可。

先执行nginx -V查看当前nginx已安装的模块

把configure arguments:后的参数拷贝下载,放在./configure后面,再加上--add-module=/home/leung/fastdfs-nginx-module/src/即可,add-module后的路径请根据实际情况进行替换.

./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-file-aio --with-threads --with-ipv6 --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_ssl_module --with-cc-opt='-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2'--with-ld-opt='-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now -Wl,--as-needed'--add-module=/home/leung/fdfs/fastdfs-nginx-module/src/

完毕后只执行make,不要执行make install

配置 fastdfs-nginx-module 和 Nginx

  • 配置mod-fastdfs.conf,并拷贝到/etc/fdfs文件目录下。
cd/software/fastdfs-nginx-module-master/src/

vim mod_fastdfs.conf

cp mod_fastdfs.conf/etc/fdfs

修改mod-fastdfs.conf配置只需要修改我标注的这三个地方就行了,其他不需要也不建议改变。

# FastDFS tracker_server can ocur more than once, and tracker_server format is

#  "host:port", host can be hostname or ip address

# valid only when load_fdfs_parameters_from_tracker is true

tracker_server=192.168.198.129:22122

# if the url / uri including the group name

# set to false when uri like /M00/00/00/xxx

# set to true when uri like ${group_name}/M00/00/00/xxx, such as group1/M00/xxx

# default value is false

url_have_group_name=true

# store_path#, based 0, if store_path0 not exists, it's value is base_path

# the paths must be exist

# must same as storage.conf

store_path0=/data/fastdfs/storage

#store_path1=/home/yuqing/fastdfs1

接着我们需要把fastdfs-5.05下面的配置中还没有存在/etc/fdfs中的拷贝进去

cd/software/fastdfs-5.05/conf

cp anti-steal.jpg http.conf mime.types/etc/fdfs/
  • 配置 Nginx。编辑nginx.conf文件:
cd /usr/local/nginx/conf

vi nginx.conf

在配置文件中加入:

location/group1/M00{

root/data/fastdfs/storage/;

ngx_fastdfs_module;

}

由于我们配置了group1/M00的访问,我们需要建立一个group1文件夹,并建立M00到data的软链接。

mkdir /data/fastdfs/storage/data/group1

ln -s /data/fastdfs/storage/data /data/fastdfs/storage/data/group1/M00

启动 Nginx ,会打印出fastdfs模块的pid,看看日志是否报错,正常不会报错的

/usr/local/nginx/sbin/nginx

打开浏览器,可以看到如下画面,说明我们 Nginx 结合 fastdfs-nginx-module 模块安装并配置成功啦!

Q&A

安装fastdfs-nginx-module的依赖包编译没有成功,错误如下:


/usr/local/fastdfs-nginx-module-master/src/ngx_http_fastdfs_module.c In file included from /usr/local/fastdfs-nginx-module-master/src/ngx_http_fastdfs_module.c:6:0: /usr/local/fastdfs-nginx-module-master/src/common.c: 在函数‘fdfs_http_request_handler’中: /usr/local/fastdfs-nginx-module-master/src/common.c:1245:61: 错误:‘FDFSHTTPParams’没有名为‘support_multi_range’的成员 (pContext->range_count > 1 && !g_http_params.support_multi_range)) ^ make[1]: *** [objs/addon/src/ngx_http_fastdfs_module.o] 错误 1 make[1]: 离开目录“/usr/local/nginx-1.12.0” make: *** [build] 错误 2

网上查了下资料,是因为fastdfs-nginx-module版本问题,我搭建的版本是Version 5.05 2016-12-29。作者还有一个5.10的发行版本,你如果没有下载最近的,整合nginx的时候可能会遇到这个问题。

遇到这个错误的原因是,在fastdfs-nginx-module的HISTORY中你可以看到:

整合的时候,fastdfs-nginx-module中的support_multi_range在Version 5.10以下的版本中找不到。

Version 5.11对应的fastdfs-nginx-module的Version 1.20

Version 5.10对应的fastdfs-nginx-module的Version 1.19

所以我这边fastdfs-nginx-module选择1.20以前的版本:

重新解压,config,编译等了一会,幸好,编译成功了,make install,Nginx安装成功了。

测试

完成上面的步骤后,我们已经安装配置完成了全部工作,接下来就是测试了。因为执行文件全部在/usr/bin目录下,我们切换到这里,并新建一个test.txt文件,随便写一点什么,我写了This is a test file. by:mafly这句话在里边。然后测试上传:

cd/usr/bin

vim test.txt

fdfs_test/etc/fdfs/client.conf upload test.txt

cd /etc/fdfs

cp client.conf.sample client.conf

vim client.conf

/usr/bin/fdfs_test /etc/fdfs/client.conf upload/usr/bin/test.txt

成功啦!!!返回文件信息及上传后的文件 HTTP 地址,你打开浏览器访问一下试试

封装

官方提供了java客户端的封装开源代码,我们可以自行下载进行上传下载测试

https://github.com/happyfish100/fastdfs-client-java

总结

这篇文章一步一步的讲了通过 Nginx 结合fastdfs-nginx-module模块来进行上传测试及下载工作,当然这也需要结合上一篇 Tracker 和 Storage 服务来进行,这算是整体进行了 FastDFS 的安装与配置,分布式的配置也几乎和这没差别,只不过是增加了不同组和多台服务器,有机会希望你亲自试试。

可能接下来,我会结合项目中实际使用再写一下关于 FastDFS 的一些使用感受吧,可能是怎样搭建一个近乎商用的文件系统,上传下载分享好用到爆,好吧,我又吹牛了。接下来其实还有更多关于文件的工作,比如防盗链、图片切图、视频处理等等。

哈哈,先这样吧。

Fasfdfs搭建的更多相关文章

  1. linux搭建FastDFS文件服务器

    本文主要介绍在linux服务器如何搭建FastDFS文件服务器.大概分为9个步骤,由于内容较为繁琐.下面带你入坑! 首先简单介绍一下FastDFS是淘宝资深架构师余庆老师主导开源的一个分布式文件系统, ...

  2. 分布式文件系统FastDFS简介、搭建、与SpringBoot整合实现图片上传

    之前大学时搭建过一个FastDFS的图片服务器,当时只是抱着好奇的态度搭着玩一下,当时搭建采用了一台虚拟机,tracker和storage服务在一台机器上放着,最近翻之前的博客突然想着在两台机器上搭建 ...

  3. linux搭建FastDFS文件服务器,安装nginx

    本文主要介绍在linux服务器如何搭建FastDFS文件服务器.大概分为9个步骤,由于内容较为繁琐.下面带你入坑! 首先简单介绍一下FastDFS是淘宝资深架构师余庆老师主导开源的一个分布式文件系统, ...

  4. Online Judge(OJ)搭建(第一版)

    搭建 OJ 需要的知识(重要性排序): Java SE(Basic Knowledge, String, FileWriter, JavaCompiler, URLClassLoader, Secur ...

  5. Angular2入门系列教程1-使用Angular-cli搭建Angular2开发环境

    一直在学Angular2,百忙之中抽点时间来写个简单的教程. 2016年是前端飞速发展的一年,前端越来越形成了(web component)组件化的编程模式:以前Jquery通吃一切的田园时代一去不复 ...

  6. 总结:Mac前端开发环境的搭建(配置)

    新年新气象,在2016年的第一天,我入手了人生中第一台自己的电脑(大一时好友赠送的电脑在一次无意中烧坏了主板,此后便不断借用别人的或者网站的).macbook air,身上已无分文...接下来半年的房 ...

  7. Angular企业级开发(5)-项目框架搭建

    1.AngularJS Seed项目目录结构 AngularJS官方网站提供了一个angular-phonecat项目,另外一个就是Angular-Seed项目.所以大多数团队会基于Angular-S ...

  8. 【分享】标准springMVC+mybatis项目maven搭建最精简教程

    文章由来:公司有个实习同学需要做毕业设计,不会搭建环境,我就代劳了,顺便分享给刚入门的小伙伴,我是自学的JAVA,所以我懂的.... (大图直接观看显示很模糊,请在图片上点击右键然后在新窗口打开看) ...

  9. 一起学微软Power BI系列-使用技巧(4)Power BI中国版企业环境搭建和帐号问题

    千呼万唤的Power BI中国版终于落地了,相信12月初的微软技术大会之后已经铺天盖地的新闻出现了,不错,Power BI中国版真的来了,但还有些遗憾,国际版的一些重量级服务如power bi emb ...

  10. 从0开始搭建SQL Server AlwaysOn 第一篇(配置域控)

    从0开始搭建SQL Server AlwaysOn 第一篇(配置域控) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www.cnb ...

随机推荐

  1. [转帖]Linux小知识:sudo su和su的区别

    https://www.cnblogs.com/jiading/p/11717388.html su是申请切换root用户,需要申请root用户密码.有些Linux发行版,例如ubuntu,默认没有设 ...

  2. Oracle 建立数据库dblink 然后同步部分表内容的总结

    同步处理部分数据 背景 最近在项目上发现两个分库进行数据同步时部分内容同步存在问题. 最简单的方法是导表,但是害怕有其他关联信息异常, 所以同事想到了dblink的方式. 这里简单整理一下 同事用到的 ...

  3. Linux应用程序下网络栈参数的简单整理

    somaxconn 该参数应该是决定一个服务能够同时处理多少个网络请求的核心参数. 一个程序能够支持多少个访问参数,是有两部分来决定, 第一部分是somaxconn ,第二部分是应用服务器启动时传递过 ...

  4. &&运算提高代码质量

    sendGiveWeb: { code: 200, success: true, data: [ { id: "1230", name: "lh" }, { i ...

  5. 【小测试】读取*.proto文件,再读取service中method的注释

    想要在proto3中定义service,及其service的method.然后在method后面加上特殊注释,通过这个特殊注释来动态生成代码. 下面是测试代码: import ( "gith ...

  6. kettle系统列文章03---如何建立一个作业

    上篇文章我们建立好了转换,我们希望这个转换可以做成定时任务,每一分钟执行一次 第一步:创建作业开始节点:文件---->新建---->作业----核心对象---->通用-----> ...

  7. 微信小程序-Storage

    官方文档地址:https://developers.weixin.qq.com/miniprogram/dev/api/storage/wx.setStorageSync.html ?> Sto ...

  8. 微信小程序-常用弹窗

    官方文档:https://developers.weixin.qq.com/miniprogram/dev/api/ui/interaction/wx.showToast.html showToast ...

  9. 从零开始搭建医药领域知识图谱实现智能问答与分析服务(含码源):含Neo4j基于垂直网站数据的医药知识图谱构建、医药知识图谱的自动问答等

    从零开始搭建医药领域知识图谱实现智能问答与分析服务(含码源):含Neo4j基于垂直网站数据的医药知识图谱构建.医药知识图谱的自动问答等 项目介绍 关于知识图谱概念性的介绍就不在此赘述.目前知识图谱在各 ...

  10. Kubernetes:kube-scheduler 源码分析

    0. 前言 [译] kubernetes:kube-scheduler 调度器代码结构概述 介绍了 kube-scheduler 的代码结构.本文围绕代码结构,从源码角度出发,分析 kube-sche ...