FastDFS日常管理维护中可能会遇到各种各样的问题,因此本篇文章主要介绍”FastDFS 注意事项 “,主要涉及到FastDFS方面的内容,对于FastDFS感兴趣或者正在学习FastDFS的同学可以参考一下。
1. 除了在storage.conf里的tracker_server增加tracker的ip和端口,其他地方要注意什么?
tracker server ip和端口,肯定是要正确设置的。支持多tracker server,每行设置一个tracker。另外,base_path也要正确设置。其余参数,通常采用缺省配置即可。
2. 每台tracker和storage的启动有没有先后关系?
正常情况下,应该先启动tracker。FastDFS不会有这样的要求,你要启动storage也是没有任何问题的。
3. fastDFS产生的记录清空,再重新搭建一次,应该删除哪些文件?
停止storage server和tracker server,删除base_path下的data子目录即可。注意:storage 的data目录下保存了上传文件,删除时请慎重。
4. 这些Track Server的内容是对等的,还是分组,每个Track Server负责一部分Storage Server?
对等的。
Client是绑定一个Track Server,还是可以绑定多个或全部?
在一个集群中,应该绑定全部。
Storage Server也是同样的问题,是绑定一个Track Server,还是可以多个或者全部?
在一个集群中,应该绑定全部。
5. FastDFS存储服务器的硬盘挂载
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/*)都在的情况下,文件自动同步是没有任何问题的。
6. 组内新增加一台storage server A时,由系统自动完成已有数据同步,处理逻辑
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列表:
. 如果一个组内增加了新的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;
. 如果新增加一台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文件为备份数据。同步规则总结如下:
. 只在本组内的storage server之间进行同步;
. 源头数据才需要同步,备份数据不需要再次同步,否则就构成环路了;
. 上述第二条规则有个例外,就是新增加一台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时,由系统自动完成已有数据同步,处理逻辑如下:
. 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,进入第二步的处理;
. 假设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的同步将由追加同步切换为正常同步,只同步源头数据;
. storage server B向storage server A同步完所有数据,暂时没有数据要同步时,storage server B请求tracker server将storage server A的状态设置为FDFS_STORAGE_STATUS_ONLINE;
. 当storage server A向tracker server发起heart beat时,tracker server将其状态更改为FDFS_STORAGE_STATUS_ACTIVE。
9. Storage 2: ip_addr = 172.16.23.173 RECOVERY 问题
单盘故障恢复中。原因:采用多store path,更换group造成应避免。
10.Tracker和storage或storage之间时间要一致
11.上传后原文件名和上传后生成新的文件名的对应关系
上传前为test.txt,上传后生成rBAXrVAfNqSRJqy3AAAABWFXmN8243_big.tx
要实现文件Id映射,可以使用my-fastdfs-client, 需要保存原始文件名的话需要由应用端来保存这个映射关系。
12.两个磁盘都给FastDFS使用,在nginx配置两个location
location /group1/M00/ {
alias /fastdfs1/data/;
ngx_fastdfs_module;
}
location /group1/M01/ {
alias /fastdfs2/data/;
ngx_fastdfs_module;
}
13.FastDFS升级
从新编译安装Fdfs和Nginx+Nginx扩展模块,配置文件无需更改