文件系统中metadata是一个关键元素,每一个分布式文件系统的核心所在就是mds的设计。
类似HDFS,Clustre,FastDFS等等分布式文件系统采用的是独立的mds架构,Ceph采用的是讲mds也分布开的设计架构,Gluster的设计是将metadata跟数据文件结合方式来存储,基本上只存跟本地文件有关的metadata消息。下面将Gluster作为无独立mds的代表来评价。
本文是自己个人对于独立的mds与无独立mds的一些比较,欢迎大家来讨论。
独立的mds做得好,相对于Gluster这种无独立的mds,会有如下的优点:
首先,遍历操作会比Gluster遍历会快很多,mds可以灵活集中的将目录树存储起来,查询时候基本上就可以只找其中的内容就好。
其次,对于小文件或者有些应用场景对metadata查询多,对实际文件操作不一定多得场景(rename,stat等操作较多),可以有针对性加速,而且可以初步实现查询跟读写io分离的方式。
另外,易于实现分块,去重等功能实现,mds可以记录每一个数据块的位置,并且可以记录每一个数据块的特征值(如hash等),对于去重操作可以简单的在mds内部记录数据块的位置,从而可以达到不同文件的相同数据块指向同样的数据块位置。
也会有如下缺点:
首先,mds的性能有可能成为整个分布式文件系统的容量和性能瓶颈。在存储规模上去的时候,需要同样增加mds的数量,存储规模上去,metadata数量也相应增加,需要增大mds的规模。就会引进新的问题。
其次,mds的数据安全。metadata信息丢失的话,整个集群的存储都会瘫痪,所有数据将不可用。因此,mds本身需要进行高可用的设计,这边又将引进一些数据不一致时的仲裁问题,集群锁等问题(mds之间的同步问题)。
另外,数据跟metadata之间的同步问题也需要考虑。