元数据子系统

元数据子系统是一个以内存为中心的分布式数据结构,是由一个或多个元数据分片组成。

元数据子系统数据使用Multi-Raft来充分使用服务器资源和保障数据高可用及强一致性,可以很方便的迁移资源,并通过分裂实现横向扩展。

元数据内部设计

每个元数据可以包含成百上千的元数据分片,每个分片由InodeTree(BTree)DentryTree(BTree)组成。

每个inode代表文件系统中的一个文件或目录, 每个dentry代表一个目录项,dentryparentIdname组成。

  • DentryTree中,以ParentIdname组成索引,进行存储和检索
  • InodeTree中,则以inode id进行索引。
  • 使用multiRaft协议保障高可用性和数据一致性复制,且每个节点集合会包含大量的分片组,每个分片组对应一个raft group
  • 每个分片组隶属于某个volume,分片组都是某个volume的一段元数据范围(inode id范围[100-20000) )
  • 元数据子系统通过分裂来完成动态扩容
  • 当一分片组的性能(包含如下指标:内存)紧接临近值时,资源管理器服务会预估一个结束点,并通知此组节点设备,只服务到此点之前的数据,同时也会新选出一组节点,并动态加入到当前业务系统中,新节点组其实点刚好是上个节点组的结束点位置。

复制

元数据更新的复制是以元数据分片为单位的。复制强一致性是通过Raft改良版本,MultiRaft来实现的。MultiRaft减少了心跳通信的负担。

故障恢复

内存元数据分片通过快照的方式持久化到磁盘以作备份和恢复使用,日志压缩技术被用来减小日志文件大小和恢复时间。

值得一提的是,元数据操作有可能会导致孤儿inode,即只有inode但是没有对应的dentry。为了减少这种情况的发生,

  • 首先,元数据节点通过Raft保证高可用,单点故障后可以迅速恢复
  • 其次,客户端保证在一定时间内进行重试

更多详情

更多详情请查看CubeFS存储技术揭秘|元数据设计

在github上编辑