分布式系统三、MooseFS

2016-09-22 18:18

一、MooseFS简介

1、介绍

        MooseFS是一个具备冗余容错功能的分布式网络文件系统,它将数据分别存放在多个物理服务器单独磁盘或分区上,确保一份数据有多个备份副本。对于访问的客户端或者用户来说,整个分布式网络文件系统集群看起来就像一个资源一样。


2、特性

从其对文件操作的情况看,MooseFS表现与其他类Unix文件系统一致。

支持的通用文件系统特性:

       mfs是一个分层的目录树结构

       存储支持POSIX标准的文件属性(权限,最后访问和修改时间)

       支持特殊的文件,如:块设备,字符设备,管道和套接字,链接文件(符号链接和硬链接)

      支持基于IP地址和密码的方式访问文件系统

独有特性:

  • 高可靠性

  •        每一份数据可以设置多个副本(多份数据),并可以存储在不同的主机上

  • 高可扩展性

  •       可以很轻松的通过增加主机磁盘容量或增加主机数量来动态扩展整个文件系统的存储量

  • 高可容错性

  •        我们可以通过对mfs进行系统设置,实现当数据文件被删除后的一段时间内,依然存放于主机的回收站中,以备误删恢复数据

  • 高数据一致性

  •        即便文件被写入/访问时,我们依然可以完成对文件的一致性快照


3、优缺点

优点:

       1)由于MFS是基于GPL发布的,因此完全免费,并且开发和社区都很活跃,资料也非常丰富

       2)轻量、易部署、易配置、易维护

       3)通用文件系统,不需要修改上层应用就可以使用(那些需要专门 API 的DFS确实有点麻烦)
       4)扩容成本低、支持在线扩容,不影响业务,体系架构可伸缩性极强(官方的case可以扩到70台了!)
       5)体系架构高可用,所有组件无单点故障
       6)文件对象高可用,可设置任意的文件冗余程度(提供比 Raid 10 更高的冗余级别)

       7)提供系统负载,将数据读写分配到所有的服务器上,加速读写性能

       8)提供诸多高级特性,比如类似Windows的回收站功能、类似JAVA语言的GC(垃圾回收、快照功能等)

       9、MooseFS 是 Google Filesystem 的一个 c 实现

       10、自带 Web Gui 的监控接口

       11、提高随机读或写效率和海量小文件的读写效率(有待进一步证明)


4、应用场景

      谈及MooseFS的应用场景,其实就是去谈分布式文件系统的应用场景。

      1)大规模高并发的数据存储及访问(小文件、大文件),

      2)大规模的数据处理,如日志分析


5、MFS的组件

Master:(元数据服务器)

       负责各个数据存储服务器的管理,文件读写调度,文件空间回收以及恢复,多节点拷贝。

Metalogger:(元数据日志服务器)

       负责备份Master服务器的changelog。文件类型为 changelog.*.mfs ,以便在Master出问题时接替其工作

Chunk:(数据存储服务器)

       负责连接Master,听从Master调度,提供存储空间,并为客户端提供数据传输

Client:(客户端挂载)

       通过FUSE内核接口挂载远程管理服务器(master)上所管理的数据存储服务器,使用起来和本地文件系统一样


MFS工作图解:

wKiom1fjj-3TvkRWAAGpK6jZrys826.png


3、工作原理

  MooseFS是一个文件系统,因此其最主要的工作就是文件的读写流程,即 MooseFS的主要的两大工作过程。

MFS的读文件流程:

wKiom1fjkdLCb9JNAADtM7KFY3s470.png

         图中 Master Server用三角形表示,Chunk Server用圆形表示,Client 用方形表示。

整个读过程有以下四个步骤:

        1)首先client客户端访问主服务器master,获取文件实体的位置等相关信息

        2)主服务器master查询缓存记录,把文件实体的位置等相关信息发给client客户端

        3)Client客户端根据拿到的信息去访问对应的存储实体数据的服务器(data servers或者 chunk servers)

        4)存储实体数据的服务器(data servers或者 chunk servers)把对应的数据返回给Client客户端

        从上图,我们还可以看出,当多个MFS客户端读数据的时候,master服务器充当路由为这些客户端分发指路的作用,而数据的返回时由不同的数据服务器直接返回给请求的客户端,这样的模式可以极大的减轻主服务器的系统及网络瓶颈,增加了整个系统的吞吐,很像LVS的DR模式的负载均衡的分发和数据传输的情况。


MFS写文件流程:

wKiom1fjkdPQkphaAACj0KwdubU103.png

整个写过程要分为下面八个步骤:

        1)Client客户端访问主服务器master,请求写入数据

        2)主服务器master查询缓存记录,如果是新文件,则会联系后面的数据服务器创建对应的chunk对象准备存放文件。

        3)数据服务器返回创建对应的chunk对象成功给主服务器

        4)主服务器master把文件实体的位置等相关信息发给client客户端。

        5)Client客户端访问对应的数据服务器写数据

        6)数据服务器之间进行数据同步,互相确认成功

        7)数据服务器返回成功写入信息给Client客户端

        8)Client客户端回报给主服务器master写入结束


二、MFS安装

    官网:https://moosefs.com

1、环境

    CentOS6.5 x86_64; 各节点时间同步,

node2  192.168.10.2 

node3  192.168.10.3

node4  192.168.10.4


2、配置yum源

[root@Node2 ~]# ls /etc/pki/rpm-gpg/
RPM-GPG-KEY-CentOS-6        RPM-GPG-KEY-CentOS-Security-6
RPM-GPG-KEY-CentOS-Debug-6  RPM-GPG-KEY-CentOS-Testing-6
[root@Node2 ~]# curl "http://ppa.moosefs.com/RPM-GPG-KEY-MooseFS" > /etc/pki/rpm-gpg/RPM-GPG-KEY-MooseFS
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
105  1796  105  1796    0     0   1190      0  0:00:01  0:00:01 --:--:--  1208
[root@Node2 ~]# ls /etc/pki/rpm-gpg/
RPM-GPG-KEY-CentOS-6        RPM-GPG-KEY-CentOS-Security-6  RPM-GPG-KEY-MooseFS
RPM-GPG-KEY-CentOS-Debug-6  RPM-GPG-KEY-CentOS-Testing-6
[root@Node2 ~]# curl "http://ppa.moosefs.com/MooseFS-2-el6.repo" > /etc/yum.repos.d/MooseFS.repo
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
169   169  169   169    0     0    226      0 --:--:-- --:--:-- --:--:--   235
[root@Node2 ~]# ls /etc/yum.repos.d/
CentOS-Base.repo      CentOS-Debuginfo.repo  CentOS-Vault.repo  MooseFS.repo
CentOS-Base.repo.bak  CentOS-Media.repo      epel-6.repo        Zabbix.repo
[root@Node2 ~]# cat /etc/yum.repos.d/MooseFS.repo 
[MooseFS]
name=MooseFS $releasever - $basearch
baseurl=http://ppa.moosefs.com/moosefs-2/yum/el6
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-MooseFS
enabled=1

[root@Node2 ~]# yum list|grep -i moosefs

moosefs-cgi.i686                            2.0.89-1.rhsysv              MooseFS
moosefs-cgi.x86_64                          2.0.89-1.rhsysv              MooseFS
moosefs-cgiserv.i686                        2.0.89-1.rhsysv              MooseFS
moosefs-cgiserv.x86_64                      2.0.89-1.rhsysv              MooseFS
moosefs-chunkserver.i686                    2.0.89-1.rhsysv              MooseFS
moosefs-chunkserver.x86_64                  2.0.89-1.rhsysv              MooseFS
moosefs-cli.i686                            2.0.89-1.rhsysv              MooseFS
moosefs-cli.x86_64                          2.0.89-1.rhsysv              MooseFS
moosefs-client.i686                         2.0.89-1.rhsysv              MooseFS
moosefs-client.x86_64                       2.0.89-1.rhsysv              MooseFS
moosefs-master.i686                         2.0.89-1.rhsysv              MooseFS
moosefs-master.x86_64                       2.0.89-1.rhsysv              MooseFS
moosefs-metalogger.i686                     2.0.89-1.rhsysv              MooseFS
moosefs-metalogger.x86_64                   2.0.89-1.rhsysv              MooseFS
moosefs-netdump.i686                        2.0.89-1.rhsysv              MooseFS
moosefs-netdump.x86_64                      2.0.89-1.rhsysv              MooseFS
moosefs-pro-cgi.i686                        2.0.89-1.rhsysv              MooseFS
moosefs-pro-cgi.x86_64                      2.0.89-1.rhsysv              MooseFS
moosefs-pro-cgiserv.i686                    2.0.89-1.rhsysv              MooseFS
moosefs-pro-cgiserv.x86_64                  2.0.89-1.rhsysv              MooseFS
moosefs-pro-chunkserver.i686                2.0.89-1.rhsysv              MooseFS
moosefs-pro-chunkserver.x86_64              2.0.89-1.rhsysv              MooseFS
moosefs-pro-cli.i686                        2.0.89-1.rhsysv              MooseFS
moosefs-pro-cli.x86_64                      2.0.89-1.rhsysv              MooseFS
moosefs-pro-client.i686                     2.0.89-1.rhsysv              MooseFS
moosefs-pro-client.x86_64                   2.0.89-1.rhsysv              MooseFS
moosefs-pro-master.i686                     2.0.89-1.rhsysv              MooseFS
moosefs-pro-master.x86_64                   2.0.89-1.rhsysv              MooseFS
moosefs-pro-metalogger.i686                 2.0.89-1.rhsysv              MooseFS
moosefs-pro-metalogger.x86_64               2.0.89-1.rhsysv              MooseFS
moosefs-pro-netdump.i686                    2.0.89-1.rhsysv              MooseFS
moosefs-pro-netdump.x86_64                  2.0.89-1.rhsysv              MooseFS
moosefs-pro-supervisor.i686                 2.0.89-1.rhsysv              MooseFS
moosefs-pro-supervisor.x86_64               2.0.89-1.rhsysv              MooseFS

3、node2上安装master,