在文件系统中有效存储25TB +价值百万的文件的技巧

假设您正在面对25 TB的无压缩日志文件,并且您可以随时使用20个商品包装箱,其中包含25 TB的集体免费存储容量。

你将如何储存这些?

a)使用哪个分布式文件系统

b)哪种压缩/解压缩格式/algorithm?

c)日志文件大小为1MB到最大7MB全部文本和大量空白

d)使用方法是a)人们比以前想要的最新的日志文件多,所以要使用什么样的caching系统b)人们只会读取日志文件而不删除它们c)人们希望在一个date范围内列出日志文件

e)运行在商品箱上的操作系统是Linux,

f)至于备份,我们有一个存储arrays,照顾。 所以从数组恢复数据的能力存在。

我不希望他们直接访问文件系统。 我该怎么办 ? 我如何让他们为此基于REST的API?

请把你2分钱,你会怎么做?

ANKUR

我不是一个分布式的文件系统忍者,但是在整合了尽可能多的驱动器之后,我可以尽可能less地使用机器,然后尝试使用iSCSI将大部分机器连接到一台主机。 在那里,我可以把事情整合到希望容错的存储中。 优选地,机器内部(如果驱动器熄灭)和机器内部(如果整个机器断电)容错。

我个人喜欢ZFS。 在这种情况下,构build压缩,重复数据删除和容错将是有帮助的。 不过,我敢肯定有很多其他的方法来压缩数据,同时使其容错。

希望我有一个真正的交钥匙分布式文件解决scheme推荐,我知道这是非常kludgey,但我希望它指出你在正确的方向。

编辑:我还是新来的ZFS和设置iSCSI,但回顾看到从德国的Sun公司的video,他们显示ZFS的容错。 他们将三个USB集线器连接到一台计算机,并在每个集线器中放置四个闪存驱动器。 然后,为了防止任何一个集线器取下存储池,他们在每个集线器上制作了一个由一个闪存驱动器组成的RAIDz卷。 然后他们将四个ZFS RAIDz卷一起分割。 这样,只有四个闪存驱动器用于奇偶校验。 接下来当然是拔掉的一个集线器,每个zpool都会降级,但所有的数据都可用。 在这个configuration中,最多可能会丢失四个驱动器,但是只有在任何两个驱动器不在同一个池中时才会丢失。

如果将此configuration与每个盒子的原始驱动器一起使用,那么将保留更多的驱动器用于数据,而不是用于奇偶校验。 我听说 FreeNAS可以(或将能够)通过iSCSI以“原始”方式共享驱动器,所以我认为Linux也可以这样做。 正如我所说,我还在学习,但这种替代方法比我先前的build议更不用说从驱动力比较的angular度来看浪费。 当然,它会依赖于使用ZFS,我不知道是否可以接受。 我知道如果你不得不build立/维护/修复某些东西,通常最好坚持你所知道的东西,除非这是一个学习经验。

希望这是更好的。

编辑:有一些挖掘,发现我谈到的video 。 他们解释将USB闪存驱动器扩展到集线器上的部分是从2m10开始的。 该video将演示他们的存储服务器“Thumper”(X4500)以及如何在控制器之间传播磁盘,因此如果硬盘控制器出现故障,您的数据仍然会很好。 (我个人认为这只是一个玩笑的video,我希望自己有一个Thumper盒子,但是我的妻子不会喜欢我在房子里放一个托盘插孔:D那是一个大盒子。

编辑:我记得通过称为OpenAFS的分布式文件系统。 我没有尝试过,我只是读了一些。 也许其他人知道它是如何在现实世界中处理的。

首先,日志文件可以以很高的比例进行压缩。 我发现我的日志文件以10:1的比例压缩。 如果压缩到甚至5:1的比例,那只有5GB,或20%的存储容量。

考虑到你有足够的存储空间,特定的压缩algorithm并不太重要。 你可以…

  • 如果Windows用户将直接访问文件,请使用zip文件。
  • 使用gzip,如果他们将通过Linux访问和快速解压缩是重要的。
  • 使用bzip2,如果他们将通过Linux访问,重要的是有尽可能最小的文件。

更大的问题是:你将如何提供用户轻松访问这些文件? 这部分取决于你的机器是如何configuration的。

如果您可以将足够的存储空间放入一台机器,那么您可以执行一些非常简单的操作,如只读的Windows文件共享。 只需在子目录中组织文件,就可以开始了。

如果您无法为这些文件创build单个文件服务器,那么您可能会发现需要一个分布式文件系统。 Windows有一个可能适合您需要的分布式文件系统(DFS)。

如果您的需求更高级,您可能需要一个Web应用程序作为前端,您的用户可以浏览和下载日志文件。 在这种情况下,我build议使用MogileFS,这是一个分布式文件系统,旨在与前端应用程序服务器配合使用。 与大多数networking编程语言集成是非常容易的。 您无法将其作为共享驱动器安装在您的计算机上,但它作为Web应用程序的数据存储的顶尖。

lessfs是一个重复数据删除,压缩文件系统。 虽然它不能解决整个问题,但可能值得一看,作为后端。

通过NFS导出这些文件夹

将它们安装在一台运行apache的机器上(在文档根目录下)为一棵树

使用zip压缩它们 – 良好的压缩率,zip可以从所有操作系统打开

在Apache中列出文件 – 所以你给用户只读访问(日志文件不假设是编辑,权利)

你曾经想过压缩日志文件? 然后在前端进行解压缩,然后将其提供给最终用户。 也许是一个CGI脚本的种类。

@Ankur和@Porch。 我非常同意压缩这些日志的必要性。

@jet我认为更简单的scheme更好 – 因此,最终用户的httpd接近理想。 后端可以是任何。

我的意见 – 将日志分成2组 – 文件夹“旧”和“新”。

将它们合并到httpd的文档根目录下。 使用较大的字典和块大小的旧压缩(xz或7z压缩文件,适用于所有操作系统),甚至可以是固定的压缩文件。

使用压缩fs为新的:lessfs(rw,重复数据删除+轻量级压缩方法),fusecompress 0.9.x(rw,轻到强压缩方法),btrfs / zfs,squashfs(ro,轻到强压缩方法,一些重复数据删除,使用对于新的旋转日志)。

您甚至可以透明地将日志写入压缩的fs(fusecompress,lessfs,btrfs / zfs)。 通过httpd向正在写入的日志提供R / o访问。 它们对于用户是透明的,并且对它们透明地进行解压缩。

关于fusecompress的警告:1)仅使用0.9.x – 稳定。 从这里克隆https://github.com/hexxellor/fusecompress

后来的版本要么不支持lzma,要么丢失数据。

2)它只使用1个CPU核心压缩一个文件,因此可能会很慢。

重新压缩“新”文件夹中的每个日志,比一段时间(几个月)旧,并移动到“旧”。