使用 FastDFS 搭建图片服务器单实例篇

本贴最后更新于 2315 天前,其中的信息可能已经事过境迁

一、背景描述

之前公司的图片服务器已经不能胜任了(直接使用tomcat),需要重新搭建图片服务器,这两天研究了下FastDFS,感觉挺好用记录下来以供日后参考。

二、FastDFS 官方介绍

FastDFS 是一款类 Google FS 的开源分布式文件系统,它用纯 C 语言实现,支持 Linux、FreeBSD、AIX 等 UNIX 系统。它只能通过 专有 API 对文件进行存取访问,不支持 POSIX 接口方式,不能 mount 使用。准确地讲,Google FS 以及 FastDFS、mogileFS、 HDFS、TFS 等类 Google FS 都不是系统级的分布式文件系统,而是应用级的分布式文件存储服务。

1、FastDFS 架构图
3336d1ebf2be45eab03927dcfe939769.png
图 1:FastDFS 架构图

1)Tracker cluster中各个tracker server相互独立,不进行相互通信。

2)Storage cluster中各个storage组(Volume1,Volume2...)相互独立,不进行相互通信,也就是说各个组之间保存的数据是不相同的。但是各个组中的storage server之间是属于互相备份的关系,也就是说storage server之间保存相同的数据。

3)每个storage server会启动一个单独的线程主动向Tracker cluster中每个tracker server报告其状态信息,包括磁盘使用情况,文件同步情况及文件上传下载次数统计等信息。

2、文件上传和下载的时序图
![63f8330316fa4f779c1bf85fdff45f04.png](//p12bgfv4l.bkt.clouddn.com//file/2017/12/63f8330316fa4f779c1bf85fdff45f04.png) 

图 2:文件上传时序图

1)Client通过Tracker server将文件上传到Storage server。

2)Tracker server向Client返回一台可用的Storage server的IP地址和端口号。

3)Client直接通过Tracker server返回的IP地址和端口与其中一台Storage server建立连接并进行文件上传。

65d3c8037ce3418f9825d8b28531467a.png

图 3:文件下载时序图

1)Client通过Tracker server下载指定Storage组中某个Storage server上的某个文件(文件名包括Storage组名称)。

2)Tracker server向Client返回一台可用的Storage server的IP地址和端口号。

3)Client直接通过Tracker server返回的IP地址和端口与其中一台Storage server建立连接并进行文件下载。

4)上传完成,Storage server返回Client一个文件ID,文件上传结束。

三、安装并配置 FastDFS

** 1、运行环境及相关软件**

CentOS 6.5

FastDFS_v5.08.tar.gz

nginx-1.8.1.tar.gz

fastdfs-nginx-module_v1.16.tar.gz

libfastcommon

**2、服务器规划**

1.png

**3、安装FastDFS**

1)首先创建工具目录(非必须)

[root@fastdfs-storage ~]# mkdir -p /home/oldcat/tools[root@fastdfs-storage ~]# cd /home/oldcat/tools/

2) 下载并安装 FastDFS 依赖包 libfastcommon

[root@fastdfs-storage tools]# wget https://codeload.github.com/happyfish100/libfastcommon/zip/master
[root@fastdfs-storage tools]# unzip master
[root@fastdfs-storage tools]# cd libfastcommon-master/
[root@fastdfs-storage libfastcommon-master]# lsHISTORY  INSTALL  libfastcommon.spec  make.sh  php-fastcommon  README  src
[root@fastdfs-storage libfastcommon-master]# ./make.sh[root@fastdfs-storage libfastcommon-master]# ./make.sh install

3)下载并安装 FastDFS

[root@fastdfs-tracker tools]# wget http://jaist.dl.sourceforge.net/project/fastdfs/FastDFS%20Server%20Source%20Code/FastDFS%20Server%20with%20PHP%20Extension%20Source%20Code%20V5.08/FastDFS_v5.08.tar.gz
[root@fastdfs-tracker tools]# tar xf FastDFS_v5.08.tar.gz
[root@fastdfs-tracker tools]# cd FastDFS
[root@fastdfs-tracker FastDFS]# ./make.sh && ./make.sh install

** 采用默认方式安装后的文件及目录:**

1)服务脚本:

[root@fastdfs-tracker ~]# ll /etc/init.d/ |grep fdfs
-rwxr-xr-x. 1 root root   918 4月  22 22:08 fdfs_storaged
-rwxr-xr-x. 1 root root   920 4月  22 22:08 fdfs_trackerd

2)样例配置文件

[root@fastdfs-tracker ~]# ll /etc/fdfs/
总用量 20
-rw-r--r--. 1 root root 1461 4月  22 22:08 client.conf.sample
-rw-r--r--. 1 root root 7927 4月  22 22:08 storage.conf.sample
-rw-r--r--. 1 root root 7200 4月  22 22:08 tracker.conf.sample

3)命令行工具

[root@fastdfs-tracker ~]# ll /usr/bin|grep fdfs
-rwxr-xr-x.   1 root root     252272 4月  22 22:08 fdfs_appender_test
-rwxr-xr-x.   1 root root     252225 4月  22 22:08 fdfs_appender_test1
-rwxr-xr-x.   1 root root     242449 4月  22 22:08 fdfs_append_file
-rwxr-xr-x.   1 root root     242013 4月  22 22:08 fdfs_crc32
-rwxr-xr-x.   1 root root     242508 4月  22 22:08 fdfs_delete_file
-rwxr-xr-x.   1 root root     243627 4月  22 22:08 fdfs_download_file
-rwxr-xr-x.   1 root root     243369 4月  22 22:08 fdfs_file_info
-rwxr-xr-x.   1 root root     255657 4月  22 22:08 fdfs_monitor
-rwxr-xr-x.   1 root root     863913 4月  22 22:08 fdfs_storaged
-rwxr-xr-x.   1 root root     258712 4月  22 22:08 fdfs_test
-rwxr-xr-x.   1 root root     257881 4月  22 22:08 fdfs_test1
-rwxr-xr-x.   1 root root     365232 4月  22 22:08 fdfs_trackerd
-rwxr-xr-x.   1 root root     243547 4月  22 22:08 fdfs_upload_appender
-rwxr-xr-x.   1 root root     244453 4月  22 22:08 fdfs_upload_file

**** 注意:虽然 FastDFS 区分 tracker 和 storage 服务器,但是安装的软件及步骤均相同,只是不同的配置文件而已,因此以上安装适用 tracker server 和 storage server****

** 4、配置跟踪服务器(tracker server)**

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

[root@fastdfs-tracker ~]# cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
[root@fastdfs-storage ~]# cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
2)编辑tracker server配置文件tracker.conf,需要修改内容如下:
disabled=false(默认为false,表示是否无效)
port=22122(默认为22122)
base_path=/data/fastdfs/tracker
3)编辑client端的配置文件client.conf,需要修改内容如下
base_path=/data/fastdfs/tracker
tracker_server=172.18.10.232:22122

4)创建 tracker server 数据目录

[root@fastdfs-tracker ~]# mkdir -p /data/fastdfs/tracker    

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

[root@fastdfs-tracker ~]# cd /data/fastdfs/tracker/
[root@fastdfs-tracker tracker]# ls
[root@fastdfs-tracker tracker]# /etc/init.d/fdfs_trackerd start
Starting FastDFS tracker server:
[root@fastdfs-tracker tracker]# ss -lntup|grep 22122
tcp    LISTEN     0      128                    *:22122                 *:*      users:(("fdfs_trackerd",3785,5)) 
[root@fastdfs-tracker tracker]# ls
data  logs

6)关闭 tracker server

[root@fastdfs-tracker tracker]# /etc/init.d/fdfs_trackerd stop
waiting for pid [3785] exit ...
pid [3785] exit.

** 5、配置存储服务器(storage server)**

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

2)编辑storage server配置文件storage.conf,需要修改内容如下:
disabled=false(默认为false,表示是否无效)
port=23000(默认为23000)
base_path=/data/fastdfs/storage
tracker_server=172.18.10.232:22122
store_path0=/data/fastdfs/storage
http.server_port=8888(默认为8888,nginx中配置的监听端口那之一致)
3)创建storage server数据目录

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

[root@fastdfs-storage ~]# cd /data/fastdfs/storage/
[root@fastdfs-storage storage]# ls
[root@fastdfs-storage storage]# /etc/init.d/fdfs_storaged start
Starting FastDFS storage server:
[root@fastdfs-storage storage]# ss -lntup|grep 23000
tcp    LISTEN     0      128                    *:23000                 *:*      users:(("fdfs_storaged",3786,5))
[root@fastdfs-storage storage]# ls
data  logs

** 6、文件上传测试**

执行如下上传命令:

[root@fastdfs-tracker ~]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /home/oldcat/imgs/test.jpg
group1/M00/00/00/rBIK6VcaP0aARXXvAAHrUgHEviQ394.jpg
返回文件ID即说明文件已经上传成功

四、存储服务器(storage server)安装并配置 nginx

1)下载并安装fastdfs-nginx-module模块

注:FastDFS通过Tracker服务器,将文件放在Storage服务器存储,但是同组存储服务器之间需要进入文件复制,有同步延迟的问题。假设Tracker服务器将文件上传到了192.168.4.125,上传成功后文件ID已经返回给客户端。此时FastDFS存储集群机制会将这个文件同步到同组存储192.168.4.126,在文件还没有复制完成的情况下,客户端如果用这个文件ID在192.168.4.126上取文件,就会出现文件无法访问的错误。而fastdfs-nginx-module可以重定向文件连接到源服务器取文件,避免客户端由于复制延迟导致的文件无法访问错误。
[root@fastdfs-storage  tools]# wget http://nchc.dl.sourceforge.net/project/fastdfs/FastDFS%20Nginx%20Module%20Source%20Code/fastdfs-nginx-module_v1.16.tar.gz
[root@fastdfs-storage tools]# tar xf fastdfs-nginx-module_v1.16.tar.gz 
[root@fastdfs-storage tools]# cd fastdfs-nginx-module/src/
[root@fastdfs-storage src]# vim config
编辑config文件,执行如下命令进行批量替换并保存退出
:%s+/usr/local/+/usr/+g
2)拷贝fastdfs-nginx-module模块中配置文件到/etc/fdfs目录中并编辑
[root@fastdfs-storage ~]# cp /home/oldcat/tools/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
[root@fastdfs-storage ~]# vim /etc/fdfs/mod_fastdfs.conf
修改内容如下:connect_timeout=10
base_path=/tmp(默认为/tmp)
tracker_server=172.18.10.232:22122
storage_server_port=23000(默认配置为23000)
url_have_group_name = true
store_path0=/data/fastdfs/storage
group_name=group1(默认配置为group1)
3)安装nginx依赖库
[root@fastdfs-storage nginx-1.8.1]# yum install -y pcre-devel zlib-devel
4)下载并安装nginx
[root@fastdfs-storage  tools]# wget http://nginx.org/download/nginx-1.8.1.tar.gz
[root@fastdfs-storage tools]# tar xf nginx-1.8.1.tar.gz 
[root@fastdfs-storage tools]# cd nginx-1.8.1
[root@fastdfs-storage nginx-1.8.1]# ./configure --prefix=/application/nginx/ --add-module=../fastdfs-nginx-module/src/
[root@fastdfs-storage nginx-1.8.1]# make && make install
5)拷贝FastDFS中的部分配置文件到/etc/fdfs目录中
[root@fastdfs-storage ~]# cp /home/oldcat/tools/FastDFS/conf/http.conf /etc/fdfs/
[root@fastdfs-storage ~]# cp /home/oldcat/tools/FastDFS/conf/mime.types /etc/fdfs/
6)配置nginx,如下所示:

[root@fastdfs-storage ~]# vim /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;
}
}
}

说明:

a、"user root"是解决下载操作时报 404 的问题

b、8888 端口号与/etc/fdfs/storage.conf 中的 http.server_port=8888 相对应

c、storage 对应有多个 group 的情况下,访问路径带 group 名称,例如:/group1/M00/00/00/**,对应 nginx 配置:

location ~/group[0-9]/ {
       ngx_fastdfs_module;
 }

7)拷贝nginx服务到/etc/init.d/目录下并启动
[root@fastdfs-storage ~]# cp /application/nginx/sbin/nginx /etc/init.d/
[root@fastdfs-storage ~]# /etc/init.d/nginx
[root@fastdfs-storage ~]# ss -lntup|grep 8888
tcp    LISTEN     0      128                    *:8888                  *:*      users:(("nginx",7308,6),("nginx",7309,6))
8)通过浏览器访问之前已经上传的文件

bcdae8573283471db72cf8217f78cd53.png

浏览器可以成功访问到上传的图片,说明使用 FastDFS 搭建的图片服务器成功完成!

  • 服务器

    服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。

    124 引用 • 580 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • 友情链接

    确认过眼神后的灵魂连接,站在链在!

    24 引用 • 373 回帖 • 4 关注
  • Caddy

    Caddy 是一款默认自动启用 HTTPS 的 HTTP/2 Web 服务器。

    10 引用 • 54 回帖 • 130 关注
  • API

    应用程序编程接口(Application Programming Interface)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

    76 引用 • 421 回帖 • 1 关注
  • Kafka

    Kafka 是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是现代系统中许多功能的基础。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。

    35 引用 • 35 回帖
  • OnlyOffice
    4 引用 • 28 关注
  • flomo

    flomo 是新一代 「卡片笔记」 ,专注在碎片化时代,促进你的记录,帮你积累更多知识资产。

    3 引用 • 80 回帖 • 1 关注
  • Sillot

    Sillot (汐洛)孵化自思源笔记,致力于服务智慧新彖乄,具有彖乄驱动、极致优雅、开发者友好的特点
    Github 地址:https://github.com/Hi-Windom/Sillot

    14 引用 • 4 回帖 • 26 关注
  • 国际化

    i18n(其来源是英文单词 internationalization 的首末字符 i 和 n,18 为中间的字符数)是“国际化”的简称。对程序来说,国际化是指在不修改代码的情况下,能根据不同语言及地区显示相应的界面。

    7 引用 • 26 回帖 • 3 关注
  • 强迫症

    强迫症(OCD)属于焦虑障碍的一种类型,是一组以强迫思维和强迫行为为主要临床表现的神经精神疾病,其特点为有意识的强迫和反强迫并存,一些毫无意义、甚至违背自己意愿的想法或冲动反反复复侵入患者的日常生活。

    15 引用 • 161 回帖 • 1 关注
  • 以太坊

    以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约、开源的底层系统。以太坊是一个平台和一种编程语言 Solidity,使开发人员能够建立和发布下一代去中心化应用。 以太坊可以用来编程、分散、担保和交易任何事物:投票、域名、金融交易所、众筹、公司管理、合同和知识产权等等。

    34 引用 • 367 回帖 • 2 关注
  • 资讯

    资讯是用户因为及时地获得它并利用它而能够在相对短的时间内给自己带来价值的信息,资讯有时效性和地域性。

    53 引用 • 85 回帖
  • 996
    13 引用 • 200 回帖 • 1 关注
  • BND

    BND(Baidu Netdisk Downloader)是一款图形界面的百度网盘不限速下载器,支持 Windows、Linux 和 Mac,详细介绍请看这里

    107 引用 • 1281 回帖 • 19 关注
  • SQLServer

    SQL Server 是由 [微软] 开发和推广的关系数据库管理系统(DBMS),它最初是由 微软、Sybase 和 Ashton-Tate 三家公司共同开发的,并于 1988 年推出了第一个 OS/2 版本。

    19 引用 • 31 回帖 • 3 关注
  • C

    C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

    83 引用 • 165 回帖 • 47 关注
  • 职场

    找到自己的位置,萌新烦恼少。

    126 引用 • 1699 回帖
  • Android

    Android 是一种以 Linux 为基础的开放源码操作系统,主要使用于便携设备。2005 年由 Google 收购注资,并拉拢多家制造商组成开放手机联盟开发改良,逐渐扩展到到平板电脑及其他领域上。

    333 引用 • 323 回帖 • 70 关注
  • BookxNote

    BookxNote 是一款全新的电子书学习工具,助力您的学习与思考,让您的大脑更高效的记忆。

    笔记整理交给我,一心只读圣贤书。

    1 引用 • 1 回帖 • 2 关注
  • 分享

    有什么新发现就分享给大家吧!

    242 引用 • 1746 回帖 • 1 关注
  • 正则表达式

    正则表达式(Regular Expression)使用单个字符串来描述、匹配一系列遵循某个句法规则的字符串。

    31 引用 • 94 回帖
  • Netty

    Netty 是一个基于 NIO 的客户端-服务器编程框架,使用 Netty 可以让你快速、简单地开发出一个可维护、高性能的网络应用,例如实现了某种协议的客户、服务端应用。

    49 引用 • 33 回帖 • 22 关注
  • HHKB

    HHKB 是富士通的 Happy Hacking 系列电容键盘。电容键盘即无接点静电电容式键盘(Capacitive Keyboard)。

    5 引用 • 74 回帖 • 404 关注
  • TextBundle

    TextBundle 文件格式旨在应用程序之间交换 Markdown 或 Fountain 之类的纯文本文件时,提供更无缝的用户体验。

    1 引用 • 2 回帖 • 45 关注
  • Log4j

    Log4j 是 Apache 开源的一款使用广泛的 Java 日志组件。

    20 引用 • 18 回帖 • 43 关注
  • JWT

    JWT(JSON Web Token)是一种用于双方之间传递信息的简洁的、安全的表述性声明规范。JWT 作为一个开放的标准(RFC 7519),定义了一种简洁的,自包含的方法用于通信双方之间以 JSON 的形式安全的传递信息。

    20 引用 • 15 回帖 • 17 关注
  • Windows

    Microsoft Windows 是美国微软公司研发的一套操作系统,它问世于 1985 年,起初仅仅是 Microsoft-DOS 模拟环境,后续的系统版本由于微软不断的更新升级,不但易用,也慢慢的成为家家户户人们最喜爱的操作系统。

    215 引用 • 462 回帖
  • Oracle

    Oracle(甲骨文)公司,全称甲骨文股份有限公司(甲骨文软件系统有限公司),是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩。1989 年正式进入中国市场。2013 年,甲骨文已超越 IBM,成为继 Microsoft 后全球第二大软件公司。

    103 引用 • 126 回帖 • 452 关注