浅析FastDFS及所遇问题集锦

一、FastDFS简介

FastDFS(最新版本v3.04)是一个开源的轻量级分布式文件系统,它用纯C语言实现,支持Linux、FreeBSD、AIX等UNIX系统。它只能通过专有API对文件进行存取访问,不支持POSIX接口方式,不能mount使用,不是系统级的分布式文件系统,而是应用级的分布式文件存储服务。

二、FastDFS用途

1)FastDFS主要解决了大容量的文件存储和高并发访问的问题,文件存取时实现了负载均衡。

2)FastDFS实现了软件方式的RAID,可以使用廉价的IDE硬盘进行存储 ,支持存储服务器在线扩容。

3)FastDFS特别适合大中型网站使用,用来存储资源文件(如:图片、文档、音频、视频等等。

三、FastDFS原理

存储节点采用了分组(group)的方式。存储系统由一个或多个group组成,group与group之间的文件是相互独立的,所有group的文件容量累加就是整个存储系统中的文件容量。一个group可以由一台或多台存储服务器组成,一个group下的存储服务器中的文件都是相同的,group中的多台存储服务器起到了冗余备份和负载均衡的作用(一个组的存储容量为该组内存储服务器容量最小的那个,不同组的Storage server之间不会相互通信,同组内的Storage server之间会相互连接进行文件同步)。

在group中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。

当存储空间不足或即将耗尽时,可以动态添加group。只需要增加一台或多台服务器,并将它们配置为一个新的group,这样就扩大了存储系统的容量。

FastDFS只有两个角色:Tracker server和Storage server。Tracker server作为中心结点,其主要作用是负载均衡和调度。Tracker server在内存中记录分组和Storage server的状态等信息,不记录文件索引信息,占用的内存量很少。另外,客户端(应用)和Storage server访问Tracker server时,Tracker server扫描内存中的分组和Storage server信息,然后给出应答。由此可以看出Tracker server非常轻量化,不会成为系统瓶颈。

FastDFS中的Storage server在其他文件系统中通常称作Trunk server或Data server。Storage server直接利用OS的文件系统存储文件。FastDFS不会对文件进行分块存储,客户端上传的文件和Storage server上的文件一一对应(FastDFS中的文件标识分为两个部分:组名和文件名,二者缺一不可)。

四、Nginx环境调用FastDFS要求

1)编译安装 nginx时附带 fastdfs-nginx-module 模块 –add-module=/root/fastdfs-nginx-module/src

2)修改 nginx 配置文件增加 ngx_fastdfs_module;

3)编译fastdfs_client.so php扩展模块

4)修改 php.ini 让 php-fpm 支持fastdfs_client 扩展模块 extension = fastdfs_client.so

注意:如果要使fastdfs支持web和开机自动脚本(默认是不支持的),需要修改make.sh文件

#WITH_HTTPD=1

#WITH_LINUX_SERVICE=1

(因为是给nginx添加fastdfs模块,所以不需要fastdfs支持 http 所以就不需要去掉 #WITH_HTTPD=1 前的注释了)。

五、所遇问题

1. FastDFS适用的场景以及不适用的场景?

FastDFS是为互联网应用量身定做的一套分布式文件存储系统,非常适合用来存储用户图片、视频、文档等文件。对于互联网应用,和其他分布式文件系统相比,优势非常明显。FastDFS没有对文件做分块存储,因此不太适合分布式计算场景。

2. FastDFS需要的编译和运行环境是怎样的?

FastDFS Server仅支持unix系统,在Linux和FreeBSD测试通过。在Solaris系统下网络通信方面有些问题。编译需要的其他库文件有pthread和libevent。pthread使用系统自带的即可。对libevent的版本要求为1.4.x,建议使用最新的stable版本,如1.4.14b。注意,千万不要使用libevent 2.0 stable以前的版本。

3. 启动storage server时,一直处于僵死状态。

启动storage server,storage将连接tracker server,如果连不上,将一直重试。直到连接成功,启动才算真正完成。

出现这样情况,请检查连接不上tracker server的原因。

友情提示:从V2.03以后,多tracker server在启动时会做时间上的检测,判断是否需要从别的tracker server同步4个系统文件。

触发时机是第一个storage server连接上tracker server后,并发起join请求。

如果集群中有2台tracker server,而其中一台tracker没有启动,可能会导致storage server一直处于僵死状态。

4. 执行fdfs_test或fdfs_test1上传文件时,服务器返回错误号2

错误号2表示没有ACTIVE状态的storage server。可以执行fdfs_monitor查看服务器状态。

5. 如何删除无效的storage server?

可以使用fdfs_monitor来删除。命令行如下:

/usr/local/bin/fdfs_monitor delete

例如:

/usr/local/bin/fdfs_monitor /etc/fdfs/client.conf delete group1 192.168.0.100

注意:如果被删除的storage server的状态是ACTIVE,也就是该storage server还在线上服务的情况下,是无法删除掉的。

6. nginx和apache扩展模块与FastDFS server版本对应关系

扩展模块1.05: 针对FastDFs server v2.x,要求server版本大于等于v2.09

扩展模块1.07及以上版本: 针对FastDFs server v3.x

7. 上传文件失败,返回错误码28,这是怎么回事?

返回错误码28,表示磁盘空间不足。注意FastDFS中有预留空间的概念,在tracker.conf中设置,配置项为:reserved_storage_space,缺省值为4GB,即预留4GB的空间。请酌情设置reserved_storage_space这个参数,比如可以设置为磁盘总空间的20%左右。

8. nginx扩展模块,不能正常显示图片的问题

在配置文件/etc/fdfs/mod_fastdfs.conf中,缺省的设置是这样的:http.need_find_content_type=false这个参数在nginx中需要设置为true,apache中应该设置为false

时间: 2024-08-12 15:45:50

浅析FastDFS及所遇问题集锦的相关文章

Linux内核调试的方式以及工具集锦

CSDN GitHub Linux内核调试的方式以及工具集锦 LDD-LinuxDeviceDrivers/study/debug 本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可, 转载请注明出处, 谢谢合作 因本人技术水平和知识面有限, 内容如有纰漏或者需要修正的地方, 欢迎大家指正, 也欢迎大家提供一些其他好的调试工具以供收录, 鄙人在此谢谢啦 "调试难度本来就是写代码的两倍. 因此, 如果你写代码的时候聪明用尽, 根据定义, 你就没有能耐去调试它了.&qu

netty5 HTTP协议栈浅析与实践

阅读目录 1. 写在前面的话 1.1. 关于netty example 1.2. 关于github项目2. HTTP 协议知多少 2.1. GET请求 2.2. POST请求 2.3. HTTP POST Content-Type3. netty HTTP 编解码 3.1. netty 自带 HTTP 编解码器 3.2. HTTP GET 解析实践 3.3. HTTP POST 解析实践4. 自定义 HTTP POST 的 message body 解码器 4.1. HttpJsonDecode

浅析周易以及对周易的感悟

浅析周易 <周易>是我国现存最古老的文化典籍之一,是中华文化重要的源头,对传统思想文化有着深远的影响.几千年来,人们对于<周易>和易学文化的研究从未间断,其中对于<周易>性质的研究,自古以来就有许多不同的观点.有人说<周易>是占筮之书,有人说是哲学著作:有人说是历史文献,有人说是政治百科:有人说是道德规范,也有人说是人生指南等等. <周易>是由<易经>和<易传>两种不同性质的书所组成的.<易经>最初起源于占筮而

Json 在线格式化与定义、各语言开源库集锦

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. http://www.json.org/json-zh.html 该链接是目前使用过的最好用的在线格式化.格式校验和结构化 JSON 工具. 很多

浅析正则表达式-应用篇

一.前言 时间匆匆流去,我已经来博客园快要两年了,在这里我学会了很多知识,博客园给我带来了知识上的充实和分享的快乐!我现在要分享的是关于正则表达式的一些使用方法,在次声明:必须有一定的正则表达式的基础,否则会有些吃力,如果你对基础不是很了解请翻到这章节: 浅析正则表达式-原理篇http://www.cnblogs.com/dwlsxj/p/Regex.html 浅析正则表达式-柳暗花明又一村篇 http://www.cnblogs.com/dwlsxj/p/Reg.html 通过上面两篇文章的讲

快收藏!52篇25万字,微服务、云原生、容器、K8S、Serverless精华文章集锦

2017正在走远,新年之初,小数精选过去一年阅读量居高的技术干货,从容器.K8S 到微服务.云原生.Service Mesh,汇集成52篇精华集锦,充分反映了这一年的技术热点走向. 此文值得收藏,方便随时搜索和查看.2018,小数将继续陪伴大家,为朋友们奉献更有逼格的技术内容.2018年,在IT架构领域,你想看到哪些话题,请留言告诉我~~ 微服务篇 没说出口的研发之痛,做与不做微服务的理由请添加链接描述配置中心一团糟?微服务化改造切合企业系统需求请添加链接描述Weibo Mesh服务化实践如何应

高可用FastDFS多Group多Storage多Tracker主备结合SpringBoot

FastDFS前奏 在开始之前,这篇文章并不是初级入门的文章,在该文章发布之前已经有两篇文章讲述了FastDFS和SpringBoot相关的知识,请参阅: <Java高级架构之FastDFS分布式文件集群>:https://blog.51cto.com/xvjunjie/2377669 <SpringBoot集成FastDFS+Nginx整合基于Token的防盗链>:https://blog.51cto.com/xvjunjie/2381361 如果需要在FastDFS中实现HTT

FastDFS+Nginx问题及修复

FastDFS+nginx问题及修复:     1.[error] 30000#0: *1 open() "/usr/local/nginx/html/group1/M00/00 /00/wKgAA1cLh12AI0kfAAAADzbdjmQ50_big.html           "failed (2: No such file or directory), client: 192.168.0.181, server:localhost, request:            &

Python之encode与decode浅析

 Python之encode与decode浅析 在 python 源代码文件中,如果你有用到非ASCII字符,则需要在文件头部进行字符编码的声明,声明如下: # code: UTF-8 因为python 只检查 #.coding 和编码字符串,为了美观等原因可以如下写法: #-*-coding:utf-8-*- 常见编码介绍: GB2312编码:适用于汉字处理.汉字通信等系统之间的信息交换. GBK编码:是汉字编码标准之一,是在 GB2312-80 标准基础上的内码扩展规范,使用了双字节编码.