142 lines
9.8 KiB
Plaintext
142 lines
9.8 KiB
Plaintext
fastdfs源自bbs论坛的问题整理:http://bbs.chinaunix.net/forum-240-1.html
|
||
|
||
##### Q0、上传文件,如何选择存储地址的?
|
||
|
||
tracker是各协调器, 是如何查询存储地址返回给客户端的?请阅读《fastdfs\1、fastdf配置文件参数解释\tracker.conf参数说明.txt》
|
||
|
||
```bash
|
||
1. client上传文件 <--指定\不指定group--> tracker{选择group ---> 选择 group 中的哪台storage --->选择storage server 中的哪个目录}
|
||
|
||
2. Client拿着地址直接和对应的Storage通讯,将文件上传到该Storage。
|
||
```
|
||
>[danger]备注:tracker.conf中的 reserved_storage_space 参数是storage为系统、其他应用保留的空间,若空间不足,则上传失败。
|
||
|
||
|
||
##### Q1、fastdfs的版本号如何查看
|
||
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf 或打开tracker的基础数据存储文件storage_servers_new.dat
|
||
|
||
##### Q2、同一个集群内,相互关系
|
||
- cluster里每个tracker之间是完全对等的,所有的tracker都接受stroage的心跳信息,生成元数据信息来提供读写服务。
|
||
> 2.03以后,tracker server之间会有通信。比如解决: 新增加一台tracker server时,新的tracker server会自动向老的tracker server获取系统数据文件。。
|
||
- 同组内的storage server之间,都是对等关系,不存在主从关系。
|
||
- 组与组之间的storage都是独立的,不同组的storage server之间不会相互通信。
|
||
|
||
---
|
||
##### Q3、备份机制
|
||
FastDFS采用了分组存储,一个组可以由一台或多台storage存储服务器组成,同组内的storage文件都是相同的,组中的多台storage服务器起到相互备份和负载均衡的作用。
|
||
|
||
---
|
||
##### Q4、storage和组的对应关系
|
||
一个storage只能属于一个group,组名在storage server上配置,由storage server主动向tracker server报告其组名和存储空间等信息。
|
||
|
||
---
|
||
##### Q5、storage 能连接几个tracker
|
||
在storage server上配置它要连接的tracker server,可以配置1个或多个。 当storage配置连接2个以上tracker时,tracker群起到负载均衡作用。
|
||
|
||
>备注:storage server的信息在tracker上全部缓存到内存中的,支持的分组数,理论上取决于tracker server的内存大小。所以支持上千上万个组没有一点问题。
|
||
|
||
>[danger]提醒:在一个集群中,正确的做法是“storage应连接所有的tracker” 万一有个别storage server没有绑定所有tracker server,也不会出现问题。
|
||
|
||
---
|
||
##### Q6、一台机器上运行几个storage
|
||
通常一台机器只启动一个storage节点(即跑一个group);根据服务器情况(比如多磁盘挂载)、或文件要隔离存储时,可以运行多个storage,但是没必要,因为storage支持多目录挂载.
|
||
|
||
>[danger]注意: 同集群内,同组下的storage 端口好必须相同,因此单台上只能运行属于不同组的storage.
|
||
---
|
||
##### Q7、一台机器上多个磁盘时,如何使用
|
||
如果我一台机器多个硬盘挂到不同的目录,不要做RAID,每个硬盘作为一个mount point,直接挂载单盘使用即可
|
||
- 可以按一个组,运行一个storage,设置多个store_path(索引从0开始)对应不同的磁盘目录。--->推荐
|
||
- 也按多个组使用,即运行多个storage,每个组管理一个硬盘(mount point)。--->没必要这样做,因为storage已经可以管理多块硬盘了
|
||
|
||
> 备注:storage server支持多个路径(例如磁盘)存放文件,为了提高IO性能,不同的磁盘可能挂不同的目录
|
||
|
||
---
|
||
|
||
##### Q8、同组内的storage服务器的空间大小不一样时,会出现什么问题
|
||
同一个卷的存储空间以group内容量最小的storage为准,所以建议同一个GROUP中的多个storage尽量配置相同,即**store_path_count个数、存放文件的目录磁盘大小要相同,目录名称可以不相同**。
|
||
> 论坛帖子:若同一个卷下的各storage配置不同,某个服务器有空间,但是不能再上传文件的现象。http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=1941456&extra=page%3D1%26filter%3Ddigest%26digest%3D1
|
||
|
||
---
|
||
##### Q9、每个目录下存放的文件数有限制吗。
|
||
没有限制,能不能上传取决于剩余空间。
|
||
> 备注:storage的缺省情况下,**每个目录下存放100个文件,然后就轮转到下一个目录, 到最后一个目录data/FF/FF后,会跳会第一个目录**。
|
||
- subdir_count_per_path =256,storage server在初次运行时,会在store_path0~n\data\目录下,自动创建 N * N 个存放文件的子目录。
|
||
- file_distribute_path_mode配置为0(轮流存放方式),file_distribute_rotate_count = 100,当一个目录下的文件存放的文件数达到本参数值时,后续上传的文件存储到下一个目录中。
|
||
|
||
##### Q10、tracker、storage和client配置文件中的http.server_port还要配置吗
|
||
不用理会这个配置项,HTTP访问文件请使用外部的web server.
|
||
>[danger] 备注:
|
||
- fastdfs内置的web server从4.0.5版本就移除了(因为之前自带的HTTP服务较为简单,无法提供负载均衡等高性能服务),而是使用外部web server(apache和nginx)提供http文件访问服务。
|
||
- 为了解决文件同步延迟的问题,apache或nginx上需要使用FastDFS提供的扩展模块,如nginx的fastdfs-nginx-module
|
||
- 在每台storage server上部署web server,直接对外提供HTTP服务
|
||
- tracker server上不需要部署web server
|
||
|
||
##### Q11、如何防盗链
|
||
通过token的方式来实现的防盗链。原贴地址:http://bbs.chinaunix.net/thread-1916999-1-1.html
|
||
看一下配置文件 mod_fastdfs.conf,里面包含了http.conf,在http.conf中进行防盗链相关设置。
|
||
|
||
##### Q12、“海量”小文件会导致文件系统性能急剧下降,请问这里的“海量”大致在什么级别
|
||
出于性能考虑,我觉得单台机器存储的文件数不要超过1千万吧。
|
||
> [点击查看原贴地址](点击查看原贴地址:http://bbs.chinaunix.net/thread-2328826-1-48.html "点击查看原贴地址"), 3.0的计划中,提到“海量”小文件会导致文件系统性能急剧下降,乃至崩溃。请问这里的“海量”大致在什么级别,通过扩展主机(不仅仅是磁盘)是否可以解决“海量”小文件带来的性能瓶颈?
|
||
|
||
##### Q13、FastDFS扩展模块(fastdfs-nginx-module)支持断点续传吗
|
||
|
||
版本V1.08,增加了支持断点续传
|
||
|
||
##### Q14、配置了Nginx的FDFS扩展模块,可以通过nginx访问文件,mod_fastdfs.conf中的tracker_server配置项有什么作用?
|
||
|
||
扩展模块在web server启动时,连接tracker server,以获得2个配置参数,
|
||
如果连不上时或者获取失败,会使用缺省值:
|
||
+ storage_sync_file_max_delay:文件同步的最大延迟,缺省为1天
|
||
+ storage_sync_file_max_time:同步单个文件需要的最大时间,缺省为5分钟。
|
||
|
||
##### Q15、扩展模块有哪些注意事项
|
||
配置文件/etc/fdfs/mod_fastdfs.conf,参数url_have_group_name:URL中是否包含了group name。这个参数必须正确设置,否则文件不能被下载到
|
||
|
||
##### Q16、FastDFS是否支持文件修改呢?
|
||
V3.08开始支持文件修改了。
|
||
|
||
##### Q17、如果你需要相同文件内容的文件只保存一份时,怎么办?
|
||
|
||
结合FastDHT使用,http://localhost:8181/docs/fastdfs/fastdfs-1dtfs5fe93h60
|
||
|
||
##### Q18、只要知道tracker的服务器IP和端口,任何都可以使用api上传文件,这样是否会有恶意上传的问题
|
||
|
||
可以指定访问限制,tracker.conf,storage.conf,添加访问IP限制:(例)
|
||
```bash
|
||
# allow_hosts can ocur more than once, host can be hostname or ip address,
|
||
# "*" means match all ip addresses, can use range like this: 10.0.1.[1-15,20] or
|
||
# host[01-08,20-25].domain.com, for example:
|
||
# allow_hosts=10.0.1.[1-15,20]
|
||
# allow_hosts=host[01-08,20-25].domain.com
|
||
#allow_hosts=*
|
||
allow_hosts=222.222.222.[152-154]
|
||
allow_hosts=111.111.111.111
|
||
|
||
```
|
||
Q19、部署哪些事项要注意?
|
||
|
||
0. tracker 只管理集群拓扑数据,不存储任何文件索引,对硬件配置要求较低,为了实现互备,**两台tracker就够了。若集群规模较小,可复用storage机器**
|
||
|
||
1. 在tracker的配置文件tracker.conf中设置好预留合适的空间.
|
||
|
||
2. fastdfs存储文件是直接基于操作系统的文件系统的,**storage的性能瓶颈通常表现在磁盘IO**。为了充分利用文件系统的cache已加快文件访问,**推荐storage配置较大内存**,尤其在众多热点文件的场合下,大量IO吞吐也会消耗cpu
|
||
|
||
3. storage,为了互相备份,**一个group内有两台storage即可**
|
||
|
||
4. storage 为了充分利用磁盘,推荐不做RAID,直接挂载单块硬盘,每块硬盘mount为一个路径,作为storage的一个store_path。
|
||
|
||
5. **同组内的storage 端口号必须相同**,建议挂载存储个数相同、空间大小相同;同一主机上可以运行多个不同组的storage.
|
||
|
||
6. 同组内的storage 若有多个tracker,应当配置上所有的tracker地址
|
||
|
||
7. fastdfs从4.0.5开始去除了http文件下载功能,需要外部的web server,为了解决文件同步延迟的问题,apache或nginx上需要使用FastDFS提供的扩展模块,如nginx的fastdfs-nginx-module
|
||
- 在每台storage server上部署web server,直接对外提供HTTP服务
|
||
- tracker server上不需要部署web server
|
||
- 每个组必须有一个nginx,提供http文件访问服务.
|
||
|
||
8. 海量小文件场景,建议使用文件合并存储特性,在tracker.conf 设置 use_trunck_file=true,**如果一个group存储的文件数不超过一千万,就没有必要使用这个特性**。
|
||
|
||
9. 为了避免不必要的干扰集群安全考虑,**建议使用storage server id 方式。** tracker.conf 设置 use_storage_id=true 并在storage_ids.conf填写所有storage的id、所属组名,ip。这样做迁移很容易。
|
||
|