分布式文件系统FastDFS部署

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

一、简介

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

二、FastDFS的架构

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

 


1 FastDFS的系统架构

 

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

客户端和Storage server主动连接Tracker serverStorage 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所示。文件上传流程的步骤如下:


文件上传流程

 

文件下载流程

 

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

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

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://wangfeng7399.blog.51cto.com/3518031/1403741,在编译安装时添加 --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

再次测试上传

[root@vrvap2 fdfs]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /root/new.jpg 

group1/M00/00/00/rBAIClZB7fWAF2BmAADCkWSm8AA128.jpg

wKiom1ZB7kDTU0aQAAWLs_BS_pw807.png测试成功,终于完成了



本文转自wangfeng7399 51CTO博客,原文链接:http://blog.51cto.com/wangfeng7399/1711589,如需转载请自行联系原作者


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
5月前
|
分布式计算 Java Hadoop
杨校老师课堂之分布式数据库HBase的部署和基本操作
杨校老师课堂之分布式数据库HBase的部署和基本操作
59 0
|
2月前
|
存储
cephFS高可用分布式文件系统部署指南
关于如何部署高可用的cephFS分布式文件系统,包括集群的搭建、验证高可用性以及实现两主一从架构的详细指南。
76 9
|
2月前
|
分布式计算 资源调度 Hadoop
在YARN集群上运行部署MapReduce分布式计算框架
主要介绍了如何在YARN集群上配置和运行MapReduce分布式计算框架,包括准备数据、运行MapReduce任务、查看任务日志,并启动HistoryServer服务以便于日志查看。
61 0
|
3月前
|
Java Nacos Docker
"揭秘!Docker部署Seata遇上Nacos,注册成功却报错?这些坑你不得不防!一网打尽解决秘籍,让你的分布式事务稳如老狗!"
【8月更文挑战第15天】在微服务架构中,Nacos搭配Seata确保数据一致性时,Docker部署Seata后可能出现客户端连接错误,如“can not connect to services-server”。此问题多由网络配置不当、配置文件错误或版本不兼容引起。解决策略包括:调整Docker网络设置确保可达性;检查并修正`file.conf`和`registry.conf`中的Nacos地址和端口;验证Seata与Nacos版本兼容性;修改配置后重启服务;参考官方文档和最佳实践进行配置。通过这些步骤,能有效排除故障,保障服务稳定运行。
264 0
|
3月前
|
存储 运维 安全
多云网络部署存在挑战,F5分布式云应用简化方案解读
多云网络部署存在挑战,F5分布式云应用简化方案解读
50 0
|
6月前
|
关系型数据库 MySQL 数据库
测试部署PolarDB-X 分布式与集中式
在本文中,作者详述了在CentOS 7.9上部署测试PolarDB-X分布式与集中式数据库的过程。PolarDB-X作为阿里云优化的分布式数据库,提供高稳定性和与MySQL的兼容性,是应对单体数据库扩展性和性能瓶颈的解决方案,同时也符合国产化需求。文章介绍了部署环境准备,包括关闭防火墙和SELinux,设置系统参数,安装Python3和Docker,以及配置MySQL客户端。接着,通过PXD工具部署了PolarDB-X的集中式和分布式版,遇到的问题包括阿里云镜像源异常导致的部署失败以及指定版本安装的困扰。最后,作者进行了初步的压力测试,并对文档完善、生态工具建设以及提供更多使用案例提出了建议。
47957 10
测试部署PolarDB-X 分布式与集中式
|
4月前
|
缓存 Devops 微服务
微服务01好处,随着代码越多耦合度越多,升级维护困难,微服务技术栈,异步通信技术,缓存技术,DevOps技术,搜索技术,单体架构,分布式架构将业务功能进行拆分,部署时费劲,集连失败如何解决
微服务01好处,随着代码越多耦合度越多,升级维护困难,微服务技术栈,异步通信技术,缓存技术,DevOps技术,搜索技术,单体架构,分布式架构将业务功能进行拆分,部署时费劲,集连失败如何解决
|
6月前
|
SQL 消息中间件 存储
【一文看懂】使用hape部署分布式版Havenask
本次分享内容为使用hape部署分布式版Havenask,共2个部分组成(部署分布式版Havenask集群、 分布式相关问题排查),希望可以帮助大家更好了解和使用Havenask。
165133 6
|
6月前
|
Java 大数据 流计算
使用Docker快速部署Flink分布式集群
使用Docker快速部署Flink分布式集群
734 0
|
6月前
使用JWT的服务分布式部署之后报错:JWT Check Failure:
使用JWT的服务分布式部署之后报错:JWT Check Failure:
109 1

热门文章

最新文章