`
sealbird
  • 浏览: 584696 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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/*)都在的情况下,文件自动同步是没有任何问题的。

 

重新启动: root@ubuntu:/# /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。

 

http://blogold.chinaunix.net/u2/74846/index.html
分享到:
评论

相关推荐

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

    《FastDFS Storage端配置文件详解及启动注意事项》 FastDFS是一款开源的高性能、轻量级的分布式文件系统,主要用于解决大容量存储和负载均衡的问题。本文将深入解析FastDFS的Storage端配置文件`storage.conf`,并...

    fastDFS断点续传实例

    7. **注意事项** - 断点续传需要客户端和服务器端配合,因此,服务器端也需要支持断点续传的功能。 - 文件元数据的存储和恢复状态的管理是关键,需要确保其准确无误。 - 网络不稳定可能导致断点续传失败,需要有...

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

    《FastDFS Tracker端配置文件详解及启动注意事项》 FastDFS是一款开源的高性能、轻量级的分布式文件系统,主要用于解决大容量存储和负载均衡的问题。它由Tracker服务器和Storage服务器两部分组成,Tracker负责调度...

    整合java实例 FastDFS

    **注意事项** 1. 确保FastDFS服务器和Java应用运行环境网络通畅,否则可能导致连接失败。 2. 文件上传时,注意文件的大小限制,FastDFS默认有单个文件大小的限制,需要根据实际需求调整配置。 3. 考虑到性能和稳定...

    fastdfs_client_v1.20.jar

    6. **注意事项** - 文件上传时,确保文件名无特殊字符,以防止解析问题。 - 必须保证Tracker Server和Storage Server的正常运行,否则客户端无法完成文件操作。 - 对于大型项目,应定期检查并清理FastDFS系统中的...

    FastDFS安装和配置过程

    #### 三、配置注意事项 - **存储目录**:`base_path`和`store_path0`必须事先创建,并确保有足够的磁盘空间。 - **Tracker Server配置**:`base_path`应指向FastDFS的根目录,确保所有配置文件和日志文件的正确路径...

    淘淘商城fastdfsjar包

    本文将详细介绍该Jar包的用途、安装步骤以及在实际应用中的注意事项。 一、FastDFS简介 FastDFS是一个高性能的开源Java语言实现的文件服务器,主要解决大容量存储和负载均衡的问题,特别适合以文件下载为主的网站...

    FastDFS_Client-fastdfs-client-1.27.1.zip

    六、注意事项 在实际应用中,为了确保系统的稳定性和安全性,需要注意以下几点: 1. 适当调整FastDFS的配置参数,如连接池大小、超时时间等,以适应不同的业务场景。 2. 对于重要的文件操作,应考虑使用事务处理,...

    CentOS6.5下安装fastDFS

    #### 八、注意事项 - **防火墙**: 确保防火墙允许 FastDFS 相关的服务端口。 - **用户权限**: 必须确保 FastDFS 进程运行所需的用户具有足够的权限。 - **监控与日志**: 应该定期检查 FastDFS 的日志文件,以确保...

    FastDFS.zip

    FastDFS的安装教程在`centos安装FastDFS.md`和`Ubuntu安装FastDFS.md`中,提供了详细的步骤和注意事项。`libfastcommon-master.zip`是FastDFS的公共库,包含了FastDFS所需的一些通用工具和函数。`assets`可能是一些...

    fastdfs-nginx-module-1.22.zip

    本文将深入探讨FastDFS-Nginx-Module 1.22版本的特性、安装与配置以及实际应用中的注意事项。 FastDFS是一个开源的高性能分布式文件系统,它对文件进行管理,包括文件存储、文件同步、文件访问(文件上传、文件下载...

    fastDFS单机版安装教程+安装使用包

    ### 七、注意事项 - 在生产环境中,FastDFS通常部署为集群,以提高可用性和扩展性。 - 文件命名策略需合理,避免冲突,可使用FastDFS的元数据功能存储额外信息。 - 考虑网络延迟和带宽限制,合理规划Tracker和...

    Fastdfs单节点安装包集合.rar

    6. **注意事项**:在安装过程中,需要确保服务器满足Fastdfs的硬件和软件需求,例如操作系统版本、内存大小、磁盘空间等。此外,配置文件的正确设置至关重要,包括tracker和storage的配置、Nginx的配置等,否则可能...

    fastdfs_client maven

    四、注意事项 1. 确保FastDFS服务器正常运行,并且客户端配置的Tracker服务器信息正确。 2. 文件上传时,需要指定正确的文件类型,以便FastDFS进行正确处理。 3. 对于大量文件操作,注意控制并发量,避免对服务器...

    Java操作FastDFS

    7. **Java客户端使用注意事项** - 需要正确处理异常,如网络错误、文件操作失败等。 - 注意文件上传时的权限控制,避免安全风险。 - 文件ID的管理和存储,通常存储在数据库中,便于后续操作。 总之,Java操作...

    fastdfs部署

    注意事项 在部署FastDFS过程中,可能会遇到如下的问题: 1. 网络连接问题:确保服务器间可以正常通信。 2. 权限问题:检查文件夹权限,确保FastDFS进程可以读写数据。 3. 配置错误:仔细检查配置文件,避免因配置...

    fastdfs5.0.5安装包(安装极其简单,一键执行,linux X86_64位环境下支持)

    "readme.txt"文件通常包含了安装说明、注意事项以及可能遇到的问题解答,对于正确安装和使用FastDFS至关重要。 在安装FastDFS时,一般步骤包括: 1. **解压安装包**:首先需要将下载的压缩包解压到合适的目录。 2....

    fastdfs-client-java-5.0.4.zip

    五、注意事项 1. 确保FastDFS服务器已经正确安装并运行。 2. 配置文件中的服务器地址和端口应与实际一致。 3. 对于多线程环境,建议使用连接池来提高性能和资源利用率。 4. 处理好异常,确保在出现错误时能及时捕获...

    FastDFS_Client_Win

    5. **文档**:可能有README文件,说明编译、安装和使用客户端的步骤,以及任何特定的注意事项。 在使用FastDFS_Client_Win时,开发者需要注意以下几点: - 首先,确保已正确配置FastDFS服务器,包括安装、启动服务...

    fastDFS 安装文件 fastDFS 安装文件

    FastDFS是一款开源的高性能、轻量级的分布式文件系统,主要解决大容量存储和负载均衡...这是一个相对复杂的过程,但遵循正确的步骤和注意事项,可以确保FastDFS在你的环境中稳定运行,实现高效、可靠的文件存储和分发。

Global site tag (gtag.js) - Google Analytics