使用脚本构建分布式文件系统

上周末ADC,@明俨 主持TFS开源主题的讨论,居然有TFS外部用户到现场咨询使用过程中的问题,感觉这些小公司维护大系统挺不容易的,尤其是在对内部实现不清楚的情况下。期间有人分享自己公司的做法,存文件的时候,存到多个server上,然后把文件跟server的对应关系记录到文档(不能丢,方便查找),当出现异常时,人工介入拷贝文件以增加文件副本数,然后更新文件跟server的对应关系;做法看起来很土,但对于小公司来说,只要维护者能“不厌其烦”,这也不失为一个好办法,毕竟一切在自己的掌握中。

 

目前很多互联网创业公司都面临数据存储的问题,比如服务过程中产生大批非结构化的数据(图片、音乐、视频、文档,结构化的的数据如注册信息等直接存mysql),数据量很尴尬,一般的服务器存不下,贵了的服务器买不起;于是大家都盯上了利用廉价PC构建分布式文件系统的开源方案,比如TFS、MooseFS等;但使用这些开源方案是有风险的,天天正常的跑当然皆大欢喜,一旦出问题,如果不对实现有所研究的话,根本无从解决,而在创业初期,你也没有人力去做这些研究工作,或是你根本招不到能干这活的人。

 

于是我想创业公司在需要存储大量文件时,能否考虑利用脚本构建一套存储方案,这样做的好处是使用脚本,学习成本低,研发成本低,并且自主研发,可控性强,相比上面提到的人工方案,利用脚本可以自动化处理很多情况,降低人工介入频度。具体需要考虑的点如下:

 

  • 在web服务器上,把存储服务器的存储目录(比如每个server的每个盘)通过NFS挂载到本地。
  • web服务器在存储文件时,从这些挂载目录中选择2或多个目录(不在一个server上),将文件存储在这些server,并把文件到disk的映射关系记录起来(mysql或本地+NFS等)。
  • 利用脚本(python、perl等)对server的disk进行监控(方法很多,自由发挥),当检测到磁盘或机器坏掉时(机器挂了通常重启就OK),就开始从映射信息中获取到磁盘上的文件列表,并将这些文件再增加一个拷贝。
  • web服务器在读的时候,随机选择一个存储目标文件的server;对于文件热点情况,可以人工介入,增加文件的拷贝数。

 

上述很多功能点只需要很少的脚本代码就能完成,在初期也不需要特别完善,运维过程中再不断改善,没准最后会演化成一套很好的解决方案。

posted @ 2013-04-19 14:13  ydzhang  阅读(252)  评论(0编辑  收藏  举报