共享存储(二)- 分布式存储 MooseFS
00 分钟
2024-6-25
Created
Jun 6, 2024 03:36 AM
Tags

分布式对象存储

分布式文件系统

Distributed File System
是指文件系统管理的物理存储资源不一定直接连接到本地节点上,而是通过计算机网络与节点相连
  • 分布式文件系统的设计基于 C/S 模式
  • 一个典型的网络可能包括多个供多用户访问的服务器

MooseFS

官方文档:

优越特性

1、Free(GRL)通用文件系统
2、可以在线扩容,体系架构可伸缩性极强
3、高可用,可设置任意的文件冗余程度
提供比 raid10 更高的冗余级别,而绝对不会影响读写的性能,只会加速
4、可回收在指定时间内删除的文件
“回收站”,提供的是系统级别的服务,提供类似即时回滚特性
5、提供了类似于 EMC、IBM 等商业存储的 snapshot(快照)特性
可以对整个文件甚至在正在写入的文件创建文件的快照

服务组成对象及作用

  • 管理服务器
    • Managing Server (Master)
      负责各个数据存储服务器的管理,文件读写调度,文件空间回收以及恢复,多节点拷贝
  • 元数据日志服务器
    • Metalogger Server (Metalogger)
      负责备份 master 服务器的变化日志文件,文件类型为 changelog_ml.*.mfs,以便于在 Master 服务器出问题的时候提供数据找回功能
  • 数据存储服务器
    • Data Servers (Chunk Servers)
负责连接管理服务器,听从管理服务器调度,提供存储空间,并为客户提供数据传输
  • 客户机
    • Client computers,挂载使用
通过 fuse 内核接口挂接远程管理服务器上所管理的数据存储服务器,看起来共享的文件系统和本地 Unix 文件系统使用一样的效果

工作原理和设计架构

  • MFS 读取数据过程
    • MooseFS Read Process
      MooseFS Read Process
      1. 当 Client 需要数据时,先向 Master 服务器发送查询请求
      1. Master 检索自己的数据,发送获得数据的数据服务器位置 ( IP | Port | Chunkid ) 给 Client
      1. Client 向具体的 Chunk servers 发起数据获取请求
      1. Chunk Servers 将数据发送给 Client
 
  • MFS 写入数据过程
    • MooseFS Write Process
      MooseFS Write Process
      1、Client 写入数据时,先向 Master 提供文件元数据信息请求存储地址
      元数据信息:文件名、大小、份数等
      2、Master 根据元数据信息,连接 Chunk Servers 创建新的数据块
      3、Chunk Servers 返回数据块,创建成功
      4、Master 将 Chunk Servers 的地址返回给 Client
      5、Client 向 Chunk Servers 写入数据
      6、多个 Chunk Servers 做镜像同步
      默认两个,Client 可指定保存份数
      7、Chunk Servers 返回镜像,同步成功
      8、Chunk Servers 返回数据成功写入的信息给 Client
      9、Client 将这次写完成的结束信号和一些信息发送到 Master
      更新文件长度和最后修改时间,让 Master 记录这次写入的元数据信息
 
  • MFS 删除文件过程
    • 1、Client 删除数据时,先向 Master 发送删除请求
      2、Master 定位到相应元数据信息进行删除,并将 chunk servers 上删除的块加入队列异步清除
      将文件元数据信息和数据本身的关联移到回收站(meta)中,默认24小时后清除数据,数据将无法再找回
      3、Master 响应 Client 删除成功信号
 
  • MFS 修改文件过程
    • 1、Client 要修改文件时,先向 Master 发送修改操作信息
      2、Master 申请新的块给 .swp 文件,Client 关闭文件后,会向 Master 发送关闭信息
      3、Master 会检测内容是否有更新
      • 有,则申请新的块存放更改后的文件,删除原有块和 .swp 文件块
      • 无,则直接删除 .swp 文件块
 
  • MFS 重命名文件过程
    • 1、Client 向 Master 发送操作信息
      2、Master 直接修改元数据信息中的文件名
      3、返回重命名成功信息
 
  • MFS 遍历文件过程
    • 1、Client 向 Master 发送遍历请求
      2、Master 返回相应元数据信息
      3、Client 接收信息后,直接显示遍历结果

文件管理信息

  • Master 记录着管理信息
    • 比如:文件路径、大小、存储的位置(IP | port | chunkid)、份数、时间等
  • 元数据信息存在于内存中
    • 定期写入 metadata.mfs.back 文件
      定期同步Metalogger Server
      实时写入 changelog.*.mfs. 文件
      实时同步Metalogger Server
  • Master 启动将 metadata.mfs 载入内存,重命名为 metadata.mfs.back 文件

Chunk 块

文件以 chunk 大小存储,每份 chunk 最大为 64M(动态)
  • 小于64M的,该 chunk 的大小即为该文件大小
  • 超过64M的文件将被切分,以每一份 chunk 的大小不超过64M为原则
验证:实际 chunk 文件略大于实际文件
  • 块的生成遵循规则
    • 目录循环写入(00-FF 256个目录循环,step为2)
    • chunk文件递增生成
    • 大文件切分目录连续
📢
注:
  • Chunk Servers 上的剩余存储空间要大于1G,新的数据才会被允许写入,否则会看到 No space left on device 的提示
实际测试发现当磁盘使用率达到95%左右的时候,就已经不再写入了,当时可用空间为1.9G
📢
文件可以有多份 Copy
  • 当 goal 为1时,文件会被随机存到一台 chunk servers上
  • 当 goal 的数大于1时,copy 会由 Master 调度保存到不同的 Chunk Servers 上
  • goal 的大小超过 Chunk Servers 的数量时,多出的 copy 不会由 chunk Servers 去存!

回收站

  • MFSMETA
    • 只有管理员有权限访问 MFSMETA ( uid 0的用户,通常是root )
    • /trash (包含可以被还原的被删除文件的信息)
    • /trash/undel (用于获取文件)
  • 隔离时间
    • 删除某个文件能够存放在一个“垃圾箱”(即回收站)的时间。
      当隔离时间设为数字 0 意味着一个文件被删除后,将立即被彻底删除,无法再回收。
  • 删除文件的文件名
    • 被删文件的文件名在“垃圾箱”目录里还可见,文件名由一个八位十六进制的数(i-node)和被删文件的文件名组成;
    • 在文件名和 i-node 之间不是用“/”,而是用了 “|” 替代;
    • 如果一个文件名的长度超过操作系统的限制(通常是255 个字符),那么多出部分将被删除;
    • 文件名从挂载点起路径写全的文件被删除后仍然可以读写。

上一篇
Linux 基础知识 往期汇总
下一篇
<K8S> vol. 01 - kubernetes 组件