设为首页 收藏本站
查看: 1533|回复: 0

[经验分享] 分布式文件系统FastDFS部署

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-11-11 08:40:00 | 显示全部楼层 |阅读模式
一、简介
        FastDFS是一款类Google FS的开源分布式文件系统,它用纯C语言实现,支持Linux、FreeBSD、AIX等UNIX系统。它只能通过专有API对文件进行存取访问,不支持POSIX接口方式,不能mount使用。准确地讲,Google FS以及FastDFS、mogileFS、HDFS、TFS等类Google FS都不是系统级的分布式文件系统,而是应用级的分布式文件存储服务。

二、FastDFS的架构

图1展示的是FastDFS的系统架构。


0_1290769914CRAz.jpg


图1 FastDFS的系统架构


从图1可以看出,Tracker server之间相互独立,不存在直接联系。

客户端和Storage server主动连接Tracker server。Storage server主动向Tracker server报告其状态信息,包括磁盘剩余空间、文件同步状况、文件上传下载次数等统计信息。Storage server会连接集群中所有的Tracker server,向他们报告自己的状态。Storage server启动一个单独的线程来完成对一台Tracker server的连接和定时报告。需要说明的是,一个组包含的Storage server不是通过配置文件设定的,而是通过Tracker server获取到的。

不同组的Storage server之间不会相互通信,同组内的Storage server之间会相互连接进行文件同步。

Storage server采用binlog文件记录文件上传、删除等更新操作。binlog中只记录文件名,不记录文件内容。

文件同步只在同组内的Storage server之间进行,采用push方式,即源头服务器同步给目标服务器。只有源头数据才需要同步,备份数据并不需要再次同步,否则就构成环路了。有个例外,就是新增加一台Storage server时,由已有的一台Storage server将已有的所有数据(包括源头数据和备份数据)同步给该新增服务器。

Storage server中由专门的线程根据binlog进行文件同步。为了最大程度地避免相互影响以及出于系统简洁性考虑,Storage server对组内除自己以外的每台服务器都会启动一个线程来进行文件同步。

文件同步采用增量同步方式,系统记录已同步的位置(binlog文件偏移量)到标识文件中。标识文件名格式:{dest storage IP}_{port}.mark,例如:192.168.1.14_23000.mark。


三、文件上传和下载的交互过程

接下来我们一起看一下文件上传和下载的交互过程。文件上传和下载流程分别如图2、图3所示。文件上传流程的步骤如下:


0_1290769967A4Li.jpg

图2 文件上传流程


0_1290770024DO90.jpg

图3 文件下载流程


1. Client询问Tracker server上传到的Storage server;

2. Tracker server返回一台可用的Storage server,返回的数据为该Storage server的IP地址和端口;

3. Client直接和该Storage server建立连接,进行文件上传,Storage server返回新生成的文件ID,文件上传结束。


文件下载流程的步骤如下:

1. Client询问Tracker server可以下载指定文件的Storage server,参数为文件ID(包含组名和文件名);

2. Tracker server返回一台可用的Storage server;

3. Client直接和该Storage server建立连接,完成文件下载。

四、ip地址分配(本文默认关闭防火墙)
    1.172.16.8.8 nginx tracker

    2.172.16.8.9 storage1

    3.172.168.8.10 storage2
    备注:所有的下载地址为http://sourceforge.net/projects/fastdfs/files/?source=navbar
五、安装tracker
    1.安装

1
2
3
4
5
6
7
# wget
# tar xf download
# cd FastDFS/
# ./make.sh 运行文件
有报错信息
compilation terminated.
make: *** [../common/fdfs_global.o] Error 1



    2.查看官方文档,需要安装libfastcommon
1
2
3
4
5
6
7


  #  wget https://github.com/happyfish100/libfastcommon/archive/master.zip
  # unzip master.zip
  # cd libfastcommon-master/
  #  ./make.sh
  # ./make.sh install



    3.继续安装FastDFS

1
2
3
  # cd FastDFS/
  #  ./make.sh
  # ./make.sh install



    4.配置

1
2
3
4
5
6
7
# cd /etc/fdfs/
# cp tracker.conf.sample tracker.conf
修改配置文件
disabled=false        #启用配置文件
port=22122          #设置tracker的端口号
base_path=/data/fastdfs/trackerd   #设置tracker的数据文件和日志目录(需预先创建)
http.server_port=18080     #设置http端口号



    5.启动

1
2
3
4
# mkdir -p /data/fastdfs/trackerd
# /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
设置开机启动
# echo '/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart' >> /etc/rc.d/rc.local



六、安装storage(两台都一样,本出给出一台配置)
    1.安装 与tracker 安装步骤相同
    2.配置

1
2
3
4
5
6
7
8
disabled=false            #启用配置文件
group_name=group1         #组名,根据实际情况修改
port=23000                #设置storage的端口号
base_path=/data/fastdfs/storage   #设置storage的日志目录(需预先创建)
store_path_count=1        #存储路径个数,需要和store_path个数匹配
store_path0=/data/fastdfs/storage  #存储路径
tracker_server=172.16.8.8:22122 #tracker服务器的IP地址和端口号
http.server_port=18888     #设置http端口号



    3.启动

1
2
3
4
# mkdir -p /data/fastdfs/storage
# /usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
设置开机启动
# echo '/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart' >> /etc/rc.d/rc.local



    4.查看状态

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



七、在storage安装nginx
    在storage上安装nginx主要为了提高http的访问服务,同时解决group中的storage服务的同步延迟问题

    1.nginx安装,可以使用源码编译,源码编译请移步本人相关博客http://www.iyunv.com/thread-91314-1-1.html,在编译安装时添加 --add-module=/root/fastdfs-nginx-module/src/
    2.配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# wget
# tar xf download.1
        3.解决报错
        make的时候会报一下错误,
        root/fastdfs-nginx-module/src//common.c:21:25: fatal error: fdfs_define.h: No such file or directory
#include "fdfs_define.h"
                         ^
compilation terminated.
make[1]: *** [objs/addon/src/ngx_http_fastdfs_module.o] Error 1
解决办法:
  vim /root/fastdfs-nginx-module/src/config

CORE_INCS="$CORE_INCS /usr/local/include/fastdfs /usr/local/include/fastcommon/"
CORE_LIBS="$CORE_LIBS -L/usr/lib -lfastcommon -lfdfsclient"
重新编译,安装即可



    4.配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# cp /root/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/.
# cp /root/FastDFS/conf/http.conf /etc/fdfs/.
/root/FastDFS/conf/mime.types /etc/fdfs/.
修改nginx的配置文件
server {
    listen       18888;
    server_name  localhost;

    location  ~/group1/M00 {
        root /fdfs/storage/data;
        ngx_fastdfs_module;
}

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

}



    6.启动nginx
八、在tracker安装nginx
    在tracker上安装的nginx主要为了提供http访问的反向代理、负载均衡已经缓存服务

    1.安装配置与storage上相同
    2.配置负载功能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
upstream fdfs_group3 {
server 172.16.1.207:8080 weight=1 max_fails=2 fail_timeout=30s;
server 172.16.1.208:8080 weight=1 max_fails=2 fail_timeout=30s;
    }

server {
#
设置服务器端口

listen       8080;
#
设置
group1
的负载均衡参数

location /group1/M00 {
            proxy_next_upstream http_502 http_504 error timeout invalid_header;
proxy_cache http-cache;
            proxy_cache_valid  200 304 12h;
            proxy_cache_key $uri$is_args$args;
            proxy_pass http://fdfs_group1;
expires 30d;



九。测试
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
cd /etc/fdfs/
cp client.conf.sample client.conf
base_path=/data/fdfs/tracker                    #
日志存放路径

tracker_server=172.16.8.8:22122          #tracker
服务器
IP
地址和端口号

http.tracker_server_port=8080              #tracker
服务器的
http
端口号
上传文件
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /root/install3.sh
group1/M00/00/00/rBAIClZB6ySAYFbtAAAGpOjLUVA6601.sh
日志报错



[2015-11-10 21:04:04] ERROR - file: ../common/fdfs_global.c, line: 52, the format of filename "group1/M00/00/00/rBAIClZB6ySAYFbtAAAGpOjLUVA6601.sh" is invalid
vi /etc/fdfs/mod_fastdfs.conf
url_have_group_name = true
再次测试上传
[iyunv@vrvap2 fdfs]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /root/new.jpg
group1/M00/00/00/rBAIClZB7fWAF2BmAADCkWSm8AA128.jpg
wKiom1ZB7kDTU0aQAAWLs_BS_pw807.jpg 测试成功,终于完成了


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-137704-1-1.html 上篇帖子: 【编译打包】fastdfs-5.0.5-7.el7.centos.src.rpm 下篇帖子: fastdfs+nginx安装详解
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表