文档章节

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

沉淀岁月
 沉淀岁月
发布于 2017/09/04 21:01
字数 2336
阅读 28
收藏 2

一、背景描述

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

 

二、FastDFS官方介绍

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

    1、FastDFS架构图

    wKioL1cZmp3xhDAdAAMMQuy6qEc170.jpg

                                                            图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、文件上传和下载的时序图

         

wKioL1cZm1KwweSxAACFK-IhvCs899.jpg

                                    图2:文件上传时序图

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

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

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

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

                              

wKiom1cZmo-RxJsXAACFly7rbaQ068.jpg

                                     图3:文件下载时序图

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

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

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

 

三、安装并配置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、服务器规划

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

    3、安装FastDFS

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

1

2

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

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

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

1

2

3

4

5

6

7

[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]# ls

HISTORY  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  

1

2

3

4

[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)服务脚本:

1

2

3

[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)样例配置文件

1

2

3

4

5

[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)命令行工具

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

[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端样例配置文件并重命名

1

2

[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,需要修改内容如下:

1

2

3

    disabled=false(默认为false,表示是否无效)

    port=22122(默认为22122)

    base_path=/data/fastdfs/tracker

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

1

2

    base_path=/data/fastdfs/tracker

    tracker_server=172.18.10.232:22122

    4)创建tracker server数据目录

1

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

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

1

2

3

4

5

6

7

8

[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

1

2

3

[root@fastdfs-tracker tracker]# /etc/init.d/fdfs_trackerd stop

waiting for pid [3785] exit ...

pid [3785] exit.

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

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

1

[root@fastdfs-storage ~]# cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf

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

1

2

3

4

5

6

    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数据目录

1

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

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

1

2

3

4

5

6

7

8

[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、文件上传测试

    执行如下上传命令:

1

2

3

[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可以重定向文件连接到源服务器取文件,避免客户端由于复制延迟导致的文件无法访问错误。

1

2

3

4

5

6

[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目录中并编辑

1

2

3

4

5

6

7

8

9

10

[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依赖库

1

[root@fastdfs-storage nginx-1.8.1]# yum install -y pcre-devel zlib-devel

    4)下载并安装nginx

1

2

3

4

5

[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目录中

1

2

[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,如下所示:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

[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/目录下并启动

1

2

3

4

[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)通过浏览器访问之前已经上传的文件

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

本文转载自:http://oldcat1981.blog.51cto.com/10670523/1766810

共有 人打赏支持
沉淀岁月
粉丝 25
博文 257
码字总数 91615
作品 0
朝阳
高级程序员
FastDFS安装使用实战一(安装篇)

最近在研究负载均衡和集群,其中涉及到一个主要问题是,如何让集群中的real server共享一套文件系统。在网上查到FastDFS,国人(happy fish,感谢他的开源精神)开发的一套轻量级分布式文件系...

凯文加内特
2015/03/30
0
0
FastDFS分布式文件存储搭建

FastDFS分布式文件存储,具体介绍不在阐述,有很多相关的资料介绍。这里描述一下FastDFS存储应用的搭建过程: 一、环境: 1、操作系统 :centos6.5 2、FastDFS版本: 5.0.8 3、Nginx版本: ...

菜鸟早起
06/12
0
0
FASTDFS在OPENSUSE环境搭建

源码:http://code.google.com/p/fastdfs/ 论坛:http://bbs.chinaunix.net/forum-240-1.html 配置说明:http://bbs.chinaunix.net/thread-1941456-1-1.html 安装篇 1. 服务器说明 角色 IP 操......

大草原上的一个娃
2014/03/14
0
0
FastDFS安装 --> 测试

自己闲着没事,在小黑上虚拟了 4 个 centos 64 的系统,用来安装分布式 fastdfs 、 nginx 负载均衡,过程一路艰辛,搞了一个通宵都没弄好,终于在第二天的傍晚终于弄好了,记录一下过程。 有...

shking
2013/10/05
0
0
Centos7单台服务器搭建FastDFS+Nginx

Fastdfs+Nginx配置操作 单台配置 安装包下载: wget https://github.com/happyfish100/libfastcommon/archive/V1.0.7.tar.gz wget http://jaist.dl.sourceforge.net/project/fastdfs/FastDF......

独狼的小窝
06/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

此生1.3

颜值是开胃菜,不要太在意,正餐才是重点。

colinux
今天
1
0
[雪峰磁针石博客]软件测试专家工具包1web测试

web测试 本章主要涉及功能测试、自动化测试(参考: 软件自动化测试初学者忠告) 、接口测试(参考:10分钟学会API测试)、跨浏览器测试、可访问性测试和可用性测试的测试工具列表。 安全测试工具...

python测试开发人工智能安全
今天
3
0
JS:异步 - 面试惨案

为什么会写这篇文章,很明显不符合我的性格的东西,原因是前段时间参与了一个面试,对于很多程序员来说,面试时候多么的鸦雀无声,事后心里就有多么的千军万马。去掉最开始毕业干了一年的Jav...

xmqywx
今天
3
0
Win10 64位系统,PHP 扩展 curl插件

执行:1. 拷贝php安装目录下,libeay32.dll、ssleay32.dll 、 libssh2.dll 到 C:\windows\system32 目录。2. 拷贝php/ext目录下, php_curl.dll 到 C:\windows\system32 目录; 3. p...

放飞E梦想O
今天
1
0
谈谈神秘的ES6——(五)解构赋值【对象篇】

上一节课我们了解了有关数组的解构赋值相关内容,这节课,我们接着,来讲讲对象的解构赋值。 解构不仅可以用于数组,还可以用于对象。 let { foo, bar } = { foo: "aaa", bar: "bbb" };fo...

JandenMa
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部