一、简介
1.什么是分布式文件系统
- 数据量越来越多,在一个操作系统管辖的范围存不下了,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,因此迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统 。
- 是一种允许文件通过网络在多台主机上分享的文件系统,可让多机器上的多用户分享文件和存储空间。
- 通透性。让实际上是通过网络来访问文件的动作,由程序与用户看来,就像是访问本地的磁盘一般。
- 容错。即使系统中有某些节点脱机,整体来说系统仍然可以持续运作而不会有数据损失。
- 适用于一次写入多次查询的情况,不支持并发写情况,小文件不合适。
为什么小文件不适合呢?瓶颈在于存储元数据信息。元数据信息存放在namenode上,为保证数据安全和快速读写,namenode把信息放到磁盘一份和内存一份。
常见的分布式文件系统
GFS、HDFS、Lustre 、Ceph 、GridFS 、mogileFS、TFS、FastDFS等。各自适用于不同的领域。它们都不是系统级的分布式文件系统,而是应用级的分布式文件存储服务。
2.什么是MooseFS
MooseFS是一个具备冗余容错功能的分布式网络文件系统,它将数据分别存放在多个物理服务器或单独磁盘或分区上,确保一份数据有多个备份副本。对于访问的客户端或者用户来说,整个分布式网络文件系统集群看起来就像一个资源一样。从其对文件操作的情况看,MooseFS就相当于一个类UNIX文件系统。
MFS基于TCP/IP协议,存储对网络要求比较高,尽量在一个vlan里,也可以不在一个vlan,但是必须保证他们之间是高速网络(通过光纤或者无线带宽技术),网络不好会增加延迟。
3.适用场景
MooseFS是一款相对小众的分布式文件系统,不需要修改上层应用接口即可直接使用,支持FUSE的操作方式,部署简单并提供Web界面的方式进行管理与监控,同其他分布式操作系统一样,支持在线扩容,并进行横向扩展。MooseFS还具有可找回误操作删除的文件,相当于一个回收站,方便业务进行定制;同时MooseFS对于海量小文件的读写要比大文件读写的效率高的多。
但MooseFS的缺点同样明显,MFS的主备架构情况类似于MySQL的主从复制,从可以扩展,主却不容易扩展。短期的对策就是按照业务来做切分,随着MFS体系架构中存储文件的总数上升,Master Server对内存的需求量会不断增大。并且对于其单点问题官方自带的是把数据信息从Master Server同步到Metalogger Server上,Master Server一旦出问题Metalogger Server可以恢复升级为Master Server,但是需要恢复时间。目前,也可以通过第三方的高可用方案(heartbeat+drbd+moosefs)来解决 Master Server 的单点问题。
4.四大组件
- 管理服务器(Master Server):这个组件的角色是管理整个mfs文件系统的主服务器,除了分发用户请求外,还用来存储整个文件系统中的每个数据文件的metadata信息,metadata(元数据)信息包括文件(也可以是目录、socket、管道、设备等)的大小、属性、文件位置路径等,以及文件空间的回收和恢复,控制多chunk server节点的数据拷贝。很类似lvs负载均衡主服务器,不同的是lvs仅仅根据算法分发请求,而master根据内存里的metadata信息来分发请求。这个master只能有一台处于激活工作的状态。
- 元数据日志服务器(metalogger Server):作用是备份管理服务器master的变化的metadata信息日志文件,文件类型为changelog_ml.*.mfs,以便于在主服务器出现问题的时候,可以经过简单的操作即可让新主服务器进行工作。这很类似Mysql的主从同步,只不过他不像mysql从库那样在本地应用数据,而只是接收主服务器上文件写入时记录的文件相关的metadata信息。这个backup可以有一台或多台,它很类似于lvs从负载均衡器。
- 数据存储服务器(Chunk Servers):存放数据文件实体的服务器,这个角色可以有多台不同的物理服务器或不同的磁盘及分区来充当,当配置数据的副本多于一份时,剧写入到一个数据服务器后,会根据算法在其他数据服务器上进行同步备份。
- 客户端(Client):挂载并使用mfs文件系统的客户端,当读写文件时,客户端首先连接主管理服务器获取数据的metadata信息,然后根据得到的metadata信息,访问数据服务器读取或写入文件实体。mfs客户端通过FUSE mechanism实现挂载MFS文件系统的。因此,只要系统支持FUSE,就可以作为客户端访问MFS整个文件系统。所谓的客户端并不是网站用户,而是前端访问文件系统的应用服务器,如web
5.工作方式(读写原理)
Master Server用三角形表示,Chunk Server用圆形表示,Client 用方形表示。
读的工作方式
- 首先client客户端访问主服务器master,获取文件实体的位置等相关信息。
- 主服务器master查询缓存记录,把文件实体的位置等相关信息发给client客户端。
- Client客户端根据拿到的信息去访问对应的存储实体数据的服务器(data servers或者chunk servers)。
- 存储实体数据的服务器(data servers或者chunk servers)把对应的数据返回给Client客户端。
我们还可以看出,当多个MFS客户端读数据的时候,master服务器充当路由为这些客户端分发指路的作用,而数据的返回时由不同的数据服务器直接返回给请求的客户端,这样的模式可以极大的减轻主服务器的系统及网络瓶颈,增加了整个系统的吞吐。
写的工作方式
- Client客户端访问主服务器master,请求写入数据。
- 主服务器master查询缓存记录,如果是新文件,则会联系后面的数据服务器创建对应的chunk对象准备存放文件。
- 数据服务器返回创建对应的chunk对象成功给主服务器。
- 主服务器master把文件实体的位置等相关信息发给client客户端。
- Client客户端访问对应的数据服务器写数据。
- 数据服务器之间进行数据同步,互相确认成功。
- 数据服务器返回成功写入信息给Client客户端。
- Client客户端回报给主服务器master写入结束。
写分为更新和创建,如果是更新直接执行第三步
实验环境:
master:server4
chunk:server5,server6,server7
client:foundation5
创建3个虚拟机,server4内存给2G,server4储存元数据,性能消耗大。server5,server6给1G。
二、安装配置Moosefs主节点
Moosefs官网
软件或配置可以直接在官方网站进行查看
我选择的是CentOS / Fedora / RHEL
1.配置yum源(直接从官网进行下载)
首先真机做一个火墙的伪装,使虚拟机能上网
[root@foundation5 ~]# iptables -t nat -I POSTROUTING -s 172.25.5.0/24 -j MASQUERADE
[root@server4 ~]# curl "http://ppa.moosefs.com/MooseFS-3-el7.repo" > /etc/yum.repos.d/MooseFS.repo
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 168 100 168 0 0 243 0 --:--:-- --:--:-- --:--:-- 242
[root@server4 ~]# yum repolist
Loaded plugins: product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager to register.
MooseFS | 2.9 kB 00:00:00
rhel7.6 | 4.3 kB 00:00:00
(1/3): rhel7.6/group_gz | 146 kB 00:00:00