FastDFS系统支持文件迁移吗?
大家知道,FastDFS架构是下图这样子。
大家可否知道,将一个fdfs系统里存储的文件迁移到另一个fdfs系统里,这个文件在新的fdfs系统能通过client正常访问吗?
先说答案:fastdfs系统支持文件迁移。亲测为证!
这一个技术点很重要,对于我们即将要做的工作来说。
就是说,将一个fdfs存储服务器的文件迁移到另一个fdfs存储服务器里,那么,这个文件在新的fdfs系统上是可以正常访问的。
我们的系统当前存在一个问题:既有一个单节点的fdfs系统,又有一个fdfs集群系统。我们的应用呢,有些用单节点fdfs,有些用集群fdfs。
我们有必要统一所用应用服务使用一套fdfs———使用集群模式的fdfs。
经分析,单点fdfs系统里存储了2.2T的文件,集群fdfs系统存储了2.3T的文件。
如何落地呢?
我们几个开发人员一致以为fdfs系统不支持文件迁移。于是乎,就合计着编写批处理程序,实现文件的迁移。
困难在于,迁移T级别的文件,涉及到的文件很多,涉及到用户表、签约表、协议表等等,许多数据表里的图片。这是一个费力费时的工作。
为了寻找”救命稻草“,我们又找运维世伟哥确认,fdfs系统到底支不支持文件迁移。
世伟哥也深以为然,fdfs系统不支持文件迁移。并进行现场验证。世伟哥cd到 fdfs storage-server的一个叶子节点目录,将其中的一个jpg文件,mv后得到一个新的文件,命名为“test.jpg”。
然后,拼接文件名url,在web浏览器里, 先访问被copy的原jpg,可以正常显示图片;再访问 test.jpg,发现的确访问不了。—————至此,我们的结论是:不通过track server,直接在storage server里创建的文件,在client通过track server进行访问时无法正常访问。
尽管如此,我们几个程序员有些不死心。接下来,我们把这个事情作为研究目标——>研究fdfs框架及技术,看fdfs能否支持文件迁移。
通过快速浏览网页资料,重新复习了一遍fdfs结构及技术后,我百度搜索“fastdfs 直接在storage创建文件,为什么访问不到”,我判断可能原因是 文件访问权限不足 。经世伟哥查证,刚才新创建的 test.jpg 具有root用户权限。看来,不是文件权限的原因。我再看web浏览器里那个url的访问情况,定睛细看,发现了端倪——网页上的白纸黑字是400-Bad request。————直到看到这个400,我才恍悟。http的4XX是客户端错误所致,而这里是400却不是404,显然,我们不能下结论说“fdfs不支持文件迁移”。
然后,依据fdfs上传文件的原理,fdfs的storageServer需要生成特定规则的 file_Id(如https://test-file.mycompany.com/group1/M00/04/05/wKgoVGXusS-ABZ75AAAmn1EDAtA498.xls 中的 wKgoVGXusS-ABZ75AAAmn1EDAtA498),我和世伟哥把 test.jpg 重命名为 符合file规则的名字,例如“wKgoVGXusS-ABZ75AAAmn1EDAtA123.jpg , 果不其然,奇迹出现了, 浏览器里 可以正常访问这个图片了。
不放弃,就有惊喜!
验证的过程虽有些小坎坷,但的的确确刷新了我们的知识领域。
【附】fdfs文件上传原理
【附】fdfs文件下载原理
【附】400 与 404 不同。httpstatus 400 是什么意思?
【附】本文摘自公司内部WIKI。