1.经典的文件系统概述

索引式文件系统将底层存储数据的磁盘空间切分为块并为每个文件对象所占用所有块建立一个索引表进行统一存放在一个称为“元数据区”的空间中

  • 索引表就是块地址数组,每个数组元素就是块的地址,于是,一个文件对象的块可以分散存储到离散块空间中
  • 索引表的索引结构称为inode,用于索引、跟踪一个文件对象的权限、隶属关系、时间戳和占据的所有的块等属性信息,不过却不包括文件名和文件内容本身

  • 文件名及其隶属的目录层级关系通过Dentry进行描述

    • 每个Dentry就像一个映射表,它保存了本级目录或者文件名以及紧邻的下一级目录或者文件的名称与各自inode的映射关系
    • 而Dentry自身也需要由专用的inode对象承载,它也拥有自己的inode,于是这种映射便可组织出多级别层次来,这个多级别的层次起始于一个惟一的称之为“根”的起始点,从而形成一个树状组织结构

1.1 CephFS

CephFS用于为RADOS存储集群提供一个POSIX兼容的文件系统接口

  • 基于RADOS存储集群将数据与元数据IO进行解耦
  • 动态探测和迁移元数据负载到其它MDS,实现了对元数据IO的扩展

  • 第一个稳定版随Jewel版本释出

  • 自Luminous版本起支持多活MDS(Multiple Active MDS)

特性

  • 目录分片
  • 动态子树分区和子树绑定(静态子树分区)

  • 支持内核及FUSE客户端

  • 其它尚未稳定特性还包括内联数据(INLINEDATA)、快照和多文件系统等

1.2 MDS

负责检测元数据服务器(MetaData Server)的状态变化的系统组件,处理来自CephFS相关的请求命令
MDS自身并不会直接存储任何数据,所有的数据均由后端的RADOS集群负责存储,包括元数据,MDS本身更像是一个支持读写的索引服务

  • CephFS依赖于专用的MDS(MetaData Server)组件管理元数据信息并向客户端输出一个倒置的树状层级结构
  • 将元数据缓存于MDS的内存中

  • 把元数据的更新日志于流式化后存储在RADOS集群上

  • 将层级结构中的的每个名称空间对应地实例化成一个目录且存储为一个专有的RADOS对象

1.3 Multi MDS

多主MDS模式是指CephFS将整个文件系统的名称空间切分为多个子树并配置到多个MDS之上,不过,读写操作的负载均衡策略分别是子树切分和目录副本

  • 将写操作负载较重的目录切分成多个子目录以分散负载
  • 为读操作负载较重的目录创建多个副本以均衡负载子树分区和迁移的决策是一个同步过程,各MDS每10秒钟做一次独立的迁移决策,每个MDS并不存在一个一致的名称空间视图,且MDS集群也不存在一个全局调度器负责统一的调度决策

  • 各MDS彼此间通过交换心跳信息(HeartBeat,简称HB)及负载状态来确定是否要进行迁移、如何分区名称空间,以及是否需要目录切分为子树等

  • 管理员也可以配置CephFS负载的计算方式从而影响MDS的负载决策,目前,CephFS支持基于CPU负载、文件系统负载及混合此两种的决策机制

1.4 元数据分区

  • 文件元数据的工作负载通常是一类小而密集的I/O请求,因此很难实现类似数据读写I/O的扩展方式

分布式文件系统提供了将名称空间分割治理的解决方案,通过将文件系统根树及其热点子树分别部署于不同的元数据服务器进行负载均衡,从而赋予了元数据存储线性扩展的可能

例如:某个MDS出现故障新的MDS需要去先接管他所拥有的Rank数据缓存到自己的数据中这需要一个过程,一般解决方案给每一个MDS都做主备方案,或者有公共的MDS在某MDS坏的时候迅速接管,最好的方案做主备在线同步以便出问题可以即时的替换无卡壳(多活MDS)

  • 静态子树分区 -> 通过手工分区方式,将数据直接分配到某个服务节点上,出现负载不均衡时,由管理员手动重新进行分配
  • 静态Hash分区
  • 惰性混编分区

  • 动态子树分区 -> 基于静态根据负载情况动态的合理分配mds接管的元数据

在采用动态子树分区法的基础上,CephFS为了达到最佳的扩展性和性能,将元数据和业务数据进行了分离,并且统一存储到RADOS层。存储海量数据的RADOS实际上是基于Hash计算方法来实现的,刚才我们描述过元数据其实不太适合使用Hash这种方式进行存储,那为什么CephFS的元数据仍然使用基于Hash方式的RADOS层来保存呢?原因在于:CephFS元数据访问并不是直接从RADOS层获取,而是存在一个元数据缓存区,其中元数据基于动态子树分区的方式进行分配,因此元数据落盘方式则显得无关紧要,为了简化设计以及利用RADOS的共享存储功能,缓存中的元数据最终落盘于RADOS层,则成为最优选择

Multi MDS

简述

每一个CephFS都有一个容易读的文件系统名称和一个称为FSCID的标识符ID,并且每一个CephFS默认情况下都只配置一个Active MDS守护进程

  • 一个MDS集群中可处于Active状态的MDS数量的上限由Max_mds参数设置,它控制可用的Rank数量,默认为1

    • rank指CephFS上可同时处于Active状态的MDS守护进程的可用编号,其范围从0到max_mds-1
    • 一个rank编号意味着一个可以承载CephFS层级文件系统目录子树的元数据管理功能的Active状态的Ceph-mds守护进程的编制,max_mds的值为1意味着仅仅有一个0号的rank可用
    • 第一次启动的ceph-mds守护进程没有接管任何rank,它在之后的由mon按需求进行分配
    • 一个ceph-mds一次仅可以占有一个rank,并且在守护进程终止时将其释放
    • 一个人rank可以有3种状态
Rank状 态 相关描述
Up rank已经由某一个ceph-mds守护进程接管
Failed rank未被任何ceph-mds守护进程接管
Damaged rank处于损坏状态,其元数据处于崩溃丢失状态,在管理员修复问题并对其运行的ceph mds repaired命令前,处于损坏状态的rank不能分配给其它的任何MDS使用

负载调度方式

多主MDS模式是指CephFS把整个文件系统的名称空间切分为多个子树并且分配到多个MDS上,但是读写操作的负载策略是子树切分和目录副本.

子树分区和迁移的策略的决策是一个同步的过程各个MDS每过10秒做一次独立的迁移决策,每一个MDS并不存在一个一致的名称空间视图,并且MDS集群也不存在一个全局调度器负责统一调度决策,各个MDS彼此之间通过交换心跳信息,及其负载状态来确定是否要进行迁移/如何划分名称空间,以及是否需要目录切分子树

  • 将写操作负载较重的目录切分成多个子目录以分散负载
  • 为读操作负载较重的目录创建多个副本来均衡负载
  • 管理员可以配置CephFS负载的计算方式从而影响MDS的负载决策,当前版本支持基于CPU负载/文件系统负载/混合负载等决策机制

MDS机制

动态子树分区依赖于共享存储完成热点负载在MDS间的迁移,于是Ceph将MDS的元数据存储于后面的RADOS集群上的专用存储池中,这个存储池可以多个MDS共享

  • MDS对于元数据的访问并不直接基于RADOS进行,而是为其提供一个基于内存的缓存区以缓存热点元数据并且在元数据相关日志条目过期之前将一直存储在内存之中

容错问题

CephFS使用元数据日志来解决容错问题

  • 元数据日志信息流,存储于CephFS元数据存储池中的元数据日志文件上,类似于LFS(Log-Structured File System)/WAFL(Write Anywhere File Layout)的工作机制
  • CephFS元数据日志文件的体积可以无限增长以确保日志信息能够顺序的写入RADOS,并且额外赋予守护进程修剪冗余或不相关的日志条目的能力

CephFS文件存储系统相关推荐

  1. 第⑩讲:Ceph集群CephFS文件存储核心概念及部署使用

    文章目录 1.CephFS文件存储核心概念 1.1.CephFS文件存储简介 1.2.CephFS文件存储架构 1.3.CephFS文件系统的应用场景与特性 2.在Ceph集群中部署MDS组件 3.在 ...

  2. 初试 Kubernetes 集群使用 CephFS 文件存储

    目录 Kubernetes PersistentVolumes 介绍 环境.软件准备 单节点使用 CephFS Kubernetes PV & PVC 方式使用 CephFS 测试跨节点使用 ...

  3. 分布式文件存储系统调研

    分布式文件存储系统调研 主流分布式文件存储系统 分布式文件系统 适合类型 文件分布 系统性能 复杂度 备份机制 接口类型 开发语言 使用 FastDFS 4KB~500MB 小文件合并存储,不分片处理 ...

  4. fastdfs安装_用asp.net core结合fastdfs打造分布式文件存储系统

    今天主要是对开发过程,以及对FastDFS这个通用的分布式文件存储服务的单机及集群安装部署过程做个总结.希望对想要自建分布式文件系统的朋友有所帮助. 什么是FastDFS 这里先简单介绍下分布式文件存 ...

  5. 一图看懂hadoop分布式文件存储系统HDFS工作原理

    一图看懂hadoop分布式文件存储系统HDFS工作原理 转载于:https://www.cnblogs.com/AlexQY/p/9856477.html

  6. 如何分享文件_分布式文件存储系统如何分享文件

    今天说的就是QKFile分布式文件存储系统,既然是分布式系统,那么我们就要简单的科普一下分布式存储系统的结构及由来!请看下文 分布式共享存储(DSM)系统是将分散的存储系统通过网络连接起来的系统,兼有 ...

  7. django中FastDFS客户端与自定义文件存储系统

    什么是FastDFS FastDFS 是用 c 语言编写的一款开源的分布式文件系统.FastDFS 为互联网量身定制, 充分考虑了冗余备份.负载均衡.线性扩容等机制,并注重高可用.高性能等指标,使用 ...

  8. fastdfs 吗 支持windows_主流开源文件存储系统-fastdfs是否支持windows?你可以选择minio...

    首先答案是肯定的,fastdfs不支持windows. 其次建议你使用Minio 一.引言 一般来说文件存储花钱就选择阿里云oss.七牛云等产品,开源的话,目前开源的分布式文件存储系统非常多,上网一搜 ...

  9. 用asp.net core结合fastdfs打造分布式文件存储系统

    最近被安排开发文件存储微服务,要求是能够通过配置来无缝切换我们公司内部研发的文件存储系统,FastDFS,MongDb GridFS,阿里云OSS,腾讯云OSS等.根据任务紧急度暂时先完成了通过配置来 ...

最新文章

  1. 基于Spring Boot+Cloud构建微云架构
  2. 北京 | 蚂蚁集团共享智能团队招聘研究实习生
  3. 机器人搬运礼盒程序_机器人搬运程序.doc
  4. xmind怎么在左边创建_威纶通 触摸屏自动化应用篇 创建程序界面及画面应用
  5. Java学习日志(19-3-IO流-字节流操作)
  6. 2021-08-06 MD5mysql 加密校验
  7. css(二) block,inline和inline-block概念和区别
  8. VO与Map之间的相互转换
  9. 图解FPGrowth 算法
  10. 如何将华为备忘录转移到小米便签
  11. 计算机主机hdmi接口是什么意思,笔记本电脑HDMI接口是干什么的
  12. SSM项目之短信验证码登录
  13. 使用DNSLog进行盲打
  14. 名帖315 沈尹默 行书《兰亭序》书轴
  15. 两种方法设置 .NET/C# 项目的编译顺序,而不影响项目之间的引用
  16. 产品设计公司的头脑风暴是什么?
  17. C语言实用小技巧合集(持续更新)
  18. vue-video-player 拖动进度条触发暂停移动端展示倍速菜单
  19. Google 桌面搜索的使用
  20. 1.测试步骤,分类,流程,8要素

热门文章

  1. 课程升级后-课件软件下载地址
  2. 高通骁龙835:手机充电5分钟续航5小时
  3. 【C语言】函数调用的参数压栈(详解)
  4. echarts的饼图颜色改为渐变色
  5. C++小游戏扫雷——如何写出一个简易的扫雷
  6. JAVA爬虫爬取携程酒店数据selenium实现
  7. 昨天晚上终于洗了那件大家都说很naive的羊毛衫......
  8. Java并发编程之LinkedTransferQueue阻塞队列详解
  9. 爬取google scholar数据
  10. python3爬取微博评论并存为xlsx