如何为GlusterFS分区目录系统?

我们在Ubuntu 14.04机器上有3个文件夹,每个文件夹中包含250K图片,每个文件夹的大小为2KB-30KB,预计每个目录的文件增长到1M。

在试图将应用扩展到多个服务器时,我们正在研究Glusterfs的共享存储。 由于250K文件在ext4上不是问题,所以对于glusterfs似乎是个问题。 试图复制文件完全崩溃的机器。

我期待在两个层次上将文件分割成目录:

mkdir -p {000..255} / {000..255}

/000/000/filename /001/000/filename /001/001/filename ... 

这听起来像是一个很好的方式吗? 整个结构将包含数以百万计的文件。 这将使glusterfs在生产中可靠地生产,性能良好,可承载数百万个文件?

使用GlusterFS来存储和访问很多非常小的文件是许多实现面临的难题,而且似乎你已经在解决这个问题的一条好path上:将文件分解成单独的目录。

你可以实现这样的解决scheme。 只需创build一堆目录,select每个目录中可以放置多less个文件的限制,并且希望不要用完放置文件的地方。 在你的例子中,你正在创build65k +目录,所以这不太可能是一个问题。

另一种select是根据创build文件的date创build目录。 例如,如果文件cust_logo_xad.png是今天创build的,它将被存储在这里:

 /gluster/files/2015/08/24/cust_logo_xad.png 

如果您为不同实体(客户,部门等)托pipe数据,则可以根据所有权分离文件,为实体分配某种唯一的ID。 例如:

 /gluster/files/ry/ry7eg4k/cust_logo_xad.png 

除此之外,最好看一下GlusterFS文档来调整托pipe小文件的存储群集。 至less要确保:

  1. GlusterFS存储服务器上的文件系统具有足够的可用inode( mkfs选项)
  2. GlusterFS存储服务器上的驱动器可以处理大量IOP。
  3. 您为任务使用适当的文件系统(ext4或xfs)
  4. 您的应用程序/工作人员不会频繁扫描大量小文件的目录。

如果你可以的话(如果你还没有的话),创build一个数据库作为文件的索引是一个好主意,而不是必须一直扫描(例如ls )或者search(例如find )文件。