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 读取数据过程
- 当 Client 需要数据时,先向 Master 服务器发送查询请求
- Master 检索自己的数据,发送获得数据的数据服务器位置 ( IP | Port | Chunkid ) 给 Client
- Client 向具体的 Chunk servers 发起数据获取请求
- Chunk Servers 将数据发送给 Client
- MFS 写入数据过程
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 修改文件过程
- 有,则申请新的块存放更改后的文件,删除原有块和 .swp 文件块
- 无,则直接删除 .swp 文件块
1、Client 要修改文件时,先向 Master 发送修改操作信息
2、Master 申请新的块给 .swp 文件,Client 关闭文件后,会向 Master 发送关闭信息
3、Master 会检测内容是否有更新
- 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
- /trash (包含可以被还原的被删除文件的信息)
- /trash/undel (用于获取文件)
只有管理员有权限访问 MFSMETA ( uid 0的用户,通常是root )
- 隔离时间
删除某个文件能够存放在一个“垃圾箱”(即回收站)的时间。
当隔离时间设为数字 0 意味着一个文件被删除后,将立即被彻底删除,无法再回收。
- 删除文件的文件名
- 被删文件的文件名在“垃圾箱”目录里还可见,文件名由一个八位十六进制的数(i-node)和被删文件的文件名组成;
- 在文件名和 i-node 之间不是用“/”,而是用了 “|” 替代;
- 如果一个文件名的长度超过操作系统的限制(通常是255 个字符),那么多出部分将被删除;
- 文件名从挂载点起路径写全的文件被删除后仍然可以读写。
相关笔记:实验七 部署 MFS 分布式共享存储