MFS-学习总结(基础概念)

官方网站:

  • 首页:https://moosefs.com
  • 软件资源:https://moosefs.com/download/#current
  • 用户手册:https://moosefs.com/support/#documentation

简介

  • MFS:MooseFS,是一个具备冗余容错功能的分布式网络文件系统,它将数据分别存放在多个物理服务器或单独磁盘或分区上,确保一份数据有多个备份副本。对于访问的客户端或者用户来说,整个分布式网络文件系统集群看起来就像一个资源一样。
  • 对于标准文件操作来说,MooseFS与其他类似Unix的文件系统相似的地方:
    • 层次结构(目录树)
    • 存储POSIX文件属性(权限,上次访问和修改时间)
    • 支持特殊文件(块和字符设备,管道和套接字)
    • 符号链接(指向目标文件的文件名,不一定在MooseFS上)和硬链接链接(引用MooseFS上相同数据的文件的不同名称)
    • 可以根据IP地址和/或密码来限制对文件系统的访问
  • MooseFS的独特功能:
    • 高可靠性(数据的多个副本可以存储在单独的物理机上)
    • 通过添加新的计算机/磁盘可动态扩展容量
    • 删除的文件将保留一段可配置的时间(文件系统级别的“垃圾箱”)
    • 即使正在写入/访问文件时,文件的连贯快照也不会被影响

使用场景

  • 存在的优势:
    • MFS是基于FUSE(用户空间文件系统)机制的,所以支持含有FUSE的操作方式的系统
    • MFS部署简单并提供Web界面的方式进行管理与监控,同其他分布式操作系统一样,支持在线扩容,并进行横向扩展
    • MFS还具有可找回误操作删除的文件,相当于一个回收站,方便业务进行定制
    • 同时MooseFS对于海量小文件的读写要比大文件读写的效率高的多
  • 存在的问题:
    • MFS的主备架构情况类似于MySQL的主从复制,从可以扩展,主却不容易扩展
    • 随着MFS体系架构中存储文件的总数上升,Master Server对内存的需求量会不断增大
    • Master Server存在单点问题,官方解决方式是把数据信息从Master Server同步到Metalogger Server上,Master Server一旦出问题Metalogger Server可以恢复升级为Master Server,但是需要恢复时间,解决方式属于冷备。目前,也可以通过第三方的高可用方案(peachmaker+moosefs)来解决 Master Server 的单点问题

MFS组成

组件名称        英文      软件            功能
管理服务器Master Serversmoosefs-master
moosefs-cgi
moosefs-cgiserv
moosefs-cli
在整个体系中负责管理文件系统,维护元数据,目前不支持高可用
元数据(metadata)信息包括文件(也可以是目录、socket、管道、设备等)的大小、属性、文件位置路径等,以及文件空间的回收和恢复,控制多chunk server节点的数据拷贝
数据存储服务器Chunk Serversmoosefs-chunkserver存放数据文件实体的服务器了,这个角色可以有多台不同的物理服务器或不同的磁盘及分区来充当
当配置数据的副本多于一份时,在写入到一个数据服务器后,会根据算法在其他数据服务器上进行同步备份
真正存储数据的服务器,服务器越多,容量就越大,可靠性越高,性能越好
元数据日志服务器Metaloggersmoosefs-metalogger作用是备份管理服务器master的变化的metadata信息日志文件,文件类型为changelog_ml.*.mfs,以便于在主服务器出现问题的时候,可以经过简单的操作即可让新主服务器进行工作
类似Mysql的主从同步,只不过他不像mysql从库那样在本地应用数据,而只是接收主服务器上文件写入时记录的文件相关的metadata信息
这个backup可以有一台或多台
客户端Clientsmoosefs-client挂载并使用mfs文件系统的客户端,当读写文件时,客户端首先连接主管理服务器获取数据的metadata信息,然后根据得到的metadata信息,访问数据服务器读取或写入文件实体
mfs客户端通过FUSE mechanism实现挂载MFS文件系统的。因此,只要系统支持FUSE,就可以作为客户端访问MFS整个文件系统。所谓的客户端并不是网站用户,而是前端访问文件系统的应用服务器,如web

MFS处理逻辑

读取数据的过程

在这里插入图片描述

  • 上图 Master Server用三角形表示;Chunk Server用圆形表示;Client 用正方形表示
  • 整个读过程如上图有以下四个步骤:
  1. 首先客户端(client)访问主服务器(master),获取文件实体的位置等相关信息
  2. 主服务器(master)查询缓存记录,把文件实体的位置(如存在XX数据服务器上)等相关信息发给客户端(client)
  3. 客户端(client)根据拿到的信息去访问对应的存储实体数据的服务器(chunk servers)
  4. 存储实体数据的服务器(chunk servers)把对应的数据返回给客户端(client)
  • 通过图中图形还可以看出,当多个MFS客户端读数据的时候,master服务器充当路由为这些客户端分发指路的作用,而数据的返回时由不同的数据服务器直接返回给请求的客户端,这样的模式可以极大的减轻主服务器的系统及网络瓶颈,增加了整个系统的吞吐

写入数据的过程

在这里插入图片描述

  • 上图 Master Server用三角形表示;Chunk Server用圆形表示;Client 用正方形表示
  • 整个读过程如上图有以下8个步骤:
  1. 客户端访问主服务器,请求写入数据
  2. 根据数据是否为第一次写入进行判断,若为第一次写入跳转2a,若不为第一次写入,直接反馈数据存储服务器信息
    2a. 主服务器查询缓存记录,如果是新文件,则会联系服务器创建对应的chunk对象准备存放文件
    2b. 数据服务器返回创建对应的chunk对象成功给主服务器。
  3. 主服务器把文件实体的位置等相关信息发给客户端
  4. 客户端访问对应的数据服务器写数据
  5. 数据服务器之间进行数据同步
  6. 存储数据的数据库服务器之间互相确认成功
  7. 数据服务器返回成功写入信息给客户端
  8. 客户端回报给主服务器写入结束

MFS维护

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

  • 文件以chunk大小存储,每chunk最大为64M,小于64M的,该chunk的大小即为该文件大小(验证实际chunk文件略大于实际文件),超过64M的文件将被切分,以每一份(chunk)的大小不超过64M为原则;块的生成遵循规则:目录循环写入(00-FF 256个目录循环,step为2)、chunk文件递增生成、大文件切分目录连续。

  • Chunkserver上的剩余存储空间要大于1GB(Reference Guide有提到),新的数据才会被允许写入,否则,你会看到No space left on device的提示,实际中,测试发现当磁盘使用率达到95%左右的时候,就已经不行写入了,当时可用空间为1.9GB。

  • 文件可以有多份copy,当goal为1时,文件会被随机存到一台chunkserver上,当goal的数大于1时,copy会由master调度保存到不同的chunkserver上,goal的大小不要超过chunkserver的数量,否则多出的copy,不会有chunkserver去存。

安全开启/停止MFS集群

启动 MooseFS 集群

  1. 启动 mfsmaster 进程
  2. 启动所有的 mfschunkserver 进程
  3. 启动 mfsmetalogger 进程(如果配置了mfsmetalogger)
  4. 当所有的 chunkservers 连接到 MooseFS master 后,任何数目的客户端可以利用 mfsmount 去挂载被 export 的文件系统。(可以通过检查 master 的日志或是 CGI 监控页面来查看是否所有的chunkserver 被连接)。

停止 MooseFS 集群

  1. 在所有的客户端卸载MooseFS 文件系统(用umount命令或者是其它等效的命令)
  2. 用 mfschunkserver –s命令停止chunkserver进程
  3. 用 mfsmetalogger –s命令停止metalogger进程
  4. 用 mfsmaster –s命令停止master进程

默认端口设定

master:9419(matelogger)、9420(chunkserver)、9421(client)、9425(cgi)
chunkserver:9419(master控制)、9420(master命令)、9422(client)
matelogger:9420(master)

MFS元数据备份

  • 通常元数据有两部分的数据:
    • 主要元数据文件metadata.mfs,当mfsmaster 运行的时候会被命名为metadata.mfs.back
    • 元数据改变日志changelog.*.mfs,存储了过去的N 小时的文件改变(N 的数值是由BACK_LOGS参数设置的,参数的设置在mfschunkserver.cfg 配置文件中)。
  • 主要的元数据文件需要定期备份,备份的频率取决于取决于多少小时changelogs 储存。元数据changelogs 实时的自动复制。1.6版本中这个工作都由metalogger完成。

常用命令

mfsgetgoal                               #获取副本数设定
mfssetgoal                               #设定副本数
mfsgettrashtime                          #获取回收站时间
mfssettrashtime                          #设定回收站时间
mfscheckfile                             #检查文件
mfsfileinfo                              #文件信息
mfsdirinfo                               #目录信息
mfsfilerepair                            #文件修复
mfsmakesnapshot                          #快照     
mfsgeteattr                              #获取权限设置信息
mfsseteattr								 #设置权限
mfsscadmin								 #设定储存类
mfssetclass								 #设置存储类与文件目录的绑定
mfsxchgsclass							 #更新储存类设定

存储类(storage class)

概念

  • 存储类:storage class,允许指定文件的chunks存放在具有标签(label)定义的chunkservers上。
  • 标签:label,储存类使用label对chunkserver进行定义,然后使用label表达式对副本存储方式进行储存类设定

服务器打标签

  • 要求:
    • label仅能使用(A-Z 的26个大写字母)来定义chunkserver
    • 每个chunkserver可以被打上多个标签(即标记上多个字母,但最多可以打26个label)
  • 方式:
    1. 给chunkserver打label,需要先修改相应chunkserver的配置文件 /etc/mfs/mfschunkserver.cfg,编辑该配置文件,将LABELS = A前面的注释符号去掉,并设置上你想要的标签;若想为chunkserver设置多个标签,则如下三种方式都可以:LABELS = XYZLABELS = X Y ZLABELS = X, Y, Z(三种方式定义效果一样,都是给服务器打上了X|Y|Z三个标签)
    2. 标签设置好后,需要通知chunkserver进程配置文件更新达到效果,使用如下两个命令均可service moosefs-pro-chunkserver reloadmfschunkserver reload

存储类设定

  • 存储类设定:通过标签表达式来对副本存储方式进行设定,完整的标签表达式可以由多个子表达式构成,每个子标签之间用逗号分隔,每个子表达式特指一个文件副本的一种存储模式。子表达式可以为星号*表示任意标签;相同的子表达式可以通过在表达式前加数字的方式来表示,而不用重复显示声明多次。
  • 标签表达式:label schema,是一个label或由字母与加法、乘法和括号构成的复杂表达式。
    • 加法:’+’ ,是逻辑“或”的含义,即文件的副本可以被存放在任意含有加法元素label的chunkserver上。例如,一个文件的storage class是A+B+C,那么任何含有A、B或C标签的chunkserver都可以用来存储该文件的副本。
    • 乘法:是逻辑“与”的含义,即文件的副本仅可以存放在包含所有label的chunkserver上。例如,一个文件的storage class是ABC,那么只有当一台chunkserver同时含有ABC三个标签时,它才能用于存放该文件的副本。
    • 标签表达式例子:
      • A,B :存储文件将具有两个副本,一个副本将存储在带有标签A的块服务器上,另一个在标签为B的服务器上
      • A,* :文件将具有两个副本,一个副本将存储在标签为A的服务器上,另一个将储存在集群内的任何一台服务器上
      • *,* :文件将有两个副本,存储在集群内任何服务器上(每个副本不同)
      • AB,C + D :文件将具有两个副本,一个副本将存储在具有标签A和B的服务器上(标签的乘用法),另一个将存储在服务器上具有C标签或D标签(标签的和用法)
      • A,B [X + Y],C [X + Y] :文件将具有三个副本,一个副本将存储在任意一个带有A标签的服务器上,第二个在具有B标签和X或Y标签(即BX或BY)的服务器上,第三个副本存储在具有C标签和X或Y标签(即CX或CY)的服务器上
      • A,A:表达式等于2A表达式
      • A,BC,BC,BC:表达式等效于A,3BC表达式
      • *,*:表达式等于2 *表达式,等于2表达式
定义存储类样例:
# 首先,mount一个mfs卷
mount -t moosefs mfsmaster.test.lan: /mnt/mfs
#然后,进入到mount点的目录下
cd /mnt/mfs
#假设我们希望将文件的2个副本存放在带有label A的chunkserver上,则可以创建storage class如下:
mfsscadmin create 2A sclass1
#上面这条命令的含义为:每一个属于sclass1的文件,将会拥有2个副本,其中每个副本将存放在带有标签A的chunkserver上。
#类似的,可以创建另一个storage class,让文件再生成2个副本存放在带有标签B的chunkserver上。
mfsscadmin create 2B sclass2
#此外,不一定要cd到mount的目录中进行storage class的创建,也可以通过显示指定目录的方式来给文件创建storage class,例如:
mfsscadmin /mnt/mfs create 2B sclass2
显示存储类样例:
#列出某个mfs目录拥有的storage class列表,也可以通过加上-l参数来获取相信的信息
mfsscadmin list
使用储存类样例:
#将storage class配置到文件或目录上,有很多个命令工具都可以为文件或目录配置storage class:
mfsgetsclass, mfssetsclass, mfscopyclass, mfsxchgsclass, mfslistclass
#现在,可以将一些数据存入mfs中了。创建两个目录dataX dataY:
cd /mnt/mfs
mkdir {dataX,dataY}
#为dataX目录添加sclass1这个storage class:
mfssetsclass sclass1 dataX
#执行该指令后,dataX及其子目录中所有的目录和文件将自动根据sclass1策略来存储文件。
#同样的,为dataY分配sclass2这一storage class:
mfssetsclass sclass2 dataY
  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值