FastDFS注意事项

>>1.除了在storage.conf里的tracker_server增加tracker的ip和端口,其他地方要注意什么?

恩,tracker server ip和端口,肯定是要正确设置的。支持多tracker server,每行设置一个tracker。

另外,base_path也要正确设置。

其余参数,通常采用缺省配置即可。你可以看一下配置说明那个帖子。

>>每台tracker和storage的启动有没有先后关系?

正常情况下,应该先启动tracker。

FastDFS不会有这样的要求,你要启动storage也是没有任何问题的。

>>2.想要把fastDFS产生的记录清空,再重新搭建一次,应该删除哪些文件?

停止storage server和tracker server,删除base_path下的data子目录即可。

注意:storage 的data目录下保存了上传文件,删除时请慎重。

>>>>[2010-12-15 15:51:35] ERROR - file: ../common/pthread_func.c, line: 163, create thread failed, startup threads: 2173, errno: 11, error info: Resource temporarily unavailable

最后这一行已经说明问题了,创建的线程太多,使用的资源已经达到系统上限。

解决方法:继续使用现有版本,调小max_connections这个参数,比如调整为1024。

另外一个方法,升级到2.x,比如2.05。2.x采用异步IO模型,可以使用有限的几个线程,支持大量的并发连接。

比如,线程数可以配置为4,支持的最大连接数可以配置为1024或者更高。

昨天看了代码发现程序会在启动服务的时候,会创建设置的连接数,用来检验服务器是否能够支持使用者设置的最大连接。

>>>>程序中要访问,比如上传文件,可以使用FastDFS提供的java API。

客户端通过HTTP下载文件时,可以走web server,如apache、nginx等。

>>>>请问通过http下载文件时,能否让下载的文件名称自动变成原文件名称?

可以使用文件附加属性来存储该文件的原文件名。在apache或nginx扩展模块中,可以在HTTP Header中输出原文件名。

>>1、简单看了下Java client的代码,看到可以通过client api获取上传文件的group name and filename,请问能否直接通过API获取http访问地址?

A: 生成http访问地址,没有提供现成的方法,但提供了示例代码,在TestClient1.java和TestClient.java中均有。摘录一下TestClient.java中的代码如下:

int ts;

String token;

String file_url;

InetSocketAddress inetSockAddr;

System.err.println("file_id: " + file_id);

inetSockAddr = trackerServer.getInetSocketAddress();

file_url = "http://" + inetSockAddr.getAddress().getHostAddress();

if (ClientGlobal.g_tracker_http_port != 80)

{

file_url += ":" + ClientGlobal.g_tracker_http_port;

}

file_url += "/" + file_id;

if (ClientGlobal.g_anti_steal_token)

{

ts = (int)(System.currentTimeMillis() / 1000);

token = ProtoCommon.getToken(file_id, ts, ClientGlobal.g_secret_key);

file_url += "?token=" + token + "&ts=" + ts;

}

System.err.println("file url: " + file_url);

>>2、还有一个问题,每一个group是否存储了所有的上传文件;还是说group A存储一部分,group B存储一部分,同一个group中的storage server存储的文件都相同。

A: 答案为后者。即:group A存储一部分,group B存储一部分,同一个group中的storage server存储的文件都相同。

FastDFS存储服务器的硬盘可以做RAID,比如RAID5等等,这样系统中的mount point只有一个。

也可以单个硬盘直接mount使用,这样系统中的mount point就是多个(多个硬盘的情况下)。

RAID5并不能充分发挥各个磁盘的最大吞吐量,出于磁盘IO效率考虑,建议采用第二种做法,这样磁盘整体IO吞吐量最理想的情况下,为各个硬盘IO吞吐量之和。

采用多个mount point的情况下,如果有一块硬盘损坏,可以有两种修复方法:

1. 更换掉坏掉的硬盘,在服务停止的情况下,手工复制已有服务器上该路径的文件到该mount point,然后启动FastDFS服务程序fdfs_storaged;

2. 更换一台同样配置的新服务器,或者更换掉坏的硬盘后,重做系统,然后启动FastDFS服务fdfs_storaged即可。

只要${base_path}这个路径所在硬盘没有坏,也就是系统数据文件(如${base_path}/data/sync/*)都在的情况下,文件自动同步是没有任何问题的。

重新启动: [email protected]:/# /usr/local/bin/restart.sh /usr/local/bin/fdfs_trackerd /etc/fdfs/tracker.conf

FastDFS系统中的文件ID与用户存储进去的逻辑文件是不同的,由于没有索引服务器,那么这种文件名映射关系不是要需要由用户自己来保存?

的确如此,目前的确需要由应用端来保存。

FastDFS系统中的文件ID与用户存储进去的逻辑文件是不同的,我有一个客户端,想通过文件名进行操作,不知该怎样实现?也就是说,文件名到ID的转换,我自己写的客户端该怎么转换呢?

像你这样的应用场合,再加一层好了,实现文件名到文件ID的转换。比如可以基于数据库来做,或者通过分布式kv系统,如TT、FastDHT等等来做。

>>这些Track Server的内容是对等的,还是分组,每个Track Server负责一部分Storage Server?

对等的。

>>Client是绑定一个Track Server,还是可以绑定多个或全部?

在一个集群中,应该绑定全部。

>>Storage Server也是同样的问题,是绑定一个Track Server,还是可以多个或者全部?

在一个集群中,应该绑定全部。

>>如果没有绑定全部Tracker Sever,那么Tracker Sever之间可能会出现不一致的情况。我看到文档说Tracker Sever之间不进行数据同步,这种问题如何解决呢?

应该绑定所有Tracker server啊。

万一有个别storage server没有绑定所有tracker server,也不会出现问题。

正确的做法是绑定所有tracker server。

定位问题首先要看日志文件。出现问题时,先检查返回的错误号和错误信息。然后查看服务器端日志,相信可以定位到问题所在。

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

FastDFS Server仅支持unix系统,在Linux和FreeBSD测试通过。在Solaris系统下网络通信方面有些问题。

编译需要的其他库文件有pthread和libevent。

pthread使用系统自带的即可。

对libevent的版本要求为1.4.x,建议使用最新的stable版本,如1.4.14b。

注意,千万不要使用libevent 2.0及以上版本。

2. 有人在生产环境中使用FastDFS吗?

答案是肯定的。据我所知,至少有20家公司在使用FastDFS,其中有好几家是做网盘的公司。

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

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

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

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

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

5. 如何让server进程退出运行?

直接kill即可让server进程正常退出,可以使用killall命令,例如:

killall fdfs_trackerd

killall fdfs_storaged

也可以使用FastDFS自带的stop.sh脚本,如:

/usr/local/bin/stop.sh  /usr/local/bin/fdfs_storaged /etc/fdfs/storage.conf

stop.sh只会停止命令行(包括参数)完全相同的进程。

千万不要使用-9参数强杀,否则可能会导致binlog数据丢失的问题。

6. 如何重启server进程?

可以kill掉server进程后,执行启动命令行。如:

killall fdfs_trackerd

/usr/local/bin/fdfs_trackerd /etc/fdfs/tracker.conf

或者直接使用FastDFS自带的restart.sh脚本,如:

/usr/local/bin/restart.sh  /usr/local/bin/fdfs_trackerd /etc/fdfs/tracker.conf

7. 跨运营商通信异常问题

比如电信和网通机房相互通信,可能会存在异常,有两种表现:

1)不能建立连接,这个比较直接,肯定是网络连接的问题

2)可以正常建立连接,但接收和发送数据失败,这个问题比较隐蔽,正常网络环境下,不应该出现此类问题。

还有人碰到过从一个方向建立连接可以正常通信,但从另外一个方向就不能正常通信的情况。

解决办法:

尝试将服务端口改小,建议将端口修改为1024以下。比如将storage服务端口由23000修改为873等,也可以试试修改为8080

如果问题还不能解决,请联系你的网络(机房)服务商。

8. fdfs_test和fdfs_test1是做什么用的?

这两个是FastDFS自带的测试程序,会对一个文件上传两次,分别作为主文件和从文件。返回的文件ID也是两个。

并且会上传文件附加属性,storage server上会生成4个文件。

这两个程序仅用于测试目的,请不要用作实际用途。

V2.05提供了比较正式的三个小工具:

上传文件:/usr/local/bin/fdfs_upload_file  <config_file> <local_filename>

下载文件:/usr/local/bin/fdfs_download_file <config_file> <file_id> [local_filename]

删除文件:/usr/local/bin/fdfs_delete_file <config_file> <file_id>

在FastDFS的服务器端配置文件中,bind_addr 这个参数用于需要绑定本机IP地址的场合。只有这个参数和主机特征相关,其余参数都是可以统一配置的。在不需要绑定本机的情况下,为了便于管理和维护,建 议所有tracker server的配置文件相同,同组内的所有storage
server的配置文件相同。

tracker server的配置文件中没有出现storage server,而storage server的配置文件中会列举出所有的tracker server。这就决定了storage server和tracker server之间的连接由storage server主动发起,storage server为每个tracker server启动一个线程进行连接和通讯,这部分的通信协议请参阅《FastDFS HOWTO -- Protocol》中的“2. storage server to tracker server
command”。

tracker server会在内存中 保存storage分组及各个组下的storage server,并将连接过自己的storage server及其分组保存到文件中,以便下次重启服务时能直接从本地磁盘中获得storage相关信息。storage server会在内存中记录本组的所有服务器,并将服务器信息记录到文件中。tracker server和storage server之间相互同步storage
server列表:

1. 如果一个组内增加了新的storage server或者storage server的状态发生了改变,tracker server都会将storage server列表同步给该组内的所有storage server。以新增storage server为例,因为新加入的storage server主动连接tracker server,tracker server发现有新的storage server加入,就会将该组内所有的storage server返回给新加入的storage server,并重新将该组的storage
server列表返回给该组内的其他storage server;

2. 如果新增加一台tracker server,storage server连接该tracker server,发现该tracker server返回的本组storage server列表比本机记录的要少,就会将该tracker server上没有的storage server同步给该tracker server。

同一组内的storage server之间是对等的,文件上传、删除等操作可以在任意一台storage server上进行。文件同步只在同组内的storage server之间进行,采用push方式,即源服务器同步给目标服务器。以文件上传为例,假设一个组内有3台storage server A、B和C,文件F上传到服务器B,由B将文件F同步到其余的两台服务器A和C。我们不妨把文件F上传到服务器B的操作为源头操作,在服务器B上的F文件 为源头数据;文件F被同步到服务器A和C的操作为备份操作,在A和C上的F文件为备份数据。同步规则总结如下:

1. 只在本组内的storage server之间进行同步;

2. 源头数据才需要同步,备份数据不需要再次同步,否则就构成环路了;

3. 上述第二条规则有个例外,就是新增加一台storage server时,由已有的一台storage server将已有的所有数据(包括源头数据和备份数据)同步给该新增服务器。

storage server有7个状态,如下:

# FDFS_STORAGE_STATUS_INIT      :初始化,尚未得到同步已有数据的源服务器

# FDFS_STORAGE_STATUS_WAIT_SYNC :等待同步,已得到同步已有数据的源服务器

# FDFS_STORAGE_STATUS_SYNCING   :同步中

# FDFS_STORAGE_STATUS_DELETED   :已删除,该服务器从本组中摘除(注:本状态的功能尚未实现)

# FDFS_STORAGE_STATUS_OFFLINE   :离线

# FDFS_STORAGE_STATUS_ONLINE    :在线,尚不能提供服务

# FDFS_STORAGE_STATUS_ACTIVE    :在线,可以提供服务

当storage server的状态为FDFS_STORAGE_STATUS_ONLINE时,当该storage server向tracker server发起一次heart beat时,tracker server将其状态更改为FDFS_STORAGE_STATUS_ACTIVE。

组内新增加一台storage server A时,由系统自动完成已有数据同步,处理逻辑如下:

1. storage server A连接tracker server,tracker server将storage server A的状态设置为FDFS_STORAGE_STATUS_INIT。storage server A询问追加同步的源服务器和追加同步截至时间点,如果该组内只有storage server A或该组内已成功上传的文件数为0,则没有数据需要同步,storage server A就可以提供在线服务,此时tracker将其状态设置为FDFS_STORAGE_STATUS_ONLINE,否则tracker
server将其状态设置为FDFS_STORAGE_STATUS_WAIT_SYNC,进入第二步的处理;

2. 假设tracker server分配向storage server A同步已有数据的源storage server为B。同组的storage server和tracker server通讯得知新增了storage server A,将启动同步线程,并向tracker server询问向storage server A追加同步的源服务器和截至时间点。storage server B将把截至时间点之前的所有数据同步给storage server A;而其余的storage server从截至时间点之后进行正常同步,只把源头数据同步给storage
server A。到了截至时间点之后,storage server B对storage server A的同步将由追加同步切换为正常同步,只同步源头数据;

3. storage server B向storage server A同步完所有数据,暂时没有数据要同步时,storage server B请求tracker server将storage server A的状态设置为FDFS_STORAGE_STATUS_ONLINE;

4 当storage server A向tracker server发起heart beat时,tracker server将其状态更改为FDFS_STORAGE_STATUS_ACTIVE。

时间: 2024-08-30 10:27:31

FastDFS注意事项的相关文章

FastDFS Tracker端配置文件详解及启动注意事项

http://www.fanli7.net/a/bianchengyuyan/C__/20130611/325825.html # is this config file disabled # false for enabled # true for disabled disabled=false #当前配置是否不可用false可用,true不可用 # bind an address of this host # empty for bind all addresses of this host

CentOS 6.5上安装并配置FastDFS

一.下载并安装libfastcommon cd /opt/tools git clone https://github.com/happyfish100/libfastcommon.git  cd libfastcommon/ ./make.sh  ./make.sh install 二.下载并安装fastdfs cd ../ wget https://github.com/happyfish100/fastdfs/archive/V5.05.tar.gz  tar -zxf V5.05.tar

tenginx+ImageMagick+Lua+FastDfs

参考 http://sofar.blog.51cto.com/353572/1656160 http://tongcheng.blog.51cto.com/6214144/1851176 https://wenku.baidu.com/view/0a5d735728ea81c759f57859.html http://wangfeng7399.blog.51cto.com/3518031/1711589 FastDFS安装教程  http://blog.csdn.net/mingyu1016/a

FastDFS之Binlog同步

转载自:http://m.blog.csdn.net/blog/hfty290/42041155 基于FastDFS 5.03/5.04 2014-12-20 一.Binlog同步概述 FastDFS中为了维护文件的多个副本,会在同组的Storage之间互相同步文件,也就是一个备份过程,若一组有三台机器,那么互相备份后,一个文件就有三个副本.本篇将主要描述Binlog同步的相关概念,与同步逻辑,以及一些注意事项. 1.Binlog结构 1)目录结构 在Storage.conf配置文件中,有一个配

FastDFS原理系列文章

基于FastDFS 5.03/5.04 2014-12-19 一.概述 FastDFS文档极少,仅仅能找到一些宽泛的架构文档,以及ChinaUnix论坛上作者对网友提问的一些回答.对于要将FastDFS应用到生产系统来说,这点了解绝对是不够的. 这段时间研究FastDFS源代码,而且做了大量的性能測试.中间也做了大量的笔记.基本上把程序的结构与基本的操作摸索清楚,因此写了一些文章即是对前段工作的总结,同一时候也分享给想很多其它了解FastDFS内部的同行们. 这里对每篇文章做个介绍. 1.机器之

搭建FastDFS分布式存储环境(使用Nginx模块)

上次搭建FastDFS使用的版本是v4.05,见http://www.linuxidc.com/Linux/2014-10/107592.htm这个版本已经比较旧了 最新的版本是v5.04,由于作者重构了代码,所以安装过程还是有一些不一致.最新版本下载地址:http://sourceforge.net/projects/fastdfs/files/安装可以参考压缩包内的INSTALL文件. 实验还是搭建一个FastDFS环境,并增加Nginx模块所用软件:FastDFS_v5.04.tar.gz

fastdfs单主机配置多个storage 第二版

关于FastDFS蛋疼的集群和负载均衡(八)之总结FastDFS cmazxiaoma 问题11.是配置/root/soft/fastdfs-nginx-module/src/mod_fastdfs.conf 还是/etc/fdfs/mod_fastdfs.conf下面的? 2.多个组,必须以group1,group2命名 3.尤其storage的nginx启动一定要看启动日志,最多的配置问题会出现在这里 fdfs注意事项 附录: 在整个环境搭建过程中遇到一些问题,在此提交分享,供大家参考. 1

spring boot集成FastDFS

官方文档:https://github.com/happyfish100/fastdfs-client-java 一.首先,maven工程添加依赖 <!--fastdfs--> <dependency> <groupId>org.csource</groupId> <artifactId>fastdfs-client-java</artifactId> <version>1.27-RELEASE</version&g

分布式文件存储系统--fastDFS

分布式文件系统,它是一款开源的轻量级分布式系统 单机时代 初创时期由于时间紧迫,在各种资源有限的情况下,通常就直接在项目目录下建立静态文件夹,用于用户存放项目中的文件资源.如果按不同类型再细分,可以在项目目录下再建立不同的子目录来区分.例如: resources\static\file. resources\static\img等. 优点:这样做比较便利,项目直接引用就行,实现起来也简单,无需任何复杂技术,保存数据库记录和访问起来也很方便. 缺点:如果只是后台系统的使用一般也不会有什么问题,但是